HcfddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z mZmZmZmZmZmZddlZddlmZddlmZmZmZmZmZmZmZddlm Z ddl!m"Z"dZ#d Z$d Z%d Z&d Z'd Z(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4ejjjme dejjjme dgejjjme dejjjme dejjjme dejjjme dgd Z7gd!Z8ejrZ:ejvejxe=Z>ej~Gd"d#ejZAed$d%eBfd&eBfd'eBfgZCd(ZDeDd)eBd*eBfd+ZEd,ZFd-eBd.eeBfd/ZG dqd0eeBd1eeBd2ee eBeBfd.eBfd3ZHe d4 dqd1eeBd2ee eBeBfd.eBfd5ZIGd6d7ZJd8ZKd9ZLd:eBd.eeBfd;ZM drd:eBdZPejejejfe8d?eBfd@ZT dqdAeeBdBeeeBd2ee eBeBfd.eBfdCZUdDeBd.eejfdEZW dsdFejdGeeBd.eejfdHZYdIeeBdJeBdKeNdLeBd.eBf dMZZ drdIeeBdJeBdKeNdLeBdNeBdOeNd.eBfdPZ[dQeBdLeBdReBdIeeBdNeBd.df dSZ\dTZ]dUZ^ dsdQeBdLeBdNeeBd.dfdVZ_dWZ`dXZadYZbdZZcd[eBd.eNfd\Zdd.eeCfd]Zed.eeBfd^ZfddeAjfd_eeBd`eeBdaeeAd.dfdbZhd.eeifdcZjd.eejfddZkdeZldtdfZmdgeeBdheBfdiZndgeeBdheBfdjZodgeeBfdkZpdlZqdmZrdneeBd.e eBeeBeeBfffdoZsd.eBfdpZty)uN) lru_cachewraps)DictIterableList NamedTupleOptionalSetUnion)AcquireProgress) event_logger exceptionsgpgmessagessecret_managersystemutil)ESM_APT_ROOTDIR)status_cache_filegN@z # ubuntu-pro-clientzDir::Etc::netrc/zDir::Etc::netrcparts/zDir::State::lists/a/* * Autogenerated by ubuntu-pro-client * Do not edit this file directly * * To change what ubuntu-pro-client sets, use the `pro config set` * or the `pro config unset` commands to set/unset either: * global_apt_http_proxy and global_apt_https_proxy * for a global apt proxy * or * ua_apt_http_proxy and ua_apt_https_proxy * for an apt proxy that only applies to Ubuntu Pro related repos. */ z$Acquire::http::Proxy "{proxy_url}"; z%Acquire::https::Proxy "{proxy_url}"; z4Acquire::http::Proxy::esm.ubuntu.com "{proxy_url}"; z5Acquire::https::Proxy::esm.ubuntu.com "{proxy_url}"; z/etc/apt/trusted.gpg.d/z/usr/share/keyringsz/usr/lib/apt/methods/httpsz /usr/sbin/update-ca-certificatesz//etc/apt/apt.conf.d/90ubuntu-advantage-aptproxyz*/var/lib/apt/periodic/update-success-stamp)xenialbionicfocaljammymanticz# Written by ubuntu-pro-client Types: deb{deb_src} URIs: {url} Suites: {suites} Components: main Signed-By: {keyrings_dir}/{keyring_file} zetc/apt/sources.listzvar/lib/dpkg/statuszetc/apt/apt.conf.dzetc/apt/preferences.dzvar/cache/apt/archives/partialzvar/lib/apt/lists/partial)filesfolders)g?g@g$@c(eZdZeZeZy) AptProxyScopeN)__name__ __module__ __qualname__objectGLOBALUACLIENT./usr/lib/python3/dist-packages/uaclient/apt.pyrrbs XFxHr&rInstalledAptPackagenameversionarchc.tfd}|S)z*Decorator ensuring apt_pkg is initialized.ctjjddk(rtj|i|S)NDir)apt_pkgconfiggetinit)argskwargsfs r'new_fz"ensure_apt_pkg_init..new_fps5 >>  e $ * LLN$!&!!r&)r)r6r7s` r'ensure_apt_pkg_initr8ms" 1X"" Lr&abc.tj||SN)r0version_compare)r9r:s r'r=r={s  " "1a ((r&c J|jd\}}tjjdsy t j 5}t jdddj||||tjj|dgttdddy#1swYyxYw#tj$r}|jdk(r{t|j j#}t%j&d |rtj(| t%j&d |rtj*| tj,t| d}~wt.j0$rtj2t| wxYw)aValidate apt credentials for a PPA. @param repo_url: private-ppa url path @param username: PPA login username. @param password: PPA login password or resource token. @raises: UbuntuProError for invalid credentials, timeout or unexpected errors. ://z/usr/lib/apt/apt-helperNz download-filez{}://{}:{}@{}/pool/zapt-helper-output)timeout retry_sleepsdz401\s+unauthorized|httperror401)repozconnection timed outdetail)secondsrC)splitospathexiststempfileTemporaryDirectoryrsubpformatjoinAPT_HELPER_TIMEOUT APT_RETRIESrProcessExecutionError exit_codestrstderrlowerresearchAPTInvalidCredentials APTTimeoutAPTUnexpectedError subprocessTimeoutExpiredAPTCommandTimeout)repo_urlusernamepasswordprotocol repo_pathtmpderUs r'assert_valid_apt_credentialsrfsR#../Hi 77>>3 4  ( ( * d KK-#)00 (HiGGLL':; +(      + +; ;;# ]((*Fyy;VD 66HEE2F; ++::++3q6::  $ $ **&Y   s7B4 AB(B4(B1-B41B44F"B)E002F" apt_errorreturnc t}|jjdD]W}|stjd|}|sd|j djddz}|j |Y|S)aAParse apt update errors for invalid apt config in user machine. This functions parses apt update errors regarding the presence of invalid apt config in the system, for example, a ppa that cannot be reached, for example. In that scenario, apt will output a message in the following formats: The repository 'ppa 404 Release' ... Failed to fetch ppa 404 ... On some releases, both of these errors will be present in the apt error message. :param apt_error: The apt error string :return: a NamedMessage containing the error message  z2(Failed to fetch |The repository .)(?P[^\s]+)z- urlz/distsr)setstriprGrWrX groupdictadd)rg failed_reposline pattern_matchrepo_url_matchs r'(_parse_apt_update_for_invalid_apt_configrts(5L!''- 1 IIEtM=224U;AA(KANN  0 1 r&cmd error_msgoverride_env_varsc tj|dt|\}}|S#tj$r}dt |j vrtj t|j }|r.tjdjt||r|n t |}tj|d}~wwxYw)aRun an apt command, retrying upon failure APT_RETRIES times. :param cmd: List containing the apt command to run, passed to subp. :param error_msg: The string to raise as UbuntuProError when all retries are exhausted in failure. :param override_env_vars: Passed directly as subp's override_env_vars arg :return: stdout from successful run of the apt command. :raise UbuntuProError: on issues running apt-cache policy. T)capturerArwz%Could not get lock /var/lib/dpkg/lockrj)rprDN) rrMrQrrRrTrUAPTProcessConflictErrorrtAPTInvalidRepoErrorrOsortedr[)rurvrwout_errrerpmsgs r'run_apt_commandrs8KK $/  T. J#  + +8 2c!((m C446 6  DAHHML 44!%6,+?!@%i#a&++377!8s $CBC  C)maxsizec"tddg||S)N apt-cachepolicy)rurvrw)r)rvrws r'get_apt_cache_policyrs  ( #+ r&ceZdZdZdZdZy)PreserveAptCfgc ||_i|_yr<)apt_funccurrent_apt_cfg)selfrs r'__init__zPreserveAptCfg.__init__s  !r&c tj}|jDcic]'}|tj|j |)c}|_|jScc}wr<)r0r1keyscopydeepcopyr2rr)rcfgkeys r' __enter__zPreserveAptCfg.__enter__ sRnn8;  14Cswws|, , }}  s,A'ctj}|jjD]!}|j ||j|#tj yr<)r0r1rrrl init_system)rtypevalue tracebackrrs r'__exit__zPreserveAptCfg.__exit__sPnn'',,. 4C GGC--c2 3 4r&N)rr r!rrrr%r&r'rrs"r&rctjjD]!}tjj|#tjtj dSr<)r0r1rclearr3Cachers r'get_apt_pkg_cachersH~~""$"S!" LLN == r&cr tjjD]8}tjd|rtjj |:tjj dttjtjdS#t$ricYSwxYw)Nz^Acquirer.) r0r1rrWrXrrlrr3r Exceptionrs r'get_esm_apt_pkg_cacher#s>>&&( *C99Z-$$S) * 5/2  }}T""  s7B(A-B(( B65B6pkg_namectt5} ||} dddjr|jjSy#t$r YdddywxYw#1swYCxYwr<)rrKeyError current_verver_str)rcachepackages r'get_pkg_versionr6sn ) *e HoG ""***     s(AA A AAAA#check_esm_cachec`tt5} ||}tj|}|j |}|s dddy|j }ddd|sStt5}|ri ||}tj|} | j |} | s cdddS| j } tj| dk\r | cdddSdddS#t$r YdddywxYw#1swYxYw#t$rcYcdddSwxYw#1swYSxYw)Nr) rrrr0DepCacheget_candidate_verrrr=) rrrr dep_cache candidatecandidate_version esm_cache esm_package esm_dep_cache esm_candidateesm_candidate_versions r'get_pkg_candidate_versionrCsh ) * .e HoG$$U+ //8  . .&-- .   - .-)  )'1 $,,Y7M);;KHM (--%2$9$9 !'')+< -)---, G  . .  . .( )(( -- ) -, siC=C&)C= C=0D#4D 9)D#,&D#& C:/C=9C::C==D D D#D  D##D-c tddg|} tj|S#tj$rtjtj$r%}tj |j d}~wtj$r%}tj|j d}~wwxYw#tjwxYw)Napt-getupdaterurwrepo_msgrD) rrrzAPTUpdateProcessConflictErrorr{APTUpdateInvalidRepoErrorrUbuntuProErrorAPTUpdateFailedr cache_clear)rwr}res r'run_apt_update_commandros+H%9J  ((* J  - -96688  ) )C22AEEBB  $ $7((667 ((*s-(9B<! BB< B77B<<B??Csources_list_pathctt5}tjj dt j j|tjj ddtjj ddtj}|jt}t j jtjjdd}tj|} |5|j||ddddt*j- dddy#1swY'xYw#ttd d $rt!j"t$$r$}t!j&t)| d}~wwxYw#t*j-wxYw#1swYyxYw) NzDir::Etc::sourcelistzDir::Etc::sourcepartszN.O.F.O.L.D.E.RzAPT::List-Cleanup0zDir::State::ListslockrErrorr%rD)rrr0r1rlrHrIabspath SourceListread_main_listr rOfind_dirFileLockrgetattrrrz SystemErrorrrTrr)rr sources_listfetch_progress lock_filerres r'update_sources_listrsl ) *!/e "BGGOO4E$F  24EF.4))+ ##%)*GGLL NN # #$7 8&  * / > ^\1= > ! , , .C!/!/2 > >w, 7446 6 <,,CF; ; < ! , , .C!/!/sTC>GEE %E-G E E0F+F&&F++F..GGGpackages apt_optionsc|g} tgd|z|z|}|S#tj$rtjtj$r%}tj |j d}~wwxYw)N)rinstall --assume-yesrr)rrrzAPTInstallProcessConflictErrorr{APTInstallInvalidRepoErrorr)rrrwr}res r'run_apt_install_commandrs   D60   J  - -:7799  ) )D33QUUCCDs9A; A66A;originc4t}tt5}|jD]F}|j}|s|j D]&\}}|j |k(s|j|(H dddt|S#1swYt|SxYwr<) rlrrrr file_listrrolist)rresultrrinstalled_versionfile_s r' get_installed_packages_by_originrsUF ) *,e~~ ,G ' 3 3  0::,GD!{{f, 7+, ,, <, <sB!BBBrexclude_origincg}|jD]R}|jDcgc]%\}}|jdk7r|j|k7r|'}}}|sB|j |T|Scc}}w)Nnow) version_listr componentrappend)rrvalid_versionsr*rr valid_originss r'get_remote_versions_for_packagersN'' +#,, a~~&4;;.+H      ! !' * +  s*A&suitesseriesupdates_enabledr_cd}|D]?}||vrd}d|vr|stjd||d}|dj|||z }A|S)Nr/-updatesz?Not enabling apt suite "%s" because "%s-updates" is not enabledz# zC{maybe_comment}deb {url} {suite} main # deb-src {url} {suite} main ) maybe_commentrksuite)LOGwarningrN)rrrr_contentrrs r'_get_list_file_contentrs|G       KK   !M --3V+.4.  & Nr& keyring_fileinclude_deb_srcc|Dcgc] }||vs| }}|s*tjd||Dcgc] }d|vs| }}|rdnd}tj|dj |t ||} | Scc}wcc}w)NzPNot enabling service-related -updates suites because "%s-updates" is not enabledrz deb-srcr/ )rkr keyrings_dirrdeb_src)rrDEB822_REPO_FILE_CONTENTrNrO KEYRINGS_DIR) rrrr_rrrappliable_suitesrrs r'_get_sources_file_contentrs,2E%Vu_EE   +  0 :U3JE  ,jG&-- xx()!! .G N+F s A6A6 A;A; repo_filename credentialsc |jd\}}tjj |t j j}|jdr|dd}t|||d}tddgtj} | jD]} d j|| vrd | vrd }nt||||t vrmt"j$j't(|} t"j$j't*|} t-j.| | t1||||} nt3|||||} t j4|| y#t$rd}|}YgwxYw) zAdd an authenticated apt repo and credentials to the system. @raises: InvalidAPTCredentialsError when the token provided can't access the repo PPA. :bearer/NFrrz a={}-updatesz o=Ubuntu,T)rG ValueErrorrsecrets add_secretrget_release_inforendswithrfrrAPT_POLICY_FAILED splitlinesrNadd_apt_auth_conf_entrySERIES_NOT_USING_DEB822rHrIrOr APT_KEYS_DIRrexport_gpg_keyrr write_file)rr_rrrr`rarrrrqsource_keyring_filedestination_keyring_filers r'add_auth_apt_repor!sz(..s3(%%h/  $ $ & - -FCR= 8X>O  h!;!;F!!#   ( 4  d "  Hh9 (( ggll<F#%77<< l#K  .0HI( FOX , FOX|  mW-O sE-- E>=E>ct}|jd\}}|jds|dz }tjj |rt j|}nd}dj|||t}d}g} |jD]h} |sS| j} t| dk\r5| d} | |k(r| j|d }A| |vr| j|d }| j| j|s| j|| jdt j|d j| d y )zBAdd or replace an apt auth line in apt's auth.conf file or conf.d.r?rr/z:machine {repo_path} login {login} password {password}{cmt})rcloginracmtFTrjmodeN)!get_apt_auth_file_from_apt_configrGr rHrIrJr load_filerNAPT_AUTH_COMMENTrlenrrrO) r_rra apt_auth_file _protocolrc orig_contentrepo_auth_lineadded_new_auth new_linesrq split_linecurr_line_repos r'rrYsK57M#>>%0Iy   c "S  ww~~m$'' 6     NI'')J:!#!+A!Y.$$^4%)N!Y.$$^4%)N ( R mTYYy%9Fr&c|jd\}}|jdr|dd}t}tjj |rt j|}dj|}dj|jDcgc] }||vs| c}}|st j|yt j||d yycc}w) z+Remove a repo from the shared apt auth filer?rNrzmachine {repo_path}/ login)rcrjrr) rGr r rHrIrJrr!rNrOrensure_file_absentr)r_r%rcr$apt_auth auth_prefixrqrs r'remove_repo_from_apt_auth_filer0s#>>%0Iy#crN 57M ww~~m$##M2299I9N ))&113 Od{$7NT O   % %m 4   mW5 A% Ps  C"Cc.tj||jdr)tjtj|d|r9t j jt|}tj|t|y)z>Remove an authenticated apt repo and credentials to the systemz.sourcesrN) rr-r rset_filename_extensionrHrIrOrr0)rr_rs r'remove_auth_apt_repor3sm m,j)!!  ' ' v > ww||L,? !!,/"8,r&c|jd\}}|jdr|dd}dj||}tj||y)z.Add an apt preferences file and pin for a PPA.r?rNrz>%0Iy#crN  %%+V6HV%M  )73r&ctjdddtg\}}|r|jdddzStjdddtg\}}|jddj dS)z7Return to patch to the system configured APT auth file. apt-configshellr'rz90ubuntu-advantager)rrMAPT_CONFIG_AUTH_PARTS_DIRrGAPT_CONFIG_AUTH_FILErstrip)r}r~s r'r r s~ w'@AIC yy~a #777KK 7E+? @ Tyy~a '',,r&c |jd\}}|jdr|dd}d}tjdddtg\}}|r|jd d }|j dd }t tjtjj||d j|zS) zEList any apt files in APT_CONFIG_LISTS_DIR given repo_url and series.r?rNrz/var/lib/apt/listsr9r:rr;rrz _dists_{}*) rGr rrMAPT_CONFIG_LISTS_DIRreplacer|globrHrIrOrN)r_rr%rc lists_dirr}r~aptlist_filenames r'find_apt_list_filesrEs#>>%0Iy#crN $I w';<IC IIcN1%  ((c2  GGLL+l.A.A&.II   r&cPt||D]}tj|y)z?Remove any apt list files present for this repo_url and series.N)rErr-)r_rrIs r'remove_apt_list_filesrGs&#Hf5(!!$'(r&pkgc|tvSr<)get_installed_packages_names)rHs r' is_installedrKs .0 00r&c  tjgd\}}|jdd}|Dcgc]F}t|j dd|j dd|j ddHc}Scc}w)N)aptrz --installedrrrrr)r)r*r+)rrMrr(rG)r}r package_listentrys r'get_installed_packagesrPs [[7 8FC>>#AB'L"    S!!$KK$Q'S!!$   sA BcVt}|Dcgc]}|j}}|Scc}wr<)rPr))rNrH pkg_namess r'rJrJs,)+L%12c2I2 3s& http_proxy https_proxy proxy_scopec|s|rb|r`d}|tjk(rd}n|tjk(rd}tj t j j|d}|rY|tjk(r|tj|z }n,|tjk(r|tj|z }|rY|tjk(r|tj|z }n,|tjk(r|tj|z }|dk7r t|z}|dk(rtjtytj t|y)a Writes an apt conf file that configures apt to use the proxies provided as args. If both args are None, then no apt conf file is written. If this function previously wrote a conf file, and was run again with both args as None, the existing file is removed. :param http_proxy: the url of the http proxy apt should use, or None :param https_proxy: the url of the https proxy apt should use, or None :return: None r/z UA-scopedglobal)scope) proxy_urlN)rr$r#eventinforSETTING_SERVICE_PROXY_SCOPErNAPT_CONFIG_UA_PROXY_HTTPAPT_CONFIG_GLOBAL_PROXY_HTTPAPT_CONFIG_UA_PROXY_HTTPSAPT_CONFIG_GLOBAL_PROXY_HTTPSAPT_PROXY_CONFIG_HEADERrr-APT_PROXY_CONF_FILEr)rSrTrUmessageapt_proxy_configs r'setup_apt_proxyresm [ Gm444% 4 44" JJ44;;';J  -00 0  8 ? ?$!@!  M00 0  < C C$!D!   -00 0  9 @ @%!A!  M00 0  = D D%!E!  225EE2!!"56-/?@r&cd}tjjtr#tjtj }|Sr<)rHrIrJAPT_UPDATE_SUCCESS_STAMP_PATHstatst_mtime cache_times r'get_apt_cache_timerl.s3J ww~~34WW:;DD r&ct}|ytjj|tjjSr<)rldatetime fromtimestamptimezoneutcrjs r'get_apt_cache_datetimerr5s8#%J    * *:x7H7H7L7L MMr&ctjtjjtddt dt dz}t fd|Drytjtt dD]}tj|t dD]}tj|ddy) Nz**/*T) recursiverrc3&K|]}|v ywr<r%).0rexisting_filess r' z._ensure_esm_cache_structure..Ds =tDN " =si)exist_okr) rBrHrIrOrESM_BASIC_FILE_STRUCTUREallrensure_folder_absent create_filemakedirs) desired_filesrfolderrws @r'_ensure_esm_cache_structurer<sYY  _f-N !),DY,OO =} => 0)1!4 !*957 FT67r&c Jtjsytddlm}ddlm}ddlm}m }d}d}tj}| ||d}|jdgD]W}|jddd k(r|jd d d k(}|jddd k(sC|jd d d k(}Y||} |r1| jd|jk(r| jn| j!tj"rK||} |r1| jd|jk(r| jn| j!t%t&5} t)j*} | j-Gddt.} | } | j1|| ddddy#t2$r7}t4j7dj9t;|Yd}~Dd}~wwxYw#1swYyxYw)Nr)status)ApplicationStatus)ESMAppsEntitlementESMInfraEntitlementFservicesr)r/zesm-apps availablenoyesz esm-infracLeZdZdejfdZdejfdZy)-update_esm_caches..EsmAcquireProgressitemc`tjdj|jy)NzFetched ESM Apt Cache item: {})rdebugrNurirrs r'donez2update_esm_caches..EsmAcquireProgress.dones :AA$((KLr&c`tjdj|jy)Nz&Failed to fetch ESM Apt Cache item: {})rrrNrrs r'failz2update_esm_caches..EsmAcquireProgress.fails  <CCDHHMr&N)rr r!r0AcquireItemDescrrr%r&r'EsmAcquireProgressrs( M!8!8 M !8!8 r&rz%Failed to fetch the ESM Apt Cache: {})ris_current_series_ltsruaclient.actionsr(uaclient.entitlements.entitlement_statusruaclient.entitlements.esmrrrreadr2application_statusDISABLEDsetup_local_esm_repodisable_local_esm_repois_current_series_active_esmrrr0rrr rrrrrNrT)rrrrrapps_availableinfra_availablecurrent_statusserviceappsinfrarrrrres r'update_esm_cachesrQs  ' ' )!'J NO&++-NQ!%%j"5F ;;vr "j 0$[[d;uDN ;;vr "k 1%kk+t<EO F c "D   # # %a (,=,F,F F !!# ##%**,#C( ((*1-1B1K1KK  & & (  ( ( * - .P%))+ ##%  ,- P LLq 9PP  P KK?FFs1vN O O P!PPs0>;H:G H-H HHHH" package_names error_messagec@tgdt|z|ddiy)a Remove APT packages from the system. Setting DEBIAN_FRONTEND to noninteractive makes sure no prompts will appear during the operation. In this case, --force-confdef will automatically pick the default option when some debconf should appear. In the absence of a default option, --force-confold will automatically choose to keep the old configuration file. )rremover$-o Dpkg::Options::="--force-confdef"$-o Dpkg::Options::="--force-confold"DEBIAN_FRONTENDnoninteractiverwNrrrrs r'remove_packagesr.  }   ,.>? r&c@tgdt|z|ddiy)a Purge APT packages from the system - remove everything. Setting DEBIAN_FRONTEND to noninteractive makes sure no prompts will appear during the operation. In this case, --force-confdef will automatically pick the default option when some debconf should appear. In the absence of a default option, --force-confold will automatically choose to keep the old configuration file. )rpurgerrrrrrNrrs r'purge_packagesrrr&c(t|gdddiy)a6 Install packages, allowing downgrades. The --allow downgrades flag is needed because sometimes we need to reinstall the packages to a lower version (passed in the package_name string, as package=version). Setting DEBIAN_FRONTEND to noninteractive makes sure no prompts will appear during the operation. In this case, --force-confdef will automatically pick the default option when some debconf should appear. In the absence of a default option, --force-confold will automatically choose to keep the old configuration file. )z--allow-downgradesrrrr)rrwN)r)rs r'reinstall_packagesrs -.>?r&ctjjD]!}tjj|#tjtjSr<)r0r1rr init_configrs r'_get_apt_configrsJ~~""$"S!"  >>r&crtt5}|j|}ddd|S#1swYSxYwr<)rrr)base_keyapt_cfg apt_cfg_keyss r'get_apt_config_keysrs:  (.G||H- . . s,6 cfg_namesci}tt5}|D]8}|j|}t|s|j |xsd}|||<: ddd|S#1swY|SxYw)z Get all APT configuration values for the given config names. If one of the config names is not present on the APT config, that config name will have a value of None N)rrr2rT value_list)r apt_cfg_dictrcfg_name cfg_values r'get_apt_config_valuesrsvL  (/G! /H H-Iy>#..x8@D %.L "  // / s >AA%cPd}d}tjj|r|S|S)Nz/etc/apt/sources.listz&/etc/apt/sources.list.d/ubuntu.sources)rHrIrJ)old_sources_pathnew_sources_paths r'get_system_sources_filers5.? 77>>* + r&)NN)Fr<)rhN)urrnenumrBloggingrHrWr\rK functoolsrrtypingrrrrr r r r0apt.progress.baser uaclientr rrrrrruaclient.defaultsruaclient.files.state_filesrrPr"r=r<r@rar^r`r]r_rrAPT_METHOD_HTTPS_FILECA_CERTIFICATES_FILErbrgrrrIrOrzrQget_event_loggerrZ getLoggerreplace_top_level_logger_namerruniqueEnumrrTr(r8r=rfrtrrrrrrboolrrretryrzrrrPackagerVersionrrrrrr0r3r7r rErGrKrPrJr#refloatrlrrrrrrrrrrrr%r&r'rsG   &III-.8*)3+  K L?A) $ 49G LJ  _&<=  _&;<  _&:;  _&=>  _&FG  _&AB  " % %%'g:::8DEDII  !VSMIs+;fc]K )s)s))& R##X#P $26' c'}' S#X/' 'T 4#26}S#X/ .& c hsm ,1))$() c])Z37S#X/, '')C)CD"/3"/ "/N(,263i$s)$ S#X/ . S T'//5J  ?C __.6sm '//& I"59EH@"  I       @5.5.5.5. I 5.  5.  5.p)GXB&FJ--"%-5=c]- -" 4 -,( 1c1d1 %8 9 d3i!%!%+8+?+?5A 5A#5A-(5A 5ApHUON):): ;N7*BPJ49S0$s)C0d3i2} #uS$s)^$ $%,r&