Ë
    9_f£= ã                   óš   — 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Zd dl	Z	d dl
Z
d dl	mZmZ ddlmZ ddlmZ  G d„ de«      Zy)é    N)ÚPIPEÚPopené   )Úget_arch)Úgettextc                   ó„  — e 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$„ Z&d%„ Z'd&„ Z(d?d'„Z)d@d)„Z*d*„ Z+d+„ Z,d,„ Z-dAd-„Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6dBd6„Z7dBd7„Z8dBd8„Z9d9„ Z:d:„ Z;d;„ Z<d<„ Z=d=„ Z>d>„ Z?y()CÚDistUpgradeQuirksz•
    This class collects the various quirks handlers that can
    be hooked into to fix/work around issues that the individual
    releases have
    c                 ó2  — || _         |j                  | _        || _        t        ddgt        d¬«      j                  «       d   j                  «       | _        t        «       | _	        d| _
        d | _        d| _        d | _        d | _        d | _        d| _        y )NÚunamez-rT©ÚstdoutÚuniversal_newlinesr   F)Ú
controllerÚ_viewÚconfigr   r   ÚcommunicateÚstripr   r   ÚarchÚextra_snap_spaceÚ_pokeÚ_snapstore_reachableÚ
_snap_listÚ_from_versionÚ_to_versionÚ_did_change_font)Úselfr   r   s      ú?/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeQuirks.pyÚ__init__zDistUpgradeQuirks.__init__/   sŒ   € Ø$ˆŒØ×%Ñ%ˆŒ
ØˆŒÜ˜G T˜?´4Ø.2ô4ß4?±K³MÀ!ñEßEJÁUÃWð 	Œ
ä“JˆŒ	Ø !ˆÔØˆŒ
Ø$)ˆÔ!ØˆŒØ!ˆÔØˆÔØ %ˆÕó    c                 ó  — | j                   j                  rt        j                  d«       y| j                  j                  dd«      }| j                  j                  dd«      }d|z  }t        | |d«      }|�t        j                  d|z  «        |«        |›|›�}t        | |d«      }|�t        j                  d|z  «        |«        d|›|›�}t        | |d«      }|� t        j                  d|z  «        |«        yy)	a˜  
        Run the specific quirks handler, the follow handlers are supported:
        - PreCacheOpen: run *before* the apt cache is opened the first time
                        to set options that affect the cache
        - PostInitialUpdate: run *before* the sources.list is rewritten but
                             after an initial apt-get update
        - PreDistUpgradeCache: run *right before* the dist-upgrade is
                               calculated in the cache
        - PostDistUpgradeCache: run *after* the dist-upgrade was calculated
                                in the cache
        - StartUpgrade: before the first package gets installed (but the
                        download is finished)
        - PostUpgrade: run *after* the upgrade is finished successfully and
                       packages got installed
        - PostCleanup: run *after* the cleanup (orphaned etc) is finished
        z)not running quirks in partialUpgrade modeNÚSourcesÚToÚFromú%szquirks: running %sÚfrom_)r   Ú_partialUpgradeÚloggingÚinfor   ÚgetÚgetattrÚdebug)r   Ú
quirksNameÚ
to_releaseÚfrom_releaseÚfuncnameÚfuncs         r   ÚrunzDistUpgradeQuirks.runB   sô   € ð$ �?‰?×*Ò*Ü�L‰LÐDÔEØØ—[‘[—_‘_ Y°Ó5ˆ
Ø—{‘{—‘ y°&Ó9ˆð ˜*Ñ$ˆÜ�t˜X tÓ,ˆØÐÜ�M‰MÐ.°Ñ9Ô:ÙŒFñ (©Ð4ˆÜ�t˜X tÓ,ˆØÐÜ�M‰MÐ.°Ñ9Ô:ÙŒFøñ #/±
Ð;ˆÜ�t˜X tÓ,ˆØÐÜ�M‰MÐ.°Ñ9Ô:Ù�Fð r   c                 óN   — t        j                  d«       | j                  «        y)z3 run before the apt cache is opened the first time zrunning Quirks.PreCacheOpenN)r'   r+   Ú_add_apport_ignore_list©r   s    r   ÚPreCacheOpenzDistUpgradeQuirks.PreCacheOpenp   s   € ä�‰Ð3Ô4Ø×$Ñ$Õ&r   c                 ó„  — t        j                  d«       | j                  «        | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        | j                  j                  }| j                  |«       | j                  «        d|vrt        j                  d«       y|d   j                  rNt        j                  j                  d«      st        j                  j                  d«      r| j!                  «        | j"                  r| j%                  «        yy)z2 run after the apt cache is opened the first time z%running Quirks.noblePostInitialUpdateÚsnapdú'package required for Quirk not in cacheNz/run/snapd.socketz/run/snapd-snap.socket)r'   r+   Ú_get_from_and_to_versionÚ_test_and_fail_on_i386Ú_test_and_fail_on_aufsÚ_test_and_fail_on_power8Ú_test_and_fail_on_armhf_raspiÚ_test_and_fail_on_tpm_fder   ÚcacheÚ_test_and_warn_if_ros_installedÚ#_maybe_prevent_flatpak_auto_removalÚis_installedÚosÚpathÚexistsÚ_checkStoreConnectivityr   Ú_calculateSnapSizeRequirements©r   r?   s     r   ÚnoblePostInitialUpdatez(DistUpgradeQuirks.noblePostInitialUpdatev   sñ   € ô 	�‰Ð=Ô>Ø×%Ñ%Ô'Ø×#Ñ#Ô%Ø×#Ñ#Ô%Ø×%Ñ%Ô'Ø×*Ñ*Ô,Ø×&Ñ&Ô(à—‘×%Ñ%ˆØ×,Ñ,¨UÔ3à×0Ñ0Ô2à˜%ÑÜ�M‰MÐCÔDØØ�‰>×&Ò&Ü—‘—‘Ð 3Ô4Ü—‘—‘Ð 8Ô9Ø×(Ñ(Ô*ð ×$Ò$Ø×/Ñ/Õ1ð %r   c                 óº  — t        j                  d«       | j                  j                  }d|vrt        j                  d«       y |d   j                  r| j
                  r| j                  «        d|v r|d   j                  r| j                  «        d|v r|d   j                  r| j                  «        d|v r!|d   j                  r| j                  «        y y y )Nzrunning Quirks.noblePostUpgrader7   r8   zubuntu-desktop-raspizubuntu-server-raspizlinux-firmware-raspi2)
r'   r+   r   r?   rB   r   Ú_replaceDebsAndSnapsÚ_replace_fkms_overlayÚ_add_kms_overlayÚ_remove_uboot_on_rpirH   s     r   ÚnoblePostUpgradez"DistUpgradeQuirks.noblePostUpgrade“   sÉ   € Ü�‰Ð7Ô8Ø—‘×%Ñ%ˆØ˜%ÑÜ�M‰MÐCÔDØØ�‰>×&Ò&Ø—’Ø×%Ñ%Ô'Ø! UÑ*ØÐ+Ñ,×9Ò9Ø×*Ñ*Ô,Ø  EÑ)ØÐ*Ñ+×8Ò8Ø×%Ñ%Ô'Ø" eÑ+ØÐ,Ñ-×:Ò:Ø×)Ñ)Õ+ð ;ð ,r   c                 óN   — t        j                  d«       | j                  «        y)z run after cleanup zrunning Quirks.PostCleanupN)r'   r+   Ú_remove_apport_ignore_listr4   s    r   ÚPostCleanupzDistUpgradeQuirks.PostCleanup§   s   € ä�‰Ð2Ô3Ø×'Ñ'Õ)r   c                 ó  — t        j                  d«       | j                  «        | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        | j                  «        y )Nzrunning Quirks.StartUpgrade)	r'   r+   Ú_applyPatchesÚ_removeOldApportCrashesÚ_killUpdateNotifierÚ_killKBluetoothÚ_pokeScreensaverÚ_stopDocvertConverterÚ_set_generic_fontr4   s    r   ÚStartUpgradezDistUpgradeQuirks.StartUpgrade­   sc   € Ü�‰Ð3Ô4Ø×ÑÔØ×$Ñ$Ô&Ø× Ñ Ô"Ø×ÑÔØ×ÑÔØ×"Ñ"Ô$Ø×ÑÕ r   c                 óŽ   — t        j                  d«       | j                  «        | j                  «        | j	                  «        y)z/ run right before calculating the dist-upgrade z"running Quirks.PreDistUpgradeCacheN)r'   r+   Ú_maybe_remove_gpg_wks_serverÚ!_install_t64_replacement_packagesÚ_handle_ufw_breaksr4   s    r   ÚPreDistUpgradeCachez%DistUpgradeQuirks.PreDistUpgradeCache¹   s3   € ä�‰Ð:Ô;à×)Ñ)Ô+Ø×.Ñ.Ô0Ø×ÑÕ!r   c                 óN   — t        j                  d«       | j                  «        y)z( run after calculating the dist-upgrade z#running Quirks.PostDistUpgradeCacheN)r'   r+   Ú_install_linux_metapackager4   s    r   ÚPostDistUpgradeCachez&DistUpgradeQuirks.PostDistUpgradeCacheÃ   s   € ä�‰Ð;Ô<Ø×'Ñ'Õ)r   c                 ó&  — t        «       }	 t        j                  ddgt        j                  d¬«      }|j                  «       d   j                  d«      D ]'  }|sŒ|j                  |j                  «       d   «       Œ) |S # t        $ r |cY S w xY w)z8 return a set of pci ids of the system (using lspci -n) Úlspciz-nTr   r   ú
é   )ÚsetÚ
subprocessr   r   ÚOSErrorr   ÚsplitÚadd)r   re   ÚpÚlines       r   Ú_get_pci_idszDistUpgradeQuirks._get_pci_idsÉ   sŠ   € ä“ˆð	Ü× Ñ  '¨4 ¼¿¹Ø48ô:ˆAð —M‘M“O AÑ&×,Ñ,¨TÓ2ò 	+ˆDÚØ—	‘	˜$Ÿ*™*›, q™/Õ*ð	+ð ˆøô ò 	ØŠLð	ús   Œ(B ÂBÂBc                 ó~  ‡ — t        j                  «       }	 |j                  d‰ j                  j                  z  «      j                  «       d   ‰ _        |j                  d‰ j                  j                  z  «      j                  «       d   ‰ _        y # t        $ rŸ t        ˆ fd„|j                  d«      D «       ‰ j                  j                  «      j                  «       d   ‰ _        t        ˆ fd„|j                  d«      D «       ‰ j                  j                  «      j                  «       d   ‰ _        Y y w xY w)Nr$   r   c              3   ó|   •K  — | ]3  }|j                   ‰j                  j                  k(  r|j                  –— Œ5 y ­w©N)Úseriesr   ÚfromDistÚversion©Ú.0Úrr   s     €r   ú	<genexpr>z=DistUpgradeQuirks._get_from_and_to_version.<locals>.<genexpr>à   s2   øè ø€ ò :˜qØ—H‘H §¡× 8Ñ 8Ò8ð —•ñ :ùó   ƒ9<Úobjectc              3   ó|   •K  — | ]3  }|j                   ‰j                  j                  k(  r|j                  –— Œ5 y ­wrr   )rs   r   ÚtoDistru   rv   s     €r   ry   z=DistUpgradeQuirks._get_from_and_to_version.<locals>.<genexpr>ä   s2   øè ø€ ò 8˜qØ—H‘H §¡× 6Ñ 6Ò6ð —•ñ 8ùrz   )Údistro_infoÚUbuntuDistroInforu   r   rt   rk   r   r}   r   ÚAttributeErrorÚnextÚget_all)r   Údis   ` r   r9   z*DistUpgradeQuirks._get_from_and_to_versionÖ   s  ø€ Ü×)Ñ)Ó+ˆð	3à—
‘
˜4 $§/¡/×":Ñ":Ñ:Ó;×AÑAÓCÀAÑFð Ôð —
‘
˜4 $§/¡/×"8Ñ"8Ñ8Ó9×?Ñ?ÓAÀ!ÑDð Õøô ò 	3Ü!%ó: B§J¡J¨xÓ$8ô :à—‘×(Ñ(ó"*÷ +0©%«'°!ñ"5ˆDÔô  $ó8 B§J¡J¨xÓ$8ô 8à—‘×&Ñ&ó (÷ ).©«°ñ 3ˆDÖð	3ús   —A<B ÂB%D<Ä;D<c                 ó
  — d}t         j                  j                  |«      rdt         j                  vry t	        j
                  g d¢t        t         j                  d«      ¬«      }|dk7  rt        j                  d«       y t	        j
                  |g«      }t        j                  d|›d	|›d
�«       |dk7  rL| j                  j                  t        d«      t        d«      «      }|s| j                  j                  «        y y y )Nz/usr/lib/nux/unity_support_testÚDISPLAY)Úpsz-Czunity-panel-serviceÚw©r   r   z5_test_and_warn_for_unity_3d_support: no unity runningz%_test_and_warn_for_unity_3d_support 'z' returned 'ú'zBYour graphics hardware may not be fully supported in Ubuntu 14.04.aS  Running the 'unity' desktop environment is not fully supported by your graphics hardware. You will maybe end up in a very slow environment after the upgrade. Our advice is to keep the LTS version for now. For more information see https://wiki.ubuntu.com/X/Bugs/UpdateManagerWarningForUnity3D Do you still want to continue with the upgrade?)rC   rD   rE   Úenvironri   ÚcallÚopenÚdevnullr'   r+   r   ÚaskYesNoQuestionÚ_r   Úabort)r   ÚUNITY_SUPPORT_TESTÚreturn_codeÚress       r   Ú#_test_and_warn_for_unity_3d_supportz5DistUpgradeQuirks._test_and_warn_for_unity_3d_supportè   sã   € Ø>ÐÜ—‘—‘Ð1Ô2Ø¤§¡Ñ+Øä —o‘oÚ/¼¼R¿Z¹ZÈÓ8MôOˆà˜!ÒÜ�M‰MØGôIàä —o‘oÐ'9Ð&:Ó;ˆÜ�Šâ"¢Kð1ô	2ð ˜!ÒØ—*‘*×-Ñ-Üð "ó #äð Dó EóˆCñ Ø—‘×%Ñ%Õ'ð ð r   c                 óø   — g d¢}| j                  «       }t        |«      j                  |«      rL| j                  j	                  t        d«      t        d«      «      }|s| j                  j                  «        y y y )N)z	8086:7121z	8086:7125z	8086:1132z	8086:3577z	8086:2562z	8086:3582z	8086:2572zFYour graphics hardware may not be fully supported in Ubuntu 12.04 LTS.zûThe support in Ubuntu 12.04 LTS for your Intel graphics hardware is limited and you may encounter problems after the upgrade. For more information see https://wiki.ubuntu.com/X/Bugs/UpdateManagerWarningForI8xx Do you want to continue with the upgrade?)ro   rh   Úintersectionr   rŽ   r�   r   r�   )r   ÚI8XX_PCI_IDSre   r“   s       r   Ú_test_and_warn_on_i8xxz(DistUpgradeQuirks._test_and_warn_on_i8xx	  sy   € òˆð ×!Ñ!Ó#ˆÜˆ|Ó×)Ñ)¨%Ô0Ø—*‘*×-Ñ-Üð &ó 'äð >ó ?ó	ˆCñ Ø—‘×%Ñ%Õ'ð ð 1r   c                 ó  — | j                  d«      rü| j                  d«      sê| j                  j                  t	        d«      t	        d«      «      }|s| j
                  j                  «        g d¢}t        j                  ddj                  |«      z  «       | j
                  j                  j                  dd«      }|D ]  }|j                  |«       Œ | j
                  j                  j                  ddd	j                  |«      «       y
y
y
)zi
        Some cards are no longer supported by fglrx. Check if that
        is the case and warn
        ÚfglrxzhUpgrading may reduce desktop effects, and performance in games and other graphically intensive programs.zµThis computer is currently using the AMD 'fglrx' graphics driver. No version of this driver is available that works with your hardware in Ubuntu 10.04 LTS.

Do you want to continue?)zxorg-driver-fglrxzxorg-driver-fglrx-envyzfglrx-kernel-sourcezfglrx-amdccclezxorg-driver-fglrx-devÚlibamdxvba1z	remove %sú, ÚDistroÚPostUpgradePurgeú,N)Ú_checkVideoDriverÚ_supportInModaliasesr   rŽ   r�   r   r�   r'   r+   Újoinr   ÚgetlistÚappendrh   )r   r“   ÚremovalsÚpostupgradepurgeÚremoves        r   Ú'_test_and_warn_on_dropped_fglrx_supportz9DistUpgradeQuirks._test_and_warn_on_dropped_fglrx_support!  sý   € ð ×"Ñ" 7Ô+Ø×-Ñ-¨gÔ6Ø—*‘*×-Ñ-Üð ó ô ð -ó .ó
/ˆCñ Ø—‘×%Ñ%Ô'òˆHô �M‰M˜+¨¯	©	°(Ó(;Ñ;Ô<Ø#Ÿ™×5Ñ5×=Ñ=ØØ"ó $Ðð #ò 0�Ø ×'Ñ'¨Õ/ð0à�O‰O×"Ñ"×&Ñ& xÐ1CØ'*§x¡xÐ0@Ó'AõCð= 7ð ,r   c                 óN  — | j                   dk(  rd}n| j                   dk(  rd}| j                  dk(  rst        j                  d«       t	        d«      }t	        d| j                   ›d	›d
�«      }| j
                  j                  ||«       | j                  j                  «        yy)z}
        Test and fail if the package architecture is i386 as we
        have dropped support for this architecture.
        z18.04z
April 2023z19.04zJanuary 2020Úi386zapt architecture is i386ú'Sorry, no more upgrades for this systemziThere will not be any further Ubuntu releases for this system's 'i386' architecture.

Updates for Ubuntu ú will continue until ú.N)r   r   r'   Úerrorr�   r   r   r�   )r   Úupdates_endÚsummaryÚmsgs       r   r:   z(DistUpgradeQuirks._test_and_fail_on_i386J  s•   € ð
 ×Ñ Ò(Ø&‰KØ×Ñ 7Ò*Ø(ˆKà�9‰9˜ÒÜ�M‰MÐ4Ô5ÜÐAÓBˆGÝð ×'Ó'ªð6ó 7ˆCð �J‰J×Ñ˜W cÔ*Ø�O‰O×!Ñ!Õ#ð r   c                 óÖ   — | j                   dk(  rZ| j                  «       sI| j                  j                  t	        d«      t	        d«      «       | j
                  j                  «        yyy)z~
        Test and fail if the cpu is not a arm v6 or greater,
        from 9.10 on we do no longer support those CPUs
        ÚarmelzNo ARMv6 CPUzþYour system uses an ARM CPU that is older than the ARMv6 architecture. All packages in karmic were built with optimizations requiring ARMv6 as the minimal architecture. It is not possible to upgrade your system to a new Ubuntu release with this hardware.N)r   Ú_checkArmCPUr   r®   r�   r   r�   r4   s    r   Ú_test_and_fail_on_non_arm_v6z.DistUpgradeQuirks._test_and_fail_on_non_arm_v6^  s_   € ð
 �9‰9˜ÒØ×$Ñ$Ô&Ø—
‘
× Ñ Ü�nÓ%Üð ,ó -ô.ð —‘×%Ñ%Õ'ð 'ð  r   c                 ó  — dD ]†  }t         j                  j                  |«      sŒ#t        j                  d«       t        d«      }t        d|z  «      }| j                  j	                  ||«       | j                  j                  «        Œˆ y)zé
        Test and fail if docker has aufs storage driver available
        as it is deprecated after 20.04. Even if no containers are
        currently running aufs, the upgrade could break existing
        container images.
        )z+/var/snap/docker/common/var-lib-docker/aufsz/var/lib/docker/aufszDocker config uses aufszISorry, this storage driver is not supported in kernels for newer releaseszÜThere will not be any further Ubuntu releases that provide kernel support for the aufs storage driver.

Please ensure that none of your containers are using the aufs storage driver, remove the directory %s and try again.N)	rC   rD   rE   r'   r®   r�   r   r   r�   )r   Úaufs_dirr°   r±   s       r   r;   z(DistUpgradeQuirks._test_and_fail_on_aufsp  s~   € ð1ò 	(ˆHä—‘—‘˜xÕ(Ü—‘Ð7Ô8Üð <ó =�äð ,ð
 /7ñ7ó 8�ð —
‘
× Ñ  ¨#Ô.Ø—‘×%Ñ%Õ'ñ	(r   c                 óü  — | j                   dk7  ryd}| j                  dk(  rd}n| j                  dk(  rd}t        d«      5 }|j                  «       }t	        j
                  d	|t        j                  «      rrt        j                  d
«       t        d«      }t        d| j                  ›d|›d�«      }| j                  j                  ||«       | j                  j                  «        ddd«       y# 1 sw Y   yxY w)a#  
        Test and fail if running on a POWER8 processor. Starting with Ubuntu
        22.04, ppc64el is compiled for POWER9 processors. Prior to 22.04 it
        was/is compiled for POWER8 processors. Hence POWER8 processors are not
        able to run, install or upgrade to jammy.
        Úppc64elNÚ z20.04z
April 2025z21.10z	July 2022ú/proc/cpuinfoz^cpu\s*:\s*POWER8zPOWER8 processor detectedr«   zfThere will not be any further Ubuntu releases for this system's POWER8 processor.

Updates for Ubuntu r¬   r­   )r   r   rŒ   ÚreadÚreÚsearchÚ	MULTILINEr'   r®   r�   r   r   r�   )r   r¯   ÚfÚcpuinfor°   r±   s         r   r<   z*DistUpgradeQuirks._test_and_fail_on_power8†  s×   € ð �9‰9˜	Ò!ØàˆØ×Ñ Ò(Ø&‰KØ×Ñ 7Ò*Ø%ˆKä�/Ó"ð 	( aØ—f‘f“hˆGä�y‰yÐ-¨w¼¿¹ÔEÜ—‘Ð9Ô:ÜÐEÓF�Ýð ×+Ó+ª[ð:ó ;�ð —
‘
× Ñ  ¨#Ô.Ø—‘×%Ñ%Ô'÷	(÷ 	(ñ 	(ús   ÁB(C2Ã2C;c                 óB  — 	 t        j                  dd«       y# t        $ r| t        j                  d«       | j
                  j                  t        d«      t        d«      «      }|s| j                  j                  «        | j
                  j                  «        Y yw xY w)zd
        upstart and vserver environments are not a good match, warn
        if we find one
        r   r   zno init foundzNo init availablea  Your system appears to be a virtualised environment without an init daemon, e.g. Linux-VServer. Ubuntu 10.04 LTS cannot function within this type of environment, requiring an update to your virtual machine configuration first.

Are you sure you want to continue?N)rC   Úkillrj   r'   Úwarningr   rŽ   r�   r   r�   ÚprocessEvents©r   r“   s     r   Ú_test_and_warn_if_vserverz+DistUpgradeQuirks._test_and_warn_if_vserver£  s~   € ð	'Ü�G‰G�A�q�MøÜò 	'Ü�O‰O˜OÔ,Ø—*‘*×-Ñ-ÜÐ%Ó&Üð 7ó 8ó9ˆCñ Ø—‘×%Ñ%Ô'Ø�J‰J×$Ñ$Ö&ð	'ús   ‚ ™BBÂBc                 ó¦  — t        «       }dD ])  }|j                  t        j                  d|z  «      «       Œ+ d}|D ]D  }|r n@|D ]9  }|j	                  |j
                  «      sŒ|j                  s|j                  rd} ŒD ŒF |rL| j                  j                  t        d«      t        d«      «      }|s| j                  j                  «        yyy)z¿
        Test and warn if ROS is installed. A given ROS release only
        supports specific Ubuntu releases, and can cause the upgrade
        to fail in an overly-cryptic manner.
        )Úcatkinzrosboost-cfgÚroscleanzros-environmentzros-workspacezros-[^\-]+-%sFTz-The Robot Operating System (ROS) is installeda	  It appears that ROS is currently installed. Each ROS release is very strict about the versions of Ubuntu it supports, and Ubuntu upgrades can fail if that guidance isn't followed. Before continuing, please either uninstall ROS, or ensure the ROS release you have installed supports the version of Ubuntu to which you're upgrading.

For ROS 1 releases, refer to REP 3:
https://www.ros.org/reps/rep-0003.html

For ROS 2 releases, refer to REP 2000:
https://www.ros.org/reps/rep-2000.html

Are you sure you want to continue?N)rh   rl   r½   ÚcompileÚmatchÚnamerB   Úmarked_installr   rŽ   r�   r   r�   )r   r?   Úros_package_patternsÚpackage_nameÚros_is_installedÚpkgÚpatternr“   s           r   r@   z1DistUpgradeQuirks._test_and_warn_if_ros_installed¹  sã   € ô  #›uÐð!ò 	=ˆLð !×$Ñ$Ü—
‘
Ð+¨lÑ:Ó;õ=ð	=ð !ÐØò 	ˆCÙÙà/ò �Ø—=‘= §¡Õ*Ø×'Ò'¨3×+=Ò+=Ø+/Ð(Ùñ	ð		ñ Ø—*‘*×-Ñ-ÜÐAÓBÜð 7ó 8ó9ˆCñ Ø—‘×%Ñ%Õ'ð ð r   c                 ó  — d}d| j                   j                  vry| j                   j                  d   j                  syt        j                  j                  d«      sydD ]V  }t        j                  d|gt        j                  ¬«      }|j                  j                  d«      j                  «       sŒTd} n t        j                  d	j                  |rd
nd«      «       |sy| j                   j                  d   j                  d¬«       dD ]Œ  }|| j                   j                  vrŒ| j                   j                  |   j                  sŒ@t        j                  dj                  |«      «       | j                   j                  |   j                  d¬«       ŒŽ | j                   j                  j!                  | j"                  j%                  «       | j"                  j'                  | j                   j                  «      «       y)z�
        If flatpak is installed, and there are either active remotes, or
        flatpak apps installed, prevent flatpak's auto-removal on upgrade.
        FÚflatpakNz/usr/bin/flatpak)ÚremotesÚlistrˆ   úutf-8Tz-flatpak will{}be marked as manually installedú z NOT )Úauto)zplasma-discover-backend-flatpakzgnome-software-plugin-flatpakz'{} will be marked as manually installed)r   r?   rB   rC   rD   rE   ri   r1   r   r   Údecoder   r'   r+   ÚformatÚ	mark_autoÚcommitr   ÚgetAcquireProgressÚgetInstallProgress)r   Úprevent_auto_removalÚsubcmdrx   rÒ   s        r   rA   z5DistUpgradeQuirks._maybe_prevent_flatpak_auto_removalè  s¦  € ð
  %Ðà˜DŸO™O×1Ñ1Ñ1Øà�‰×$Ñ$ YÑ/×<Ò<Øä�w‰w�~‰~Ð0Ô1Øà)ò 	ˆFÜ—‘Ø'¨Ð0Ü%Ÿ?™?ôˆAð �x‰x�‰˜wÓ'×-Ñ-Õ/Ø'+Ð$Ùð	ô 	�‰ÐEß‘vÑ%9™c¸wÓGô	Iñ $Øà�‰×Ñ˜iÑ(×2Ñ2¸Ð2Ô>ð5ò 
	=ˆCà˜$Ÿ/™/×/Ñ/Ñ/Øà—?‘?×(Ñ(¨Ñ-×:Ò:Øä�M‰MÐCß!™6 #›;ô(à�O‰O×!Ñ! #Ñ&×0Ñ0°eÐ0Õ<ð
	=ð 	�‰×Ñ×$Ñ$Ø�J‰J×)Ñ)Ó+Ø�J‰J×)Ñ)¨$¯/©/×*?Ñ*?Ó@õ	
r   c                 óV  — ddg}d}	 t        j                  t         j                  j                  |«      d¬«       t	        |d«      5 }|D ]  }|j                  |› d�«       Œ 	 d d d «       y # 1 sw Y   y xY w# t        $ r%}t        j                  d|› d	|› �«       Y d }~y d }~ww xY w)
Nz/usr/libexec/tracker-extract-3z!/usr/sbin/update-apt-xapian-indexú2/etc/apport/blacklist.d/upgrade-quirks-ignore-listT©Úexist_okr‡   rf   zFailed to create ú: )	rC   ÚmakedirsrD   ÚdirnamerŒ   ÚwriteÚ	Exceptionr'   r+   )r   Úignore_listrD   rÀ   ÚbinÚes         r   r3   z)DistUpgradeQuirks._add_apport_ignore_list  s¦   € à,Ø/ð
ˆð
 Dˆð	;Ü�K‰KœŸ™Ÿ™¨Ó-¸Õ=Ü�d˜C“ð ( AØ&ò (�CØ—G‘G˜s˜e 2˜JÕ'ñ(÷(÷ (ñ (ûô ò 	;Ü�M‰MÐ-¨d¨V°2°a°SÐ9×:Ñ:ûð	;ús6   ˆA A: ÁA.Á%A: Á.A7Á3A: Á7A: Á:	B(ÂB#Â#B(c                 ó–   — d}	 t        j                  |«       y # t        $ r%}t        j                  d|› d|› �«       Y d }~y d }~ww xY w)Nrä   zFailed to remove rç   )rC   r§   rë   r'   r+   )r   rD   rî   s      r   rQ   z,DistUpgradeQuirks._remove_apport_ignore_list+  sD   € ØCˆð	;Ü�I‰I�d�OøÜò 	;Ü�M‰MÐ-¨d¨V°2°a°SÐ9×:Ñ:ûð	;ús   „ š	A£AÁAc                 óD  — t        j                  d«       t        j                  j	                  d«      st        j
                  d«       yt        d«      5 }|j                  «       }ddd«       t        j                  dt        j                  «      ryy# 1 sw Y   Œ0xY w)zE
        parse /proc/cpuinfo and search for ARMv6 or greater
        zchecking for ARM CPU versionr»   zcannot open /proc/cpuinfo ?!?FNz^Processor\s*:\s*ARMv[45]T)r'   r+   rC   rD   rE   r®   rŒ   r¼   r½   r¾   r¿   )r   rÀ   rÁ   s      r   r´   zDistUpgradeQuirks._checkArmCPU3  sy   € ô 	�‰Ð4Ô5Ü�w‰w�~‰~˜oÔ.Ü�M‰MÐ9Ô:ØÜ�/Ó"ð 	 aØ—f‘f“hˆG÷	ä�9‰9Ð1°7Ü—\‘\ô#àØ÷	ð 	ús   ÁBÂBc                 óü   — t        j                  d«       t        j                  j	                  d«      st        j
                  d«       yt        d«      5 }|j                  «       }ddd«       |S # 1 sw Y   S xY w)z„
        read /sys/class/dmi/id/sys_vendor in case there are
        system specific issues with upgrading e.g LP: #1928434
        zchecking for system vendorz/sys/class/dmi/id/sys_vendorz(cannot open /sys/class/dmi/id/sys_vendorrº   N)r'   r+   rC   rD   rE   r®   rŒ   r¼   )r   rÀ   Úvendors      r   Ú_readDMIVendorz DistUpgradeQuirks._readDMIVendorB  sb   € ô
 	�‰Ð2Ô3Ü�w‰w�~‰~Ð<Ô=Ü�M‰MÐDÔEØÜÐ0Ó1ð 	°QØ—V‘V“XˆF÷	àˆ÷	àˆús   ÁA1Á1A;c                 óœ   — t         j                  j                  d«      r-t        j                  d«       t        j                  ddg«       yy)z, /etc/init.d/apparmor stop (see bug #559433)z/etc/init.d/apparmorz/etc/init.d/apparmor stopÚstopN©rC   rD   rE   r'   r+   ri   r‹   r4   s    r   Ú_stopApparmorzDistUpgradeQuirks._stopApparmorO  s7   € ä�7‰7�>‰>Ð0Ô1Ü�M‰MÐ5Ô6Ü�O‰OÐ3°VÐ<Õ=ð 2r   c                 óœ   — t         j                  j                  d«      r-t        j                  d«       t        j                  ddg«       yy)z5 /etc/init.d/docvert-converter stop (see bug #450569)z/etc/init.d/docvert-converterz"/etc/init.d/docvert-converter stoprõ   Nrö   r4   s    r   rY   z'DistUpgradeQuirks._stopDocvertConverterU  s7   € ä�7‰7�>‰>Ð9Ô:Ü�M‰MÐ>Ô?Ü�O‰OÐ<¸fÐEÕFð ;r   c                 óœ   — t         j                  j                  d«      r-t        j                  d«       t        j                  g d¢«       yy)zkill update-notifierú/usr/bin/killallzkilling update-notifier)Úkillallú-qzupdate-notifierNrö   r4   s    r   rV   z%DistUpgradeQuirks._killUpdateNotifier[  s4   € ô �7‰7�>‰>Ð,Ô-Ü�M‰MÐ3Ô4Ü�O‰OÒ@ÕAð .r   c                 óœ   — t         j                  j                  d«      r-t        j                  d«       t        j                  g d¢«       yy)z3killall kblueplugd kbluetooth (riddel requested it)rú   zkilling kblueplugd kbluetooth4)rû   rü   Ú
kblueplugdÚkbluetooth4Nrö   r4   s    r   rW   z!DistUpgradeQuirks._killKBluetoothb  s2   € ä�7‰7�>‰>Ð,Ô-Ü�M‰MÐ:Ô;Ü�O‰OÒJÕKð .r   c                 ó’  — t         j                  j                  d«      r~t         j                  j	                  d«      r^t        j                  d«       d}|dz  }|dz  }	 t        j                  |d¬«      | _	        t        j                  | j                  «       y y y # t        t        f$ r t        j                  d	«       Y y w xY w)
Nz/usr/bin/xdg-screensaverr…   z$setup poke timer for the screensaverzwhile true;z3 do /usr/bin/xdg-screensaver reset >/dev/null 2>&1;z sleep 30; doneT)Úshellz failed to setup screensaver poke)rC   rD   rE   rŠ   r)   r'   r+   ri   r   r   ÚatexitÚregisterÚ_stopPokeScreensaverrj   Ú
ValueErrorÚ	exception)r   Úcmds     r   rX   z"DistUpgradeQuirks._pokeScreensaverh  s¨   € Ü�G‰G�N‰NÐ5Ô6Ü—
‘
—‘˜yÔ)Ü�M‰MÐ@ÔAØˆCØÐHÑHˆCØÐ$Ñ$ˆCðFÜ'×-Ñ-¨c¸Ô>�”
Ü—‘ × 9Ñ 9Õ:ð *ð 7øô œZÐ(ò FÜ×!Ñ!Ð"DÖEðFús   Á!;B Â$CÃCc                 óâ   — d}| j                   �<	 | j                   j                  «        | j                   j                  «       }d | _         |S # t        $ r t	        j
                  d«       Y Œ)w xY w)NFzfailed to stop screensaver poke)r   Ú	terminateÚwaitrj   r'   r  rÆ   s     r   r  z&DistUpgradeQuirks._stopPokeScreensaveru  sg   € ØˆØ�:‰:Ð!ðEØ—
‘
×$Ñ$Ô&Ø—j‘j—o‘oÓ'�ð ˆDŒJØˆ
øô ò EÜ×!Ñ!Ð"CÖDðEús   �4A ÁA.Á-A.c           	      ó  — 	 dD ]P  }t        j                   d|z  «      D ]3  }t        j                  d|›d|›d�«       t        j                  |«       Œ5 ŒR y# t
        $ r"}t        j                  d|z  «       Y d}~yd}~ww xY w)z: remove old apport crash files and whoopsie control files )z.crashz.uploadz	.uploadedz/var/crash/*%szremoving old z file 'r‰   z+error during unlink of old crash files (%s)N)Úglobr'   r+   rC   Úunlinkrë   rÄ   )r   ÚextrÀ   rî   s       r   rU   z)DistUpgradeQuirks._removeOldApportCrashes€  sz   € ð	OØ9ò !�ÜŸ™Ð#3°cÑ#9Ó:ò !�AÜ—M’MÂÂaÐ"HÔIÜ—I‘I˜a•Lñ!ñ!øô ò 	OÜ�O‰OÐIÈAÑM×NÑNûð	Oús   ‚AA Á	BÁ!A>Á>Bc                 ó€  — d}t         j                  j                  «       }d|d<   t        g d¢t        t        |d¬«      j                  «       }t        j                  d|d   t        j                  «      rd| _	        y	t        j                  d
|d   t        j                  «      rýt        j                  d«       d}| j                  j                  }d|v rN|d   j                  r?|d   j                  j                   j#                  d«      st        j                  d«       d}|rMt%        d«      }t%        d«      }| j&                  j                  ||«       | j                  j)                  «        n®| j&                  j+                  t%        d«      t%        d«      «      }nd|d   v rDt        j                  d«       | j&                  j+                  t%        d«      t%        d«      «      }n4d|d   v rd}t        j                  d«       nt        j                  d«       |s| j                  j)                  «        y	y	)z: check for connectivity to the snap store to install snapsFzC.UTF-8ÚLANG)Úsnapr+   ÚconnectivityT)r   ÚstderrÚenvr   z	^ \* PASSr   Nz^ \*.*unreachablezNo snap store connectivityÚlxdz1:zlxd is installedz#Connection to the Snap Store faileda�  You have the package lxd installed but your system is unable to reach the Snap Store. lxd is now provided via a snap and the release upgrade will fail if snapd is not functional. Please make sure you're connected to the Internet and update any firewall or proxy settings as needed so that you can reach api.snapcraft.io. If you are an enterprise with a firewall setup you may want to configure a Snap Store proxy.zConnection to Snap Store failedzÅYour system does not have a connection to the Snap Store. For the best upgrade experience make sure that your system can connect to api.snapcraft.io.
Do you still want to continue with the upgrade?zerror: unknown commandr   z snap debug command not availablezOutdated snapd packagez»Your system does not have the latest version of snapd. Please update the version of snapd on your system to improve the upgrade experience.
Do you still want to continue with the upgrade?zerror: access deniedzNot running as root!z-Unhandled error connecting to the snap store.)rC   rŠ   Úcopyr   r   r   r½   r¾   r¿   r   r'   r®   r   r?   rB   Ú	candidateru   Ú
startswithr�   r   r�   rŽ   )r   r“   Úsnap_envÚ	connectedÚold_lxd_deb_installedr?   r°   r±   s           r   rF   z)DistUpgradeQuirks._checkStoreConnectivityŠ  sâ  € àˆÜ—:‘:—?‘?Ó$ˆØ$ˆ�ÑÜÒ;ÄDÜ!%¨8Ø-1ô3ç3>±;³=ð 	ô �9‰9�\ 9¨Q¡<´·±Ô>Ø(,ˆDÔ%Øä�Y‰YÐ+¨Y°q©\¼2¿<¹<ÔHÜ�M‰MÐ6Ô7Ø$)Ð!Ø—O‘O×)Ñ)ˆEØ˜‰~à˜‘<×,Ò,Ø˜e™×.Ñ.×6Ñ6×AÑAÀ$ÔGÜ—M‘MÐ"4Ô5Ø,0Ð)Ù$ÜÐAÓB�Üð 	.ó 
�ð —
‘
× Ñ  ¨#Ô.Ø—‘×%Ñ%Õ'à—j‘j×1Ñ1ÜÐ7Ó8Üð Hó Ió‘ð &¨°1©Ñ5Ü�M‰MÐ<Ô=Ø—*‘*×-Ñ-ÜÐ*Ó+Üð Dó Eó‰Cð $ y°¡|Ñ3ØˆCÜ�M‰MÐ0Õ1ä�M‰MÐIÔJÙØ�O‰O×!Ñ!Õ#ð r   c           	      ó(  — dd l }dd l}ddlm} | j	                  «        | j
                  j                  t        d«      «       | j                  j                  «       D �]  \  }}|d   dk7  rŒdd|d   |d	   d
œ}g |gdœ}|j                  j                  dt        |j                  |«      d¬«      ¬«      }|j                  dd«       |j                  dd«       |j                  d| j                  «       	 |j                  j!                  |«      j#                  «       }	|j%                  |	«      }
t'        |
d   d   d   d   d   «      }| xj0                  |z  c_        �Œ y # t(        |t*        f$ r t-        j.                  d|z  «       Y �Œ3w xY w)Nr   )ÚURLErrorz"Calculating snap size requirementsÚcommandÚinstallzupgrade-size-checkÚdownloadúsnap-idÚchannel)zinstance-keyÚactionr!  r"  )ÚcontextÚactionsz)https://api.snapcraft.io/v2/snaps/refreshrØ   ©Úencoding)ÚurlÚdatazSnap-Device-SeriesÚ16zContent-typezapplication/jsonzSnap-Device-ArchitectureÚresultsr  ÚsizezFailed fetching size of snap %s)ÚjsonÚurllib.requestÚurllib.errorr  Ú_prepare_snap_replacement_datar   ÚupdateStatusr�   r   ÚitemsÚrequestÚRequestÚbytesÚdumpsÚ
add_headerr   Úurlopenr¼   ÚloadsÚintÚKeyErrorr  r'   r+   r   )r   r-  Úurllibr  r  Úsnap_objectr#  r)  ÚreqÚresponser(   r,  s               r   rG   z0DistUpgradeQuirks._calculateSnapSizeRequirementsÊ  s‰  € ÛÛÝ)ð
 	×+Ñ+Ô-ð 	�
‰
×Ñ¤Ð"FÓ GÔHØ!%§¡×!6Ñ!6Ó!8ó 	*ÑˆD�+Ø˜9Ñ%¨Ò2Øà 4Ø$Ø& yÑ1Ø& yÑ1ñ	ˆFð Ø"˜8ñˆDð —.‘.×(Ñ(Ø?Ü˜4Ÿ:™: dÓ+°gÔ>ð )ó @ˆCð �N‰NÐ/°Ô6Ø�N‰N˜>Ð+=Ô>Ø�N‰NÐ5°t·y±yÔAðØ!Ÿ>™>×1Ñ1°#Ó6×;Ñ;Ó=�Ø—z‘z (Ó+�Ü˜4 	™?¨1Ñ-¨fÑ5°jÑAÀ&ÑIÓJ�ð ×!Ò! TÑ)×!ñ5	*øô. ˜h¬
Ð3ò Ü—‘Ð?À$ÑFÔGÚðús   Ã8AE%Å%(FÆFc                 ó²  — | j                   j                  t        d«      «       | j                  j	                  «       D �]`  \  }}|d   }|dk(  r2| j                   j                  t        d|z  «      «       d|d|d   |g}nc|dk(  r-| j                   j                  t        d	|z  «      «       d||g}n1| j                   j                  t        d
|z  «      «       d|d|d   |g}	 | j                   j                  «        t        j                  |t        j                  d¬«      }| j                   j                  «        |j                  dk(  rt        j                  |›d|›d�«       |dk(  s�Œ2|d   s�Œ9| j                  j                  j                  |d   «       �Œc y# t        j                  $ r t        j                  |›d|›d�«       Y �Œ–w xY w)z? install a snap and mark its corresponding package for removal zProcessing snap replacementsr  Úswitchzrefreshing snap %sr  z	--channelr"  r§   zremoving snap %szinstalling snap %sT)r   Úcheckz	 of snap z failedr   z
 succeededr  ÚdebN)r   r1  r�   r   r2  rÅ   ri   r1   r   ÚCalledProcessErrorr'   r+   Ú
returncoder   Úforced_obsoletesr¤   )r   r  r=  r  Ú	popenargsÚprocs         r   rK   z&DistUpgradeQuirks._replaceDebsAndSnapsò  s¨  € à�
‰
×Ñ¤Ð"@Ó AÔBð "&§¡×!6Ñ!6Ó!8ó 	LÑˆD�+Ø! )Ñ,ˆGØ˜(Ò"ð —
‘
×'Ñ'¬Ð*>ÀÑ*EÓ(FÔGØ# WØ(¨+°iÑ*@À$ðH‘	à˜HÒ$Ø—
‘
×'Ñ'¬Ð*<¸tÑ*CÓ(DÔEØ# W¨dÐ3‘	à—
‘
×'Ñ'¬Ð*>ÀÑ*EÓ(FÔGØ# WØ(¨+°iÑ*@À$ðH�	ð	Ø—
‘
×(Ñ(Ô*Ü!—~‘~ØÜ%Ÿ?™?Øô �ð —
‘
×(Ñ(Ô*ð �‰ !Ò#Ü—‘º7ÂDÐIÔJØ˜)Ô#¨°EÔ(:Ø—‘×0Ñ0×7Ñ7¸ÀEÑ8JÖKñ9	Løô, ×0Ñ0ò Ü—‘ºÂÐFÔGÚðús   Ã&AF$Æ$.GÇGc                 ó¨  — t        j                  d«       d}t        d«      5 }|j                  «       }ddd«       t	        j
                  dt        j                  «      rd}|sbt        j                  d«       t        d«      }t        d	«      }| j                  j                  ||«       | j                  j                  «        yy# 1 sw Y   Œ•xY w)
z check PAE in /proc/cpuinfo Ú	_checkPaer   r»   Nz^flags\s+:.* pae r   zno pae in /proc/cpuinfozPAE not enabledzôYour system uses a CPU that does not have PAE enabled. Ubuntu only supports non-PAE systems up to Ubuntu 12.04. To upgrade to a later version of Ubuntu, you must enable PAE (if this is possible) see:
http://help.ubuntu.com/community/EnablingPAE)r'   r+   rŒ   r¼   r½   r¾   r¿   r®   r�   r   r   r�   )r   ÚpaerÀ   rÁ   r°   r±   s         r   rJ  zDistUpgradeQuirks._checkPae  s°   € ô 	�‰�kÔ"ØˆÜ�/Ó"ð 	 aØ—f‘f“hˆG÷	ä�9‰9Ð)¨7´B·L±LÔAØˆCÙÜ�M‰MÐ3Ô4ÜÐ)Ó*ˆGÜð Có DˆCð
 �J‰J×Ñ˜W cÔ*Ø�O‰O×!Ñ!Õ#ð ÷		ð 	ús   £CÃCc                 óf  — d}t         j                  j                  |«      syt        |«      5 }|j	                  «       }ddd«       D ]Z  }|j                  d«      d   j                  «       }|j                  «       j                  d«      sŒE|j                  d|z  «      sŒZ y y# 1 sw Y   ŒixY w)	z2 check if the given driver is in use in xorg.conf z/etc/X11/xorg.confFNú#r   Údriverz"%s"T)
rC   rD   rE   rŒ   Ú	readlinesrk   r   Úlowerr  Úendswith)r   rÍ   ÚXORGrÀ   Úlinesrn   Úss          r   r    z#DistUpgradeQuirks._checkVideoDriver)  s™   € à#ˆÜ�w‰w�~‰~˜dÔ#ØÜ�$‹Zð 	"˜1Ø—K‘K“MˆE÷	"àò 	ˆDØ—
‘
˜3“ Ñ"×(Ñ(Ó*ˆAà—‘“	×$Ñ$ XÕ.Ø—J‘J˜v¨™}Õ-Ùð	ð ÷	"ð 	"ús   ®B'Â'B0c           
      óH  — t         j                  j                  |«      st        j                  d«       yt        j
                  |«      D �]   }d|vrt        j                  d|z  «       Œ!t        j                  d|z  «       |j                  dd«      \  }}}|j                  dd«      }t        j                  d	|›d
|›d|›d�«       t         j                  j                  |«      st        j                  d|z  «       Œ¸t        j                  «       }t        |d«      5 }|j                  |j                  «       «       ddd«       |j                  «       |k(  rt        j                  d|z  «       �Œ-|j                  «       |k7  rt        j                  d|z  «       �ŒZddlm}	 	  |	|t         j                  j#                  ||«      |«       t        j$                  d|z  «       �Œ£ y# 1 sw Y   Œ®xY w# t&        $ r t        j(                  d|z  «       Y �ŒÕw xY w)z¯
        helper that applies the patches in patchdir. the format is
        _path_to_file.md5sum and it will apply the diff to that file if the
        md5sum matches
        zno patchdirNr­   zskipping '%s' (no '.')z'check if patch '%s' needs to be appliedrg   r�   ú/ztarget for 'z' is 'z' -> 'r‰   ztarget '%s' does not existÚrbz%already at target hash, skipping '%s'z(unexpected target md5sum, skipping: '%s'r   )Úpatchzapplied '%s' successfullyzed failed for '%s')rC   rD   rE   r'   r+   ÚlistdirÚrsplitÚreplaceÚhashlibÚmd5rŒ   Úupdater¼   Ú	hexdigestrÄ   ÚDistUpgradePatcherrX  r¢   r(   rë   r  )
r   ÚpatchdirrÀ   Úencoded_pathÚmd5sumÚresult_md5sumrD   r]  ÚfdrX  s
             r   rT   zDistUpgradeQuirks._applyPatches8  s¸  € ô �w‰w�~‰~˜hÔ'Ü�M‰M˜-Ô(ØÜ—‘˜HÓ%ó $	<ˆAà˜!‰|Ü—‘Ð6¸Ñ:Ô;ØÜ�M‰MÐCÀaÑGÔHØ45·H±H¸SÀ!Ó4DÑ1ˆ\˜6 =ð  ×'Ñ'¨¨SÓ1ˆDÜ�MŠMÚ’<¢ð'ô (ô —7‘7—>‘> $Ô'Ü—‘Ð:¸TÑAÔBØô
 —+‘+“-ˆCÜ�d˜DÓ!ð & RØ—
‘
˜2Ÿ7™7›9Ô%÷&à�}‰}‹ -Ò/Ü—‘ÐEÈÑLÔMÙØ—‘“ FÒ*Ü—‘Ð JØ"&ñ!'ô (áå1ð<Ù�dœBŸG™GŸL™L¨°1Ó5°}ÔEÜ—‘Ð8¸1Ñ<Ö=ñE$	<÷*&ð &ûô ò <Ü×!Ñ!Ð"6¸Ñ":×;ð<ús   Ä# G0Æ,A G<Ç0G9	Ç<!H!È H!Nc                 ój  — |s| j                  «       }|| j                  j                  vs#| j                  j                  |   j                  st	        j
                  d«       y| j                  j                  |   }| j                  |j                  j                  «      D ]w  \  }}|D ]m  }t        j                  d|«      }|sŒ|j                  d«      ›d|j                  d«      ›�}|j                  «       |v sŒTt	        j                  d|z  «         y Œy t	        j                  d	|z  «       y)
zß
        Check if pkgname will work on this hardware

        This helper will check with the modaliasesdir if the given
        pkg will work on this hardware (or the hardware given
        via the lspci argument)
        zcan not find '%s' in cacheFzpci:v0000(.+)d0000(.+)sv.*r   ú:rg   z%found system pciid '%s' in modaliasesTz4checking for %s support in modaliases but none found)ro   r   r?   r  r'   rÄ   Ú!_parse_modaliases_from_pkg_headerÚrecordr½   rÌ   ÚgrouprP  r+   )	r   Úpkgnamere   rÒ   ÚmoduleÚ
pciid_listÚpciidÚmÚmatchids	            r   r¡   z&DistUpgradeQuirks._supportInModaliasesg  s  € ñ Ø×%Ñ%Ó'ˆEà˜4Ÿ?™?×0Ñ0Ñ0Ø—O‘O×)Ñ)¨'Ñ2×<Ò<Ü�O‰OÐ8Ô9ØØ�o‰o×#Ñ# GÑ,ˆà×6Ñ6°s·}±}×7KÑ7KÓLò		$Ñ ˆV�Zà#ò $�Ü—H‘HÐ9¸5ÓA�ÚØ)*¯©°­°Q·W±W¸Q´ZÐ@�GØ—}‘}“¨%Ò/ÜŸ™Ð&MØ(/ñ'0ô 1â#ñ$ð		$ô 	�‰ÐLØñ ô 	!àr   c           	      ó  — d|vrg S g }|d   j                  d«      D ]h  }|j                  d«      }|sŒ|j                  d«      \  }}|j                  ||j                  d«      D �cg c]  }|j                  «       ‘Œ c}f«       Œj |S c c}w )z. return a list of (module1, (pciid, ...), ...)Ú
Modaliasesú)rœ   ú(rŸ   )rk   r   r¤   )r   Ú	pkgrecordÚmodulesro  rl  ÚpciidsÚxs          r   rh  z3DistUpgradeQuirks._parse_modaliases_from_pkg_header†  s’   € à˜yÑ(ØˆIàˆØ˜<Ñ(×.Ñ.¨sÓ3ò 	MˆAØ—‘˜“ˆAÙØØ Ÿw™w s›|ÑˆV�VØ�N‰N˜F¸¿¹ÀSÓ8IÖ$J°1 Q§W¡W¥YÒ$JÐKÕLð	Mð ˆùò %Ks   Á'B
c                 ór  — t        j                  d«       | j                  j                  }d|vrt        j                  d«       y |d   j                  s%|d   j
                  st        j                  d«       y 	 dd l}|j                  j                  «       }|D ]'  }d|j                  v sŒt        j                  d«        y  t        j                  d«       |j                  d	d
| j                  j                  dgd«       |j                  «        y # t        $ r t        j                  d«       Y y w xY w)NÚ_add_extras_repositoryzubuntu-extras-keyringz-no ubuntu-extras-keyring, no need to add repoz2ubuntu-extras-keyring not installed/marked_installr   zextras.ubuntu.comz*found extras.ubuntu.com, no need to add itz/no extras.ubuntu.com, adding it to sources.listrC  zhttp://extras.ubuntu.com/ubuntuÚmainz!Third party developers repositoryzerror adding extras.ubuntu.com)r'   r+   r   r?   rÎ   Ú	installedÚaptsources.sourceslistÚsourceslistÚSourcesListÚurir(   rl   r}   Úsaverë   r  )r   r?   Ú
aptsourcesÚsourcesÚentrys        r   rz  z(DistUpgradeQuirks._add_extras_repository”  s  € Ü�‰Ð.Ô/Ø—‘×%Ñ%ˆØ"¨%Ñ/Ü�M‰MÐIÔJØØÐ-Ñ.×=Ò=ØÐ-Ñ.×8Ò8Ü�M‰MÐNÔOØð	@Û)Ø ×,Ñ,×8Ñ8Ó:ˆGØ ò 	�Ø&¨%¯)©)Ò3Ü—M‘MÐ"NÔOÙð	ô
 —‘ÐNÔOØ—‘˜EÐ#DØ ŸO™O×2Ñ2°V°HØ?ôAð —‘•øÜò 	@Ü×ÑÐ>Ö?ð	@ús   Á;1D Â-D ÃAD ÄD6Ä5D6c                 óü   — 	 | j                   j                  }d|v r=|d   j                  r-d|v r(t        j                  d«       |j                  dd«       yyyy# t        $ r t        j                  d«       Y yw xY w)zÂ foomatic-db-gutenprint get removed during the upgrade,
            replace it with the compressed ijsgutenprint-ppds
            (context is foomatic-db vs foomatic-db-compressed-ppds)
        zfoomatic-db-gutenprintzijsgutenprint-ppdszinstalling ijsgutenprint-ppdsz1foomatic-db-gutenprint -> ijsgutenprint-ppds rulez_gutenprint_fixup failedN)r   r?   Úmarked_deleter'   r(   Úmark_installrë   r  rH   s     r   Ú_gutenprint_fixupz#DistUpgradeQuirks._gutenprint_fixup®  s‡   € ð

	:Ø—O‘O×)Ñ)ˆEØ(¨EÑ1ØÐ2Ñ3×AÒAØ(¨EÑ1Ü—‘Ð<Ô=Ø×"Ñ"Ø(ØGõIð 2ð Bð 2øô ò 	:Ü×ÑÐ8Ö9ð	:ús   ‚AA ÁA;Á:A;c                 óü   — d}t         j                  j                  |«      s@	 t        j                  d«       t        |d«      5 }|j                  d|z  «       ddd«       yy# t        $ r Y Œ6w xY w# 1 sw Y   yxY w)z5 enable multiarch via /etc/dpkg/dpkg.cfg.d/multiarch z/etc/dpkg/dpkg.cfg.d/multiarchz/etc/dpkg/dpkg.cfg.d/r‡   zforeign-architecture %s
N)rC   rD   rE   rè   rj   rŒ   rê   )r   Úforeign_archÚcfgrÀ   s       r   Ú_enable_multiarchz#DistUpgradeQuirks._enable_multiarch¿  s€   € à.ˆÜ�w‰w�~‰~˜cÔ"ðÜ—‘Ð3Ô4ô �c˜3“ð D 1Ø—‘Ð3°lÑBÔC÷Dð Dð #øô ò Ùðú÷Dð Dús   £A# ÁA2Á#	A/Á.A/Á2A;c                 óˆ  — t        j                  d«      }|j                  |«      }|j                  |«      }|rL|rJ|j                  d«      ›d|j                  d«      ›�}|j                  d«      ›d|j                  d«      ›�}t	        j
                  d|›d|›�«       t        j                  j                  ||«      dkD  S )z# copied from ubuntu-drivers common z(.+)-([0-9]+)-(.+)r   ú-rg   z
Comparing z with r   )	r½   rË   rÌ   rj  r'   r+   ÚaptÚapt_pkgÚversion_compare)r   Úterm1Úterm2rÓ   Úmatch1Úmatch2s         r   Ú_is_greater_thanz"DistUpgradeQuirks._is_greater_thanÊ  s�   € ô —*‘*Ð1Ó2ˆØ—‘˜uÓ%ˆØ—‘˜uÓ%ˆÙ‘fØ%Ÿ|™|¨A�Ø%Ÿ|™|¨Aœð0ˆEà%Ÿ|™|¨A�Ø%Ÿ|™|¨Aœð0ˆEô 	�Š²±uÐ=Ô>Ü�{‰{×*Ñ*¨5°%Ó8¸1Ñ<Ð<r   c           	      óˆ  — |xr dxs d}t        j                  d«      }t        j                  d«      }d}d}|D �]  }d|j                  v sŒd|j                  vsŒ"|j                  s|j                  sŒ;|j                  |j                  «      }	|	sŒY|j                  j                  d   }
|	j                  d«      ›d	|	j                  d
«      ›�}| j                  ||«      sŒª|}|j                  |
«      }d|
v r,|r*d|›d	|	j                  d«      ›d	|j                  d«      ›�}Œíd|›d	|	j                  d«      ›�}�Œ |S )zb Get the linux headers or linux metapackage
            copied from ubuntu-drivers-common
        z-headersrº   zlinux-image-(.+)-([0-9]+)-(.+)z
linux-(.+)zlinux-imageÚextraÚSourcer   rŽ  rg   z-lts-Úlinuxé   )
r½   rË   rÍ   rB   rÎ   rÌ   r  ri  rj  r–  )r   r?   ÚheadersÚsuffixrÓ   Úsource_patternÚmetapackageru   rÒ   rÌ   ÚsourceÚcurrent_versionÚmatch_sources                r   Ú_get_linux_metapackagez(DistUpgradeQuirks._get_linux_metapackageÚ  s6  € ð Ò'˜ZÒ-¨2ˆÜ—*‘*Ð=Ó>ˆÜŸ™ LÓ1ˆàˆØˆØó #	;ˆCØ §¡Ò)¨g¸S¿X¹XÒ.EØ×%Ò%¨×);Ó);ØŸ™ c§h¡hÓ/�ò Ø Ÿ]™]×1Ñ1°(Ñ;�FØ16·±¸QµØ16·±¸Q´ð'A�Oð ×,Ñ,¨_Ø-4õ6à"1˜Ø'5×';Ñ';¸FÓ'C˜à" fÑ,²ò ,2Ø+0¯;©;°q­>Ø+7×+=Ñ+=¸aÔ+@ð+B™Køò ,2Ø+0¯;©;°q¬>ð+;šKðC#	;ðH Ðr   c                 ó  — | j                   j                  }| j                  |d«      }||vrt        j                  d|z  «       y||   j
                  s-t        j                  d|z  «       d}|j                  ||«       yy)zo Ensure the linux metapackage is installed for the newest_kernel
            installed. (LP: #1509305)
        Fz$linux metapackage (%s) not availableNz installing linux metapackage: %sz8linux metapackage may have been accidentally uninstalled)r   r?   r£  r'   r(   rB   r‡  )r   r?   Úlinux_metapackageÚreasons       r   rb   z,DistUpgradeQuirks._install_linux_metapackage
  s‹   € ð —‘×%Ñ%ˆØ ×7Ñ7¸¸uÓEÐð  EÑ)Ü�L‰LÐ?Ø*ñ+ô ,ààÐ&Ñ'×4Ò4Ü�L‰LÐ;Ø*ñ+ô ,àOˆFØ×ÑÐ0°&Õ9ð	 5r   c                 ó¬  — d}| j                   j                  }dD ]Ù  }|D ]Ò  \  }}t        j                  d|›d|›d�«       ||v sŒ'||   j                  sŒ7|rNt        j                  d|›d|›d�«       d	|z  }|j                  ||d
|¬«      st        j                  d|z  «       t        j                  d|›d|›d�«       d|z  }|j                  ||d
¬«      rŒ½t        j                  d|«       ŒÔ ŒÛ t        j                  j                  |«      }|D �]#  \  }}||v sŒ||   j                  sŒ|rÞ||vr²|D ��cg c]  \  }}||v sŒ||   j                  r|‘Œ }}}t        d«      }	t        d›d›ddj                  |«      ›�«      }
t        j                  |	«       |j                  «        | j                  j                  |	|
«       | j                   j                  «        n(|j                  ||   «       |j!                  ||   «       |j                  ||   «       |j#                  ||   «       �Œ& |j%                  «        yc c}}w )zÌ
        Ensure python is removed, before it can produce a conflict with any
        other package and the python-is-python2 package is installed instead,
        if python-minimal was installed.
        ))z
python-dbgzpython2-dbg)z
python-doczpython2-doc)zpython-minimalzpython-is-python2)z
python-devzpython-dev-is-python2)zlibpython-devN)zlibpython-stdlibN)zlibpython-dbgN)FTzchecking for z (auto_inst=rs  zinstalling z	 because z was installedz%s was installed on the systemF©Úauto_fixÚ	auto_instzfailed to install %sz	removing z is being installedz#%s is being installed on the system©r©  zfailed to remove %szuniverse component not enabledzYou have the package a   installed which is a python2 package. python2 has been deprecated in Ubuntu 20.04 LTS and is now available from the universe component of the Ubuntu archive. To ensure any existing third party code you have installed continues to work the release upgrade process would install zÎ for you. However, the universe component of the archive is not enabled on this system. For the upgrade process to proceed you should either enable the universe component in /etc/apt/sources.list or remove rœ   N)r   r?   r'   r(   rB   r‡  Úmark_remover�  ÚProblemResolverr�   r¢   Ú_stopAptResolverLogr   r®   r�   ÚclearÚprotectr§   Úresolve)r   Úreplacementsr?   rª  ÚoldÚnewr¦  ÚsolverÚold_instr°   r±   s              r   Ú_install_python_is_python2z,DistUpgradeQuirks._install_python_is_python2  sD  € ð1ˆð —‘×%Ñ%ˆð %ò 	AˆIØ(ò A‘��SÜ—’Ú!¢9ð.ô /à˜%’< E¨#¡J×$;Ó$;ÙÜŸšÚ&)ª3ð&0ô 1à!AÀCÑ!G˜Ø$×1Ñ1°#°vÈØ<Eð  2ô  Gä#ŸL™LÐ)?À#Ñ)EÔFÜ—L’LÚ"%¢sð",ô -àBÀSÑH�FØ ×,Ñ,¨S°&À5Ð,ÕIÜŸ™Ð%:¸CÕ@ñAð	Aô$ —‘×*Ñ*¨5Ó1ˆà$ó  	*‰HˆC�Ø�eŠ|  c¡
× 7Ó 7ÙØ %Ñ'Ø8D÷ $J©H¨C°ÈØ',òI-Ø16°s±×1HÒ1Hò %(ð $J˜ñ $Jä"#Ð$DÓ"E˜Ýò $'ª¨T¯Y©Y°xÔ-@ð!Bó "˜ô  Ÿ™ WÔ-ð ×1Ñ1Ô3ØŸ
™
×(Ñ(¨°#Ô6ØŸ™×-Ñ-Õ/àŸ™ U¨3¡ZÔ0ØŸ™ u¨S¡zÔ2Ø—‘˜U 3™ZÔ(Ø—‘˜e C™jÖ)ðA 	*ðD 	�‰Õùó=$Js   Ä?IÅIc                 ó  — | j                   j                  sqt        j                  j                  j                  d«      sGd}|dz  }t        j                  |«       t        j                  j                  j                  dd«       yyy)z] ensure that on a desktop install recommends are installed
            (LP: #759262)
        zApt::Install-Recommendsz%Apt::Install-Recommends was disabled,z! enabling it just for the upgradeÚ1N)	r   Ú
serverModer�  r�  r   Úfind_br'   rÄ   rh   )r   r±   s     r   Ú+ensure_recommends_are_installed_on_desktopsz=DistUpgradeQuirks.ensure_recommends_are_installed_on_desktopsg  sl   € ð �‰×)Ò)Ü—;‘;×%Ñ%×,Ñ,Ð-FÔGØ=�ØÐ:Ñ:�Ü—‘ Ô$Ü—‘×"Ñ"×&Ñ&Ð'@À#ÕFð	 Hð *r   c                 óà   — |j                  dd«      }t        |t        «      s|g}|D ]D  }|| j                  j                  vrŒ|r&| j                  j                  |   j
                  du rŒD y y)zˆ Helper function that checks if the given deb2snap entry
            has at least one metapkg which is installed on the system.
        ÚmetapkgNFT)r)   Ú
isinstancer×   r   r?   rB   )r   Údeb2snap_entryÚmetapkg_listr¾  s       r   Ú_is_deb2snap_metapkg_installedz0DistUpgradeQuirks._is_deb2snap_metapkg_installedr  sv   € ð &×)Ñ)¨)°TÓ:ˆÜ˜,¬Ô-Ø(˜>ˆLà#ò 	ˆGØ˜dŸo™o×3Ñ3Ñ3ØÙØ—O‘O×)Ñ)¨'Ñ2×?Ñ?À5ÑHØáð	ð r   c           	      ó¤  — ddl }i | _        d| j                  z  }d| j                  z  }i }i }	 t        j
                  j                  t        j
                  j                  t        «      «      }t        |dz   d«      }|j                  |«      }|j                  «        |d   D ]Z  }	|d   |	   }
| j                  |
«      sŒ|
j                  dd«      }|
j                  d|«      }|
j                  d	|«      }|||f||	<   Œ\ |d
   D ]G  }	|d
   |	   }|j                  dd«      }| j                  |«      sŒ/|j                  d|«      }||f||	<   ŒI 	 d}t#        j$                  ddgdt"        j&                  ¬«      j)                  «       }|rM|d   j+                  d«      dd D �cg c]  }|j+                  «       d   ‘Œ }}|D ]  }	|	|v s|	|v rŒd||f||	<   Œ | j,                  j/                  t1        d«      «       |j3                  «       D �]‹  \  }	\  }}}i }t#        j$                  dd|	gdt"        j&                  ¬«      j)                  «       }| j,                  j5                  «        t7        j8                  d|d   t6        j:                  «      rbt        j<                  d|	z  «       t7        j8                  d|z  |d   t6        j:                  «      st        j<                  d|	z  «       Œâd|d<   n�| j>                  j@                  }|r1||vs||   jB                  st        j<                  d|›d|	›d�«       �Œ1t7        j8                  d|d   «      }|st        j<                  d |	z  «       �Œfd!|d<   ||d<   |d   |d"<   ||d#<   || j                  |	<   �ŒŽ |j3                  «       D �]ã  \  }	\  }}i }t#        j$                  dd|	gdt"        j&                  ¬«      j)                  «       }| j,                  j5                  «        t7        j8                  d|d   t6        j:                  «      sŒ†t        j<                  d|	z  «       t7        j8                  d|z  |d   t6        j:                  «      st        j<                  d|	z  «       Œâd$|d<   t#        j$                  dd%|	gdt"        j&                  ¬«      j)                  «       }| j,                  j5                  «        |d   j+                  d«      D ]†  }|j+                  «       }tE        |«      d&k7  rŒ"|d   }|d'   }|jG                  |	d(z   «      sŒA|j+                  d(«      d   }|d)k7  sŒ[||vsŒ`t        j<                  d*|	›d+|›d,�«       d|d<   d-|d#<    n || j                  |	<   �Œæ | j                  S # t        $ r#}t        j                   d|z  «       Y d}~�Œtd}~ww xY wc c}w ).z» Helper function fetching all required info for the deb-to-snap
            migration: version strings for upgrade (from and to) and the list
            of snaps (with actions).
        r   Nzstable/ubuntu-%sz/deb2snap.jsonrx   ÚseededrC  Úfrom_channelÚ
to_channelÚunseededz%error reading deb2snap.json file (%s)rº   r  r×   T)r   r   rf   r   éÿÿÿÿzChecking for installed snapsr(   z^installed: zSnap %s is installedz^tracking:.*%sz+Snap %s is not tracking the release channelrA  r  zDeb package z) is not installed. Skipping snap package z installationzsnap-id:\s*(\w*)z'Could not parse snap-id for the %s snapr  r!  r"  r§   Úconnectionsé   rg   rg  rŽ  zSnap z is being used by z. Switching it to stable trackÚstable)$r-  r   r   r   rC   rD   ré   ÚabspathÚ__file__rŒ   ÚloadÚcloserÂ  r)   rë   r'   rÄ   ri   r   r   r   rk   r   r1  r�   r2  rÅ   r½   r¾   r¿   r+   r   r?   rB   Úlenr  )r   r-  rÅ  rÆ  Úseeded_snapsÚunseeded_snapsÚcurrent_pathÚd2s_fileÚd2sr  ÚseedrC  Ú	from_chanÚto_chanÚunseedrî   Ú	snap_listrn   Úsnaps_installedr=  Ú	snap_infor?   rÌ   ÚconnsÚconnÚ	conn_colsÚplugÚslotÚ	plug_snaps                                r   r0  z0DistUpgradeQuirks._prepare_snap_replacement_data…  s¾  € ó
 	ØˆŒØ)¨D×,>Ñ,>Ñ>ˆØ'¨$×*:Ñ*:Ñ:ˆ
ØˆØˆð	IÜŸ7™7Ÿ?™?¬2¯7©7¯?©?¼8Ó+DÓEˆLÜ˜LÐ+;Ñ;¸SÓAˆHØ—)‘)˜HÓ%ˆCØ�N‰NÔà˜H™ò ?�Ø˜8‘} TÑ*�Ø×:Ñ:¸4Ô@ØØ—h‘h˜u dÓ+�Ø ŸH™H ^°\ÓB�	ØŸ(™( <°Ó<�Ø&)¨9°gÐ%>�˜TÒ"ð?ð ˜J™ò 8�Ø˜Z™¨Ñ.�Ø—j‘j ¨Ó-�Ø×:Ñ:¸6ÔBØØ"ŸJ™J ~°|ÓD�	Ø(+¨YÐ'7�˜tÒ$ñ8ð ˆ	ä×$Ñ$ f¨fÐ%5Ø8<Ü,6¯O©Oô=ç=H¹[»]ð 	ñ ð ,5°Q©<×+=Ñ+=¸dÓ+CÀAÀbÐ+IöKØ#'ð  $Ÿz™z›|¨A›ð KˆOð Kð (ò J�Ø˜<Ñ'¨4°>Ñ+AØà*.°¸jÐ)I�L Ò&ð	Jð 	�
‰
×Ñ¤Ð"@Ó AÔBØ5A×5GÑ5GÓ5Ió !	0Ñ1ˆDÑ1�3˜ jØˆKä"×(Ñ(¨&°&¸$Ð)?Ø<@Ü0:·±ôAçALÁÃð ð �J‰J×$Ñ$Ô&Ü�y‰y˜¨)°A©,¼¿¹ÔEÜ—‘Ð4°tÑ;Ô<ä—y‘yÐ!2°\Ñ!AØ!*¨1¡¬r¯|©|ô=ä—M‘MÐ"OØ$(ñ#)ô *àØ)1�˜IÒ&ð Ÿ™×-Ñ-�Ù˜S¨Ñ-°U¸3±Z×5LÒ5LÜ—M’MÚDGÊð#Oô PáäŸ	™	Ð"5°yÀ±|ÓD�ÙÜ—M‘MÐ"KØ$(ñ#)ô *áØ)2�˜IÑ&Ø%(�˜EÑ"Ø).¨q©�˜IÑ&Ø%/ˆK˜	Ñ"Ø$/ˆD�O‰O˜DÓ!ðC!	0ðD *8×)=Ñ)=Ó)?ó *	4Ñ%ˆDÑ%�3˜ØˆKä"×(Ñ(¨&°&¸$Ð)?Ø<@Ü0:·±ôAçALÁÃð ð �J‰J×$Ñ$Ô&Ü�y‰y˜¨)°A©,¼¿¹ÕEÜ—‘Ð4°tÑ;Ô<ä—y‘yÐ!2°\Ñ!AØ!*¨1¡¬r¯|©|ô=ä—M‘MÐ"OØ$(ñ#)ô *àà)1�˜IÑ&ô #×(Ñ(¨&°-ÀÐ)FØ<@Ü0:·±ôAçALÁÃð ð —
‘
×(Ñ(Ô*à! !™HŸN™N¨4Ó0ò "�DØ $§
¡
£�IÜ˜9“~¨Ò*Ø Ø$ Q™<�DØ$ Q™<�Dà—‘ t¨c¡zÕ2Ø$(§J¡J¨s£O°AÑ$6˜	Ø$¨Ó+Ø$¨NÒ:Ü#ŸMšMâ-1²9ð+>ô ?ð 6>˜K¨	Ñ2Ø5=˜K¨	Ñ2Ù!ð!"ð$ )4�—‘ Ó%ðU*	4ðV �‰ÐøôC ò 	IÜ�O‰OÐCÀaÑG×HÒHûð	IüòKs   ¯D!V Æ$WÖ	W
Ö'W×W
c                 óš  — 	 |dz   }t        |dd¬«      5 }|j                  |«       d d d «       	 t        |dd¬«      5 }|j                  |«       d d d «       y # 1 sw Y   Œ3xY w# t        $ r"}t        j                  d||«       Y d }~y d }~ww xY w# 1 sw Y   y xY w# t        $ r"}t        j                  d|||«       Y d }~y d }~ww xY w)Nú.distUpgrader‡   rØ   r&  z0unable to write boot config backup to %s: %s; %sz-unable to write new boot config to %s: %s; %s)rŒ   rê   ÚIOErrorr'   r®   )r   Ú
old_configÚ
new_configÚboot_config_filenameÚfailure_actionÚboot_backup_filenamerÀ   Úexcs           r   Ú_replace_pi_boot_configz)DistUpgradeQuirks._replace_pi_boot_config
  sÔ   € ð	Ø#7¸.Ñ#HÐ ÜÐ*¨C¸'ÔBð $ÀaØ—‘˜
Ô#÷$ð	EÜÐ*¨C¸'ÔBð $ÀaØ—‘˜
Ô#÷$ð $÷$ð $ûäò 	Ü�M‰MÐLØ.°°^ôEäûð	ú÷
$ð $ûäò 	EÜ�M‰MÐIØ.°°^÷Eñ Eûð	Eúsa   ‚A% •A§A% °B ¾BÁB ÁA"ÁA% Á%	BÁ.BÂBÂBÂB ÂB Â	C
Â(CÃC
c                 ó¬  — d}	 t         j                  j                  |d«      }t        |dd¬«      5 }|j	                  «       }d d d «       dj                  d„ j                  d	¬
«      D «       «      }||k(  rt        j                  d|«       y | j                  ||||«       y # 1 sw Y   ŒbxY w# t
        $ r t        j                  d|«       Y y w xY w)NzfYou may need to replace the vc4-fkms-v3d overlay with vc4-kms-v3d in config.txt on your boot partitionú
config.txtrx   rØ   r&  ú+failed to open boot configuration in %s; %srº   c              3   óÄ   K  — | ]X  }|j                  d «      rd|z   |j                  d d«      z   n*|j                  d«      s|j                  «       dk(  rd|z   n|–— ŒZ y­w)zdtoverlay=vc4-fkms-v3dz0# changed by do-release-upgrade (LP: #1923673)
#údtoverlay=vc4-kms-v3dzgpu_mem=z	start_x=1z1# disabled by do-release-upgrade (LP: #1923673)
#N)r  r[  Úrstrip©rw   rn   s     r   ry   z:DistUpgradeQuirks._replace_fkms_overlay.<locals>.<genexpr>)  ss   è ø€ ò 
ð ð �‰Ð7Ô8ð @À$ÑFØ�L‰LÐ1Ð3JÓKòLð �‰˜zÔ*¨d¯k©k«m¸{Ò.Jð AÀ4ÒGàó	ñ
ùs   ‚AA T)Úkeependsz3no fkms overlay or camera firmware line found in %s)rC   rD   r¢   rŒ   r¼   ÚFileNotFoundErrorr'   r®   Ú
splitlinesrÄ   rì  )r   Úboot_dirré  rè  rÀ   Úboot_configrç  s          r   rL   z'DistUpgradeQuirks._replace_fkms_overlay  sâ   € ð?ð 	ð	Ü#%§7¡7§<¡<°¸,Ó#GÐ ÜÐ*¨C¸'ÔBð 'ÀaØŸf™f›h�÷'ð —W‘Wñ 
ð $×.Ñ.¸Ð.Ó=ô
ó 
ˆ
ð  ˜Ò$Ü�O‰Oð $Ø%9ô;àØ×$Ñ$Ø˜Ð%9¸>õ	K÷7'ð 'ûä ò 	Ü�M‰MÐGØ.°ô@áð	ús(   „.B0 ²B$ÁB0 Â$B-Â)B0 Â0 CÃCc                 ó  ‡
‡— d}g d¢Š
	 t         j                  j                  |d«      }t        |dd¬«      5 }|j	                  «       }d d d «       d„ Šˆ
ˆfd	„}j                  «       D �cg c]  }|j                  «       ‘Œ }} ||«      }d
j                  d„ |D «       «      }	|	|k(  rt        j                  d|«       y | j                  ||	||«       y # 1 sw Y   ŒŽxY w# t
        $ r t        j                  d|«       Y y w xY wc c}w )NzbYou may need to add dtoverlay=vc4-kms-v3d to an [all] section in config.txt on your boot partition)z,# added by do-release-upgrade (LP: #2065051)rñ  zdisable_fw_kms_setup=1rº   z[pi3+]údtoverlay=vc4-kms-v3d,cma-128rº   z[pi02]rú  rº   ú[all]rî  rx   rØ   r&  rï  c                 ó
  — d}d}t        | «      D ]p  \  }}|j                  «       }|rT|}|j                  d«      r|c S |j                  d«      r|j                  d«      r|dk(  }ŒW|j                  d«      sŒid}Œl|dk(  }Œr |S )	NTr   rñ  ú[ú]rû  zinclude F)Ú	enumeraterò  r  rQ  )rS  Úin_allÚlastÚindexrn   s        r   Úfind_insertion_pointz@DistUpgradeQuirks._add_kms_overlay.<locals>.find_insertion_pointZ  sŽ   € ð ˆFØˆDÜ(¨Ó/ò -‘��tØ—{‘{“}�ÙØ �Dà—‘Ð'>Ô?Ø#šØŸ™¨Ô-°$·-±-ÀÔ2DØ!%¨¡™ØŸ™¨Õ4ð "'™à! W™_‘Fð-ð  ˆKr   c                 óp   •—  ‰| «      }	 | |   j                  d«      r| S 	 ‰| || | S # t        $ r Y Œw xY w)Nrñ  )r  Ú
IndexError)rS  Úinsert_pointÚadded_linesr  s     €€r   Úadd_kms_overlayz;DistUpgradeQuirks._add_kms_overlay.<locals>.add_kms_overlayr  sX   ø€ Ù/°Ó6ˆLðØ˜Ñ&×1Ñ1Ð2IÔJØ �Lð Kð
 0;ˆE�,˜|Ð,ØˆLøô	 ò áðús   ‹) ©	5´5rº   c              3   ó&   K  — | ]	  }|d z   –— Œ y­w©rf   N© ró  s     r   ry   z5DistUpgradeQuirks._add_kms_overlay.<locals>.<genexpr>  ó   è ø€ Ò;¨T˜T D�[Ñ;ùó   ‚z)no addition of KMS overlay required in %s)rC   rD   r¢   rŒ   r¼   rõ  r'   r®   rö  rò  rÄ   rì  )r   r÷  ré  rè  rÀ   rø  r  rn   rS  rç  r  r  s             @@r   rM   z"DistUpgradeQuirks._add_kms_overlay@  s  ù€ ð3ð 	ò
ˆð	Ü#%§7¡7§<¡<°¸,Ó#GÐ ÜÐ*¨C¸'ÔBð 'ÀaØŸf™f›h�÷'ò	õ0		ð ,7×+AÑ+AÓ+CÖD 4�—‘•ÐDˆÐDÙ Ó&ˆØ—W‘WÑ;°UÔ;Ó;ˆ
à˜Ò$Ü�O‰OÐGØ0ô2àØ×$Ñ$Ø˜Ð%9¸>õ	K÷e'ð 'ûä ò 	Ü�M‰MÐGØ.°ô@áð	üòP Es.   Š.C" ¸CÁ	C" Á,DÃCÃC" Ã" DÄDc                 óh  ‡‡‡‡‡‡— dŠdŠd}|j                  ‰¬«      }dŠdŠdŠ	 t        j                  j                  ‰d«      }t	        |d	d
¬«      5 }|j                  «       }d d d «       ˆˆˆˆfd„}ˆˆfd„}j                  «       D �cg c]  }|j                  «       ‘Œ }	} | ||	«      «      }	dj                  d„ |	D «       «      }
|
|k(  rt        j                  d|«       y | j                  ||
||«       y # 1 sw Y   Œ™xY w# t        $ r t        j                  d|«       Y y w xY wc c}w )Nzkernel=vmlinuzz!initramfs initrd.img followkernelz”You may need to replace u_boot_* with vmlinuz, and add {initramfs_line!r} to config.txt on your boot partition; see LP: #1936401 for further details)Úinitramfs_linez0# commented by do-release-upgrade (LP: #1936401)z,# added by do-release-upgrade (LP: #1936401)z5# merged from {} by do-release-upgrade (LP: #1936401)rî  rx   rØ   r&  rï  c                 óV  •— g }dx}}| D ]Ò  }|dk(  rJ|j                  |«       |rŒ|j                  ‰«       |j                  ‰«       |j                  ‰«       d}ŒR|j                  d«      r&|j                  ‰«       |j                  d|z   «       Œ‰|j                  d«      r(d}|j                  ‰«       |j                  d|z   «       ŒÂ|j                  |«       ŒÔ |rH|sD|j                  ‰«       |j                  d«       |j                  ‰«       |j                  ‰«       |S | S )NFrû  Tzdevice_tree_address=rM  zkernel=uboot_rpi_)r¤   r  )	rS  ÚresultÚremoved_ubootÚadded_kernelrn   Úadded_prefixÚchange_prefixr  Úkernel_lines	        €€€€r   Úreplace_ubootz=DistUpgradeQuirks._remove_uboot_on_rpi.<locals>.replace_uboot�  s  ø€ ØˆFØ+0Ð0ˆM˜LØò (�Ø˜7’?ð —M‘M $Ô'Ú'ØŸ™ lÔ3ØŸ™ kÔ2ØŸ™ nÔ5Ø'+™Ø—_‘_Ð%;Ô<ð —M‘M -Ô0Ø—M‘M #¨¡*Õ-Ø—_‘_Ð%8Ô9ð %)�MØ—M‘M -Ô0Ø—M‘M #¨¡*Õ-à—M‘M $Õ'ð1(ñ> Ù#Ø—M‘M ,Ô/Ø—M‘M 'Ô*Ø—M‘M +Ô.Ø—M‘M .Ô1Ø�à�r   c                 óŠ  •— g }d}d}| D ]÷  }|j                  d«      r|rŒd}|dv rÊd}|j                  d¬«      d   }|j                  ‰
j                  |«      «       t        j
                  j                  ‰	|«      }d}t        |dd¬	«      5 }|D ]7  }|j                  d«      r|rŒd}|j                  |j                  «       «       Œ9 	 d d d «       |d
z   }	 t	        j                  ||«       Œç|j                  |«       Œù |r|S | S # 1 sw Y   Œ?xY w# t        $ r#}t        j                  d|||«       Y d }~�Œ3d }~ww xY w)NTFrM  )zinclude syscfg.txtzinclude usercfg.txtr   )Úmaxsplitrx   rØ   r&  rä  z7failed to move included configuration from %s to %s; %s)r  rk   r¤   rÜ   rC   rD   r¢   rŒ   rò  Úrenamerå  r'   r®   )rS  r  Úskip_commentsÚfound_includesrn   Úincluded_filenamerÀ   Útarget_filenamerë  r÷  Úmerge_prefixs            €€r   Úmerge_includesz>DistUpgradeQuirks._remove_uboot_on_rpi.<locals>.merge_includesÉ  s^  ø€ ØˆFØ ˆMØ"ˆNØò  (�ð —?‘? 3Ô'©MØØ %�ØÐHÑHð
 &*�NØ(,¯
©
¸A¨
Ó(>¸qÑ(AÐ%Ø—M‘M ,×"5Ñ"5Ð6GÓ"HÔIÜ(*¯©¯©°XØ5Fó)HÐ%à$(�MÜÐ/°¸wÔGð 9È1Ø$%ò 9˜DØ#Ÿ™¨sÔ3¹Ø (Ø,1˜MØ"ŸM™M¨$¯+©+«-Õ8ñ	9÷9ð '8¸.Ñ&H�Oð<ÜŸ	™	Ð"3°_ÕEð —M‘M $Õ'ðA (ñF Ø�à�÷)9ð 9ûô #ò <ÜŸ™ð ':Ø;LØ&5°s÷<ò <ûð<ús$   Â=D
ÃDÄ
D	Ä	EÄD=Ä=Erº   c              3   ó&   K  — | ]	  }|d z   –— Œ y­wr
  r  ró  s     r   ry   z9DistUpgradeQuirks._remove_uboot_on_rpi.<locals>.<genexpr>÷  r  r  z!no u-boot removal performed in %s)rÜ   rC   rD   r¢   rŒ   r¼   rõ  r'   r®   rö  rò  rÄ   rì  )r   r÷  ré  rè  rÀ   rø  r  r   rn   rS  rç  r  r  r  r  r  s    `         @@@@@r   rN   z&DistUpgradeQuirks._remove_uboot_on_rpiˆ  s:  ý€ Ø&ˆØ<ˆð>ð 	ð (×.Ñ.¸nÐ.ÓMˆØJˆØEˆØNˆð	Ü#%§7¡7§<¡<°¸,Ó#GÐ ÜÐ*¨C¸'ÔBð 'ÀaØŸf™f›h�÷'÷*	õX*	ðX ,7×+AÑ+AÓ+CÖD 4�—‘•ÐDˆÐDÙ™n¨UÓ3Ó4ˆØ—W‘WÑ;°UÔ;Ó;ˆ
à˜Ò$Ü�O‰OÐ?Ø0ô2àØ×$Ñ$Ø˜Ð%9¸>õ	K÷O'ð 'ûä ò 	Ü�M‰MÐGØ.°ô@áð	üòz Es/   ¦.D	 ÁC=Á%D	 ÂD/Ã=DÄD	 Ä	 D,Ä+D,c                 ó&	  — d}| j                   ryt        j                  dd«      dv ryddhj                  t        j                  «      st        j                  d«       y	 t        t        j                  dt        j                  d«      «      «      }t        j                  |«      }d
}t        j                  dd«      j                  d«      }d|v sd|v rd}nd|v rd}t        t        g d¢«      t        |«      z  «      }t        j                  ddd|j                   › d�dddddd|› dgt        j"                  d¬«      }|j$                  j'                  d «      j)                  d!«      \  }}	}
|xs d"}	 t        |
«       t        j                  d$|› d!|
› d%|› d!|
› d&�	«       t        j                  ddd|j                   › d�dddddd'|› dd(|› d!|
› d(�g«      }|j*                  d)k7  rt        j                  d*|› d!|
› �«       yd+| _         t        j,                  j/                  |j0                  d,«      }t        j2                  t        j,                  j5                  |«      d+¬-«       t7        j8                  |«      j;                  d.¬/«       t        j<                  ||j>                  |j@                  «       |rod0}t        j2                  t        j,                  j5                  |«      d+¬-«       d1}tC        |d2«      5 }|jE                  d3|› d4|› d5|› d!|
› d6|› d7�«       ddd«       yd8}t        j2                  t        j,                  j5                  |«      d+¬-«       tC        |d2«      5 }|jE                  d9|› d:|› d!|
› d;�«       ddd«       t        j                  d<dd|j                   › d�d=g«       t        j                  d<dd|j                   › d�d>t        j,                  jG                  |«      g«      }|j*                  d)k7  r7t        j                  d?t        j,                  jG                  |«      › d@�«       yy# t        $ r t        j                  d	«       Y yw xY w# t        $ r d#}
Y �Œõw xY w# 1 sw Y   yxY w# 1 sw Y   ŒþxY w)Az´ Due to changes to the Ubuntu font we enable a generic font
            (in practice DejaVu or Noto) during the upgrade.
            See https://launchpad.net/bugs/2034986
        ÚSansNÚXDG_SESSION_TYPErº   )rº   ÚttyÚSUDO_UIDÚ
PKEXEC_UIDzFCannot determine how root privileges were gained, will not change fontz3Cannot determine non-root UID, will not change fontzorg.gnome.desktop.interfaceÚXDG_CURRENT_DESKTOPrg  ÚMATEÚUKUIzorg.mate.interfaceú
X-Cinnamonzorg.cinnamon.desktop.interface)ÚBudgieÚLXQtr)  r*  r+  ÚXFCEzsystemd-runz--userz-Mz@.hostz--waitz--piperü   z--z/usr/bin/gsettingsr)   z	font-namerØ   )r   r'  z'
rÙ   ÚUbuntuÚ11zSetting generic font z& during the upgrade. Original font is r­   rh   ú"r   zFailed to change font to Tz!.config/upgrade-need-font-restorerå   i¶  )Úmodez//etc/xdg/autostart/upgrade-restore-font.desktopz'$HOME/.config/upgrade-need-font-restorer‡   zˆ[Desktop Entry]
Name=Restore font after upgrade
Comment=Auto-generated by ubuntu-release-upgrader
Type=Application
Exec=sh -c 'if [ -e "z" ]; then gsettings set z font-name "z	";rm -f "z"; fi'
NoDisplay=true
z2/usr/lib/systemd/user/upgrade-restore-font.servicezù# Auto-generated by ubuntu-release-upgrader
[Unit]
Description=Restore font after upgrade
After=graphical-session.target dconf.service
ConditionPathExists=%h/.config/upgrade-need-font-restore

[Service]
Type=oneshot
ExecStart=/usr/bin/gsettings set z font-name 'zm'
ExecStart=/usr/bin/rm -f %h/.config/upgrade-need-font-restore

[Install]
WantedBy=graphical-session.target
Ú	systemctlzdaemon-reloadÚenablezFailed to enable z%. Font will not be restored on reboot)$r   rC   Úgetenvr–   rŠ   r'   r+   r:  ÚpwdÚgetpwuidr  rk   Úboolrh   ri   r1   Úpw_namer   r   r   Ú
rpartitionrE  rD   r¢   Úpw_dirrè   ré   ÚpathlibÚPathÚtouchÚchownÚpw_uidÚpw_gidrŒ   rê   Úbasename)r   Ú	temp_fontÚuidÚpwuidÚschemaÚdesktopsÚuse_autostartrx   Úfontr�   r,  Úneed_font_restore_fileÚautostart_fileÚflagrÀ   Ú	unit_files                   r   rZ   z#DistUpgradeQuirks._set_generic_font   s‰  € ð
 ˆ	à× Ò Øä�9‰9Ð'¨Ó,°Ñ;ð à˜LÐ)×6Ñ6´r·z±zÔBÜ�M‰Mð"ôð ð	Ü”b—i‘i 
¬B¯I©I°lÓ,CÓDÓEˆCÜ—L‘L Ó%ˆEð /ˆä—9‘9Ð2°BÓ7×=Ñ=¸cÓBˆð �XÑ ¨8Ñ!3Ø)‰FØ˜XÑ%Ø5ˆFô ÜÒHÓIÜ�(‹mñó
ˆô
 �N‰NØ˜H d¨u¯}©}¨o¸VÐ,DØ�x  tØ! 5Øˆx˜+ð'ô —?‘?Øô
ˆð Ÿ(™(Ÿ.™.¨Ó0×;Ñ;¸CÓ@‰ˆˆq�$ØÒ�xˆð	Ü�ŒIô 	�‰Ð-¨i¨[¸¸$¸ð @3Ø37°&¸¸$¸¸qðBô 	Cô �N‰NØ˜8 T¨e¯m©m¨_¸FÐ+CØ�h  dØ  %¨F¨8Ø˜1˜Y˜K q¨¨¨aÐ0ð	
ó ˆð �<‰<˜1ÒÜ�M‰MÐ5°i°[ÀÀ$ÀÐHÔIØà $ˆÔô "$§¡§¡Ø�L‰LÐ=ó"
Ðô 	�‰”B—G‘G—O‘OÐ$:Ó;ÀdÕKÜ�‰Ð+Ó,×2Ñ2¸Ð2Ô>Ü
�‰Ð'¨¯©°u·|±|ÔDáØNˆNÜ�K‰KœŸ™Ÿ™¨Ó7À$ÕGØ<ˆDÜ�n cÓ*ð 
¨aØ—‘ð-ð .2¨FÐ2JØ�h˜l¨4¨&°°$°ð 8Ø"˜Vð $'ð'ô	÷
ð ð Iˆ	Ü
�‰”B—G‘G—O‘O IÓ.¸Õ>ä�)˜SÓ!ð 	 QØ�G‰Gð4ð �(˜-¨ v¨Q¨t¨fð 56ð6ô÷	ô& 	�‰ØØ�d˜uŸ}™}˜o¨VÐ4Øð
ô 	ô
 �N‰NØØ�d˜uŸ}™}˜o¨VÐ4Ø”b—g‘g×&Ñ& yÓ1ð
ó ˆð
 �<‰<˜1ÒÜ�M‰MÐ-¬b¯g©g×.>Ñ.>¸yÓ.IÐ-Jð K@ð @õ Að øôm ò 	Ü�M‰MØEôñ ð		ûôH ò 	Ø‹Dð	ú÷>
ð ú÷	ð 	ús=   Á!AQ Å7Q) Ì"Q;Í.RÑQ&Ñ%Q&Ñ)Q8Ñ7Q8Ñ;RÒRc                 ó6  — | j                   j                  j                  }	 |d   j                  sy|d   j                  }|D ��cg c]  \  }}}|j
                  j                  r|‘Œ  }}}t        |«      sŽt        j                  d«       | j                   j                  d   j                  d¬«       t        j                  | j                   j                  «      j                  | j                   j                  d   «       yyc c}}w # t        $ r Y yw xY w)z}
        Prevent postfix from being unnecessarily installed, and leading to a
        debconf prompt (LP: #2060578).
        zgpg-wks-serverNzmail-transport-agentzENo mail-transport-agent installed, marking gpg-wks-server for removalFr«  )r   r?   Ú_cacheÚcurrent_verÚprovides_listÚ
parent_pkgr;  Úanyr'   r(   Úmark_deleter�  r­  r°  )r   r?   Úprovides_mtar�   ÚverÚinstalled_mtas         r   r]   z.DistUpgradeQuirks._maybe_remove_gpg_wks_server’  s  € ð —‘×%Ñ%×,Ñ,ˆð	ØÐ)Ñ*×6Ò6àà Ð!7Ñ8×FÑFˆLà%1÷Ù!˜˜1˜cØ—>‘>×-Ò-ò ðˆMñ ô �=Ô!Ü�L‰Lð5ôð
 �O‰O×!Ñ!Ð"2Ñ3×?Ñ?ÈÐ?ÔOÜ×Ñ §¡× 5Ñ 5Ó6×>Ñ>Ø—‘×%Ñ%Ð&6Ñ7õð "ùóøô ò 	áð	ús(   ¢D ²D Á#DÁ)D ÄD Ä	DÄDc                 ó¦  — | j                   dk7  ryd| j                  j                  v �r#| j                  j                  d   j                  rÿt	        j
                  d«       t        j                  «       }|j                  d«      D �ci c]  }|j                  |“Œ }}|j                  | j                  j                  «      }|�8|j                  j                  d«      }t        d|j                  › d|› d	�«      }nd
}| j                   j                  t        d«      t        d«      |z   «       | j                  j#                  «        yyyc c}w )zÕ
        Test and fail if running armhf on a Raspberry Pi. Starting with Ubuntu
        24.04, armhf is not well supported on Raspberry Pi. Hence, prevent
        upgrades on such platforms. LP: #2060220.
        ÚarmhfNzlinux-image-raspiz%Detected Raspberry Pi kernel on armhfr{   z%B %YzUpdates for Ubuntu r¬   r­   rº   z.Sorry, cannot upgrade this system to 24.04 LTSzWThe Raspberry Pi kernel for Ubuntu 24.04 LTS does not support the armhf architecture.

)r   r   r?   rB   r'   r®   r~   r   r‚   rs   r)   rt   ÚeolÚstrftimer�   ru   r   r�   )r   rƒ   rx   Úreleasesr.   r¯   Úupdates_end_msgs          r   r=   z/DistUpgradeQuirks._test_and_fail_on_armhf_raspiµ  sL  € ð �9‰9˜ÒØð   4§?¡?×#8Ñ#8Ò8Ø�O‰O×!Ñ!Ð"5Ñ6×CÒCä�M‰MÐAÔBä×-Ñ-Ó/ˆBð Ÿ™ HÓ-öàð —‘˜!‘ðˆHð ð $Ÿ<™<¨¯©×(@Ñ(@ÓAˆLàÐ'Ø*×.Ñ.×7Ñ7¸Ó@�Ü"#Ø)¨,×*>Ñ*>Ð)?ð @&Ø&1 ]°!ð5ó#‘ð #%�à�J‰J×ÑÜØDóô ðCóð $ñ	$ô		ð �O‰O×!Ñ!Õ#ðA Dð 9ùòs   Â	Ec                 ó&  — | j                   j                  D �]ì  }|j                  sŒ|j                  r|j                  j                  rŒ4t        j                  d|j                  › �«       |j                  j                  D �cg c]  }|j                  |j                  f‘Œ }}|j                  j                  D ��cg c]  \  }}}|‘Œ
 }}}|D �]  }d|f|vrŒd|f|vrd|f|vrŒt        j                  | j                   j                  |j                  «      }|j                  €ŒY|j                  j                   |k7  rŒst        j                  d|j                  › d|j                  › �«       |j"                   }|j%                  dd|¬	«       |j'                  d¬
«       t        j(                  | j                   j                  «      j+                  |«        �ŒÊ t        j                  d|j                  › �«       �Œï yc c}w c c}}w )z
        LP: #2061175
        zSearching for replacement for ÚReplacesÚBreaksÚ	ConflictsNzFound replacement z for F)r©  rª  Ú	from_userr«  z!Failed to find a replacement for )r   r?   rB   r  Údownloadabler'   r+   rÍ   Ú_pkgÚrev_depends_listÚdep_type_untranslatedÚ
parent_verrQ  r�  ÚPackagerR  Ú_candÚis_auto_installedr‡  rT  r­  r°  )	r   ÚpackageÚdepÚreverse_depends_listr�   rV  rQ  Úreplacementrb  s	            r   r^   z3DistUpgradeQuirks._install_t64_replacement_packagesâ  sÿ  € ð —‘×,Ñ,ó ;	ˆGØ×'Ò'Øà× Ò  W×%6Ñ%6×%CÒ%CØô
 �M‰MÐ:¸7¿<¹<¸.ÐIÔJð #Ÿ<™<×8Ñ8ö$àð ×*Ñ*¨C¯N©NÒ;ð$Ð ð $ð
 3:·,±,×2LÑ2L×M¡Y Q¨¨3šSÐMˆMÑMà$ó (�Ø Ð$Ð,@Ñ@Øð ˜s�OÐ+?Ñ?Ø  #Ð&Ð.BÑBàä!Ÿk™kØ—O‘O×)Ñ)Ø—N‘Nó�ð
 ×(Ñ(Ð0Øà×(Ñ(×.Ñ.°#Ò5Øä—‘Ø(¨×)9Ñ)9Ð(:ð ;Ø"Ÿ<™<˜.ð*ôð !(× 9Ñ 9Ð9�	Ø×(Ñ(°%À5Ø3<ð )ô >à×#Ñ#¨UÐ#Ô3Ü×#Ñ# D§O¡O×$9Ñ$9Ó:×BÑBÀ7ÔKò ðE(ôL —‘Ø7¸¿¹°~ÐFöñs;	ùò$ùó
 Ns   ÂHÂ?Hc                 ó  — | j                   j                  dk7  ry	 | j                   j                  d   }|j                  syd}dD ]W  }	 | j                   j                  |   }|j                  sŒ*t        j                  d|› d�«       |j                  dd¬«       d	}ŒY |rK|j                  d¬
«       t        j                  | j                   j                  «      j                  |«       yy# t        $ r Y yw xY w# t        $ r Y ŒÂw xY w)z
        LP: #2061891
        ÚjammyNÚufwF)znetfilter-persistentziptables-persistentzKeeping z, and removing ufw as a result.r¨  Tr«  )r   rt   r?   r;  rB   r'   r(   r‡  rT  r�  r­  r°  )r   rq  Ú
remove_ufwrÍ   rÒ   s        r   r_   z$DistUpgradeQuirks._handle_ufw_breaks#  s  € ð �?‰?×#Ñ# wÒ.Øð	Ø—/‘/×'Ñ'¨Ñ.ˆCð ×ÒØàˆ
ØCò 	"ˆDðØ—o‘o×+Ñ+¨DÑ1�ð ×ÓÜ—‘Ø˜t˜fÐ$CÐDôð × Ñ ¨%¸5Ð ÔAØ!‘
ð	"ñ Ø�O‰O UˆOÔ+Ü×Ñ §¡× 5Ñ 5Ó6×>Ñ>¸sÕCð øô+ ò 	Ùð	ûô ò Ùðús#   œC. Á
C=Ã.	C:Ã9C:Ã=	D	ÄD	c                 ó’  — 	 t        j                  ddg«      }|j                  «       D �cg c]#  }|j                  «       j	                  «       d   ‘Œ% }}d|v rÛd| j                  j                  v rÂ| j                  j                  d   j                  ržt        j                  d«       t        j                  «       }|j                  | j                  j                  «      xs d}| j                  j!                  t#        d	|› �«      t#        d
«      «       | j                  j%                  «        yyyyc c}w # t
        $ r Y yw xY w)z
        LP: #2065229
        r  r×   r   Nz	pc-kernelzubuntu-desktop-minimalzDetected TPM FDE systemznext releasez%Sorry, cannot upgrade this system to z�Upgrades for desktop systems running TPM FDE are not currently supported. Please see https://launchpad.net/bugs/2065229 for more information.)ri   Úcheck_outputrö  rÛ   rk   rõ  r   r?   rB   r'   r+   r~   r   ru   r}   r   r®   r�   r�   )r   rÚ  rT  Úsnapsrƒ   ru   s         r   r>   z+DistUpgradeQuirks._test_and_fail_on_tpm_fdeG  s&  € ð	Ü"×/Ñ/°¸Ð0@ÓAˆIØ4=×4HÑ4HÓ4JÖK¨q�Q—X‘X“Z×%Ñ%Ó'¨Ó*ÐKˆEÐKð ˜5Ñ Ø$¨¯©×(=Ñ(=Ñ=Ø�O‰O×!Ñ!Ð":Ñ;×HÒHä�M‰MÐ3Ô4ä×-Ñ-Ó/ˆBØ—j‘j §¡×!7Ñ!7Ó8ÒJ¸NˆGà�J‰J×ÑÜØ;¸G¸9ÐEóô ð,óô	ð �O‰O×!Ñ!Õ#ð' Ið >ð !ùò LøÜ ò 	áð	ús"   ‚)D: «(D5ÁD: Ä5D: Ä:	EÅE)z	./patchesrr   )rª   )z/boot/firmware)@Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r1   r5   rI   rO   rR   r[   r`   rc   ro   r9   r”   r˜   r¨   r:   rµ   r;   r<   rÇ   r@   rA   r3   rQ   r´   ró   r÷   rY   rV   rW   rX   r  rU   rF   rG   rK   rJ  r    rT   r¡   rh  rz  rˆ  rŒ  r–  r£  rb   r·  r¼  rÂ  r0  rì  rL   rM   rN   rZ   r]   r=   r^   r_   r>   r  r   r   r	   r	   (   s\  „ ñò&ò&+ò\'ò2ò:,ò(*ò!ò"ò*òò3ò$(òB(ò0'CòR$ò((ò$(ò,(ò:'ò,-(ò^0
òd;ò";òòò>òGòBòLòFò	òOò>$ò@&*òP!LòF$ò(ó-<ó^ò>ò@ò4:ó"	Dò=ò .ò`:ò&HòT	Gòò&CòJEó"#KóJFKóPvKòpPAòd!òF+$òZ?òB"DóH!$r   r	   )r�  r  r~   r  r'   rC   r6  r½   r\  ri   r<  r   r   Úutilsr   ÚDistUpgradeGettextr   r�   r{   r	   r  r   r   ú<module>r|     s?   ðó, Û Û Û Û Û 	Û 
Û 	Û Û Û ß "å å ,ô@$˜õ @$r   