PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python3/dist-packages/softwareproperties/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/softwareproperties/__pycache__/shortcuthandler.cpython-311.pyc
�

��cea����ddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
ddlmZddl
m
Z
ddlmZddlmZej��dZGd	�d
e��ZGd�de��ZGd
�de��ZdS)�N)�
get_distro)�SourceEntry�SourcesList�CollapsedSourcesList)�suppress)�copy)�gettext)�urlparsez=gpg -q --no-options --no-default-keyring --batch --keyring %sc��eZdZdZd,d�Zed���Zed���Zed���Zed���Z	e
d	���Ze
d
���Ze
d���Z
e
d���Ze
d
���Ze
d���Zd-d�Ze
d���Ze
d���Zd�Zd�Zd�Zd�Ze
d���Ze
d���Ze
d���Ze
d���Zd�Zd�Ze
d���Ze
d���Ze
d���Z e
d���Z!e
d ���Z"d!�Z#d"�Z$e
d#���Z%e
d$���Z&e
d%���Z'e
d&���Z(e
d'���Z)d(�Z*d-d)�Z+d-d*�Z,d+�Z-dS).�ShortcutHandleraCSuperclass for shortcut handler implementations.

    This provides a way to take a apt repository reference, in various forms,
    and write the specific apt configuration to local files.  This also can
    remove previously written configuration from local files.

    This class and any subclasses should never modify any main apt configuration
    files, only specifically named files in '.d' subdirs (e.g. sources.list.d, etc)
    should be modified.  The only exception to that rule is adding or removing
    sourceslist lines or components of existing source entries.
    NFc���||_|pg|_||_t��|_|p|jj|_||_||_d|_d|_	d|_
d|_dS�N)�shortcut�
components�
enable_sourcer�distro�codename�pocket�dry_run�
_source_entry�	_filebase�	_username�	_password)�selfrrrrrr�kwargss        �D/usr/lib/python3/dist-packages/softwareproperties/shortcuthandler.py�__init__zShortcutHandler.__init__8sl�� ��
�$�*����*��� �l�l��� �8�D�K�$8��
�������"��������������c�<�t|��}|jo|jS)z(Return if the uri is in valid uri format)r
�scheme�netloc��cls�uri�parseds   r�is_valid_urizShortcutHandler.is_valid_uriJs���#�����}�.���.rc��t|��}|�|j�d��d������S)z6Return the uri with the username and password stripped�@��r!)r
�_replacer!�
rpartition�geturlr"s   r�uri_strip_authzShortcutHandler.uri_strip_authPsF���#�������f�m�&>�&>�s�&C�&C�A�&F��G�G�N�N�P�P�Prc��t|�|����}|�d|�d|j��}|�|������S)z6Return the uri with the username and password included�:r(r*)r
r.r!r+r-)r#r$�username�passwordr%r!s      r�uri_insert_authzShortcutHandler.uri_insert_authXsW���#�,�,�S�1�1�2�2��%�X�X�x�x�x����?�����f��-�-�4�4�6�6�6rc�|�d}|dz
}	tj��5}|d|��z
}t|t��s|���}tj|���d|t
j���j	�
��}ddd��n#1swxYwYn=#t
j$r+}ttd��|z��gcYd}~Sd}~wwxYw	d�|���D��S#t$r$ttd	��|z��gcYSwxYw)
z�Return an array of fingerprint(s) for provided key(s).

        The 'keys' parameter should be in text (str) or binary (bytes) format;
        it is converted to bytes if needed, and then passed to the 'gpg' program.
        z6gpg -q --no-options --no-keyring --batch --with-colonsz& --with-fingerprint --with-fingerprint� --homedir T)�check�input�stdoutNz,Warning: gpg error while processing keys:
%sc�n�g|]2}|�d���|�d��d��3S)�fprr0�	)�
startswith�split��.0�ls  r�
<listcomp>z0ShortcutHandler.fingerprints.<locals>.<listcomp>vs8��X�X�X��A�L�L�QV�DW�DW�X�A�G�G�C�L�L��O�X�X�XrzWarning: invalid gpg output:
%s)�tempfile�TemporaryDirectory�
isinstance�bytes�encode�
subprocess�runr=�PIPEr8�decode�CalledProcessError�print�_�
splitlines�KeyError)r#�keys�cmd�homedirr8�es      r�fingerprintszShortcutHandler.fingerprints_s���G���(�(��		��,�.�.�
P�'��.�W�.�.�.��!�$��.�.�)��;�;�=�=�D�#���	�	���4�t�/9��@�@�@�@F�v�v�x�x��	
P�
P�
P�
P�
P�
P�
P�
P�
P�
P�
P����
P�
P�
P�
P����,�	�	�	��!�C�D�D�q�H�I�I�I��I�I�I�I�I�I�����	����	�X�X�V�->�->�-@�-@�X�X�X�X���	�	�	��!�6�7�7�&�@�A�A�A��I�I�I�	���sS�B1�A=B%�B1�%B)�)B1�,B)�-B1�1C+� C&� C+�&C+�/D
�
+D;�:D;c	��td|���j�dd�|���j������S)NzArchive for codename: z
 components: �,)rMr�dist�join�comps�rs r�descriptionzShortcutHandler.description{sT�����#�#�%�%�*�*�*��8�8�D�,�,�.�.�4�5�5�5�7�8�8�	9rc��|jSr)�archive_linkrZs r�web_linkzShortcutHandler.web_link�s��� � rc�4�|���jSr)rr$rZs rr]zShortcutHandler.archive_link�s�����!�!�%�%rc�@�|jr|j�d|j��S|jS)N�-)rrrZs rrWzShortcutHandler.dist�s)���;�	:�"�m�m�m�T�[�[�9�9��}�rc��|jjS)z*Text indicating a binary-type SourceEntry.)r�binary_typerZs rrczShortcutHandler.binary_type�����{�&�&rc��|jjS)z*Text indicating a source-type SourceEntry.)r�source_typerZs rrfzShortcutHandler.source_type�rdrc��|jstd���t|j��}|s|S||jkr"|�d��|j|_nD||jkr'|�|j��|j|_ntd|z���tt|��|j���S)a"Get the SourceEntry representing this archive/shortcut.

        This should never include any authentication data; if required,
        the username and password should only be available from the
        username and password properties, as well as from the
        netrcparts_content property.

        If pkgtype is provided, it must be either binary_type or source_type,
        in which case this returns a SourceEntry with the requested type.
        If pkgtype is not specified, this returns a SourceEntry with an
        implementation-dependent type (in most cases, implementations should
        default to binary_type).

        Note that the default SourceEntry will be returned without modification,
        and the implementation will determine if it is enabled or disabled;
        while the source-type SourceEntry will be enabled or disabled based on
        self.enable_source.  The binary-type SourceEntry will always be enabled.

        The SourceEntry 'file' field should always be set to the value of
        sourceparts_file.
        z3Implementation class did not set self._source_entryTzInvalid pkgtype: %s��file)r�NotImplementedErrorrrc�set_enabled�typerfr�
ValueErrorr�strri)r�pkgtyperSs   rrzShortcutHandler.SourceEntry�s���,�!�	]�%�&[�\�\�\���#�$�$���	��H��d�&�&�&�
�M�M�$�����%�A�F�F�
��(�
(�
(�
�M�M�$�,�-�-�-��%�A�F�F��2�W�<�=�=�=��3�q�6�6���/�/�/�/rc��|jS)aWReturn the username used for authentication

        If authentication is used, return the username; otherwise return None.

        By default, this returns the private variable self._username, which
        defaults to None.  Subclasses should override this method and/or
        set self._username if they have authentication data.
        )rrZs rr1zShortcutHandler.username�����~�rc��|jS)aWReturn the password used for authentication

        If authentication is used, return the password; otherwise return None.

        By default, this returns the private variable self._password, which
        defaults to None.  Subclasses should override this method and/or
        set self._password if they have authentication data.
        )rrZs rr2zShortcutHandler.password�rqrc�~�|���|���|���dS)z�Save all data for this shortcut to file(s).

        This writes everything to the relevant files.  By default, it
        calls add_source(), add_key(), and add_login().  Subclasses
        should override it if other actions are required.
        N)�
add_source�add_key�	add_loginrZs r�addzShortcutHandler.add�s7��	
�������������������rc�V�|���|���dS)a<Remove all data for this shortcut from file(s).

        This removes everything from the relevant files.  By default, it
        only calls remove_source() and remove_login().  Subclasses
        should override it if other actions are required.  Note that by
        default is does not call remove_key().
        N)�
remove_source�remove_loginrZs r�removezShortcutHandler.remove�s.��	
�������������rc���|�|j��}|�|j��}|j}t	��}t|��}|�|��}|r,ttd��|j	|j
fz��n|�|��}|j
|j
kr%ttd��|j
z��n�|jr>td��j
|_
ttd��|j
z��n^|j
r,ttd��|j	|j
fz��n+ttd��|j	|j
fz��|}|j
|_
|�|��}|r,ttd��|j	|j
fz��n|�||���}|j
|j
kr%ttd��|j
z��n^|j
r,ttd��|j	|j
fz��n+ttd��|j	|j
fz��|}|js�t|j
|j
g��D]�}t j�|��s�|�|j��r>t j�|j��st!j|jd��t-|d	��5t!j||��d
d
d
��n#1swxYwY��|���d
Sd
S)aOAdd the apt SourceEntries.

        This uses SourcesList to add the binary-type and source-type
        SourceEntries.

        If the SourceEntry matches a known apt template, this will ignore
        the sourceparts_file and instead place the SourceEntries into
        the main/default sources.list file.  Otherwise, this will add
        the SourceEntries into the sourceparts_file.

        If either the binary-type or source-type entry exist in the current
        SourcesList, the existing entries are updated instead of placing
        the entries in the sourceparts_file.
        zFound existing %s entry in %sz+Updating existing entry instead of using %s�z!Archive has template, updating %szAdding disabled %s entry to %szAdding %s entry to %s)�after���wN)rrcrf�sourceparts_moderr�	get_entryrLrMrlri�	add_entry�template�disabledr�set�os�path�existsr<�sourceparts_path�mkdir�open�chmod�save)r�binentry�srcentry�mode�sourceslist�
collapsedlist�newentry�	entryfiles        rrtzShortcutHandler.add_source�s����#�#�D�$4�5�5���#�#�D�$4�5�5���$��!�m�m��,�[�9�9�
� �*�*�8�4�4���	9��!�3�4�4��
�x�}�7U�U�V�V�V�V�$�.�.�x�8�8�H��=�H�M�)�)��!�A�B�B�X�]�R�S�S�S�S�
�
�	O�'��O�O�0�H�M��!�7�8�8�8�=�H�I�I�I�I�
�
�	O��!�4�5�5����
�8V�V�W�W�W�W��!�+�,�,��
�x�}�/M�M�N�N�N���!�
��
� �*�*�8�4�4���	I��!�3�4�4��
�x�}�7U�U�V�V�V�V�$�.�.�x�x�.�H�H�H��=�H�M�)�)��!�A�B�B�X�]�R�S�S�S�S�
�
�	O��!�4�5�5����
�8V�V�W�W�W�W��!�+�,�,��
�x�}�/M�M�N�N�N����|�
	� �(�-���!?�@�@�
2�
2�	��w�~�~�i�0�0�2�!�,�,�T�-B�C�C�?� "����t�/D� E� E�?����!6��>�>�>��i��-�-�2�2����D�1�1�1�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2����������
	�
	s�1M�M	�M	c���t��}t|��}���j��}���j��}|�d��|�|��rTttd��|j	|j
fz��|�|�d�����|�d��|�|��rTttd��|j	|j
fz��|�|�d������fd�|D��}d�|D��sL|D]I}|j
s+ttd��|j	|j
fz��|�|���J�js|�d���dSdS)	a~Remove the apt SourceEntries.

        This uses SourcesList to remove the binary-type and source-type
        SourceEntries.

        This must disable the corresponding SourceEntries, from whatever file(s)
        they are located in.  This must not disable more than matches, e.g.
        if the existing SourceEntry line contains more components this must
        edit the existing line to remove this SourceEntry's component(s).

        After disabling all matching SourceEntries, if the sourceparts_file is
        empty or contains only invalid and/or disabled SourceEntries, this
        may remove the sourceparts_file.
        TzDisabling %s entry in %s)r�c�4��g|]}|j�jk�|��S�)ri�sourceparts_file)r?�srs  �rrAz1ShortcutHandler.remove_source.<locals>.<listcomp>Ts(���R�R�R�a�!�&�D�<Q�2Q�2Q��2Q�2Q�2Qrc�.�g|]}|j�	|j�|��Sr�)�invalidr�)r?rSs  rrAz1ShortcutHandler.remove_source.<locals>.<listcomp>Us&��L�L�L�a�q�y�L���L��L�L�Lrz"Removing disabled %s entry from %s)r{N)rrrrcrfrk�	has_entryrLrMrlrir�r+r�r{rr�)rr�r�r�r��file_entriesrSs`      rryzShortcutHandler.remove_source5s����"�m�m��,�[�9�9�
��#�#�D�$4�5�5���#�#�D�$4�5�5��	���T�"�"�"��"�"�8�,�,�	F��!�.�/�/�8�=�(�-�2P�P�Q�Q�Q��#�#�H�$5�$5�t�$5�$D�$D�E�E�E����T�"�"�"��"�"�8�,�,�	F��!�.�/�/�8�=�(�-�2P�P�Q�Q�Q��#�#�H�$5�$5�t�$5�$D�$D�E�E�E�R�R�R�R�;�R�R�R��L�L�<�L�L�L�	&�!�
&�
&���y�V��!�@�A�A�Q�V�Q�V�DT�T�U�U�U��"�"�1�%�%�%�%��|�	*����D��)�)�)�)�)�	*�	*rc�@�tj�d��S)zAReturn result of apt_pkg.config.find_dir("Dir::Etc::sourceparts")zDir::Etc::sourceparts��apt_pkg�config�find_dirrZs rr�z ShortcutHandler.sourceparts_path_s���~�&�&�'>�?�?�?rc�:�|�d|j���S)a$Get the sources.list.d filename, without the leading path.

        By default, this combines the filebase with the codename, and uses a
        extension of 'list'.  This is different than the trustedparts or
        netrcparts filenames, which use only the filebase plus extension.
        �list��suffix)�_filebase_to_filenamerrZs r�sourceparts_filenamez$ShortcutHandler.sourceparts_filenameds���)�)�&���)�G�G�Grc�B�|�|j|j��S)a�Get the sources.list.d absolute-path filename.

        Note that the add_source() function will not use this file if this shortcut's
        SourceEntry matches a known apt template; instead the entries will be placed
        in the main sources.list file.  Also, if the SourceEntry already exists in
        the SourcesList, it will be edited in place, instead of using this file.
        See add_source() for more details.
        )�_filename_to_filer�r�rZs rr�z ShortcutHandler.sourceparts_filens ���%�%�d�&;�T�=V�W�W�Wrc��dS)z�Mode of sourceparts file.

        Note that add_source() will only use this mode if it creates a new file
        for sourceparts_file; if the file already exists or if the SourceEntry is
        saved in a different file, this mode is not used.
        �r�rZs rr�z ShortcutHandler.sourceparts_modezs	���urc��t|j|jf��sdS|j}|j}t|t��s|���}|�|��}ttd��|d�	|��fz��t|z}d}|j�sJtj
�|��s�|�|j��r?tj
�|j��stj|jd���|jrBt'|d��5tj||j��ddd��n#1swxYwY	t+j��5}|d|�d	|��z
}t/j|���d
|���ddd��dS#1swxYwYdS#t.j$r}t7|���d}~wwxYwdS)a[Add the GPG key(s) corresponding to this repo.

        By default, if self.trustedparts_content contains content,
        and self.trustedparts_file points to a file, the key(s) will
        be added to the file.

        If the file does not yet exist, and self.trustedparts_mode is set,
        the file will be created with that mode.
        Nz$Adding key to %s with fingerprint %srVz--importr�r��wbr5� T)r6r7)�all�trustedparts_file�trustedparts_contentrDrErFrTrLrMrX�GPG_KEYRING_CMDrr�r�r�r<�trustedparts_pathr��trustedparts_moder�r�rBrCrGrHr=rK�ShortcutException)r�destrP�fprQ�actionrRrSs        rruzShortcutHandler.add_key�s����D�*�D�,E�F�G�G�	��F��%���(���$��&�&�	!��;�;�=�=�D�
�
�
�t�
$�
$��
�a�6�7�7�4����"���:N�N�O�O�O���$�����|�	+��7�>�>�$�'�'�
?��O�O�D�$:�;�;�A��G�N�N�4�+A�B�B�A��H�T�3�%�@�@�@�@��)�?��d�D�)�)�?�?����t�'=�>�>�>�?�?�?�?�?�?�?�?�?�?�?����?�?�?�?�
+��0�2�2�H�g��;��;�;�6�;�;�;�C��N�3�9�9�;�;�d�$�G�G�G�G�H�H�H�H�H�H�H�H�H�H�H�H����H�H�H�H�H�H���0�
+�
+�
+�'��*�*�*�����
+����	+�	+sN�E(�(E,�/E,�4G�5G	�<G�	G
�
G�G
�G�G9�%G4�4G9c�^�t|j|jf��sdS|j}|�|j��}tj�|��sdSttd��|d�	|��fz��t|z}dd�	|��z}|js�	tj
��5}|d|�d|��z
}tj|���d���ddd��n#1swxYwYn&#tj$r}t%|���d}~wwxYwt'|d	��5}|�|�����}ddd��n#1swxYwY|rt	j|��dSdSdS)
a�Remove the GPG key(s) corresponding to this repo.

        By default, if self.trustedparts_content contains content,
        and self.trustedparts_file points to a file, the key(s) will
        be removed from the file.

        If the file contains no more keys after removal, the file will
        be removed.

        This does not consider other files; multiple repositories may
        use the same signing key.  This only modifies/removes
        self.trustedparts_file.
        Nz(Removing key from %s with fingerprint %srVz--delete-keys %sr�r5T)r6�rb)r�r�r�rTr�r�r�rLrMrXr�rrBrCrGrHr=rKr�r��readr{)	rr�r�rQr�rRrS�f�emptys	         r�
remove_keyzShortcutHandler.remove_key�s0���D�*�D�,E�F�G�G�	��F��%��
�
�
�t�8�
9�
9���w�~�~�d�#�#�	��F�
�a�:�;�;�t�S�X�X�b�\�\�>R�R�S�S�S���$��#�c�h�h�r�l�l�2���|�	 �
+��0�2�2�<�g��;��;�;�6�;�;�;�C��N�3�9�9�;�;�d�;�;�;�;�<�<�<�<�<�<�<�<�<�<�<����<�<�<�<����0�
+�
+�
+�'��*�*�*�����
+�����d�D�!�!�
8�Q� �-�-�a�f�f�h�h�7�7�7��
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8����
8�
8�
8�
8��
 ��	�$������	 �	 �
 �
 sN�>D�4D�D�D�D�D�D�E�,D;�;E�)F�F�Fc�@�tj�d��S)zBReturn result of apt_pkg.config.find_dir("Dir::Etc::trustedparts")zDir::Etc::trustedpartsr�rZs rr�z!ShortcutHandler.trustedparts_path�s���~�&�&�'?�@�@�@rc�,�|�d��S)z9Get the trusted.gpg.d filename, without the leading path.�gpg�r�rZs r�trustedparts_filenamez%ShortcutHandler.trustedparts_filename�s���)�)�%�0�0�0rc�B�|�|j|j��S)z-Get the trusted.gpg.d absolute-path filename.)r�r�r�rZs rr�z!ShortcutHandler.trustedparts_file�s ���%�%�d�&<�d�>X�Y�Y�Yrc��dS)z&Content to put into trusted.gpg.d fileNr�rZs rr�z$ShortcutHandler.trustedparts_content�s	���trc��dS)zMode of trustedparts filer�r�rZs rr�z!ShortcutHandler.trustedparts_mode��	���urc���t|j|jf��sdS|j}|j}tj�|��}d}|s�t
|d��5}d�|���D���ddd��n#1swxYwYtt��5�dd}ddd��n#1swxYwYt�fd�|�
��D����r!ttd��|z��dSttd��|z��|j
�s|r�|�|j��r?tj�|j��stj|jd	�
��|jrBt
|d��5tj||j��ddd��n#1swxYwYt
|d��5}|dkr|�d��|�|j��ddd��dS#1swxYwYdSdS)
z�Add the login credentials corresponding to this repo.

        By default, if self.netrcparts_content contains content,
        and self.netrcparts_file points to a file, the file will be
        created and content placed into it.
        N�
�rc�6�g|]}|�����Sr���stripr>s  rrAz-ShortcutHandler.add_login.<locals>.<listcomp>�s ��:�:�:�q������:�:�:r���c�<��g|]}|����v��Sr�r�)r?r@�liness  �rrAz-ShortcutHandler.add_login.<locals>.<listcomp>s&���E�E�E�1�A�G�G�I�I��&�E�E�Erz!Authentication data already in %sz Adding authentication data to %srr�r��a)r��netrcparts_file�netrcparts_contentr�r�r�r��	readlinesrrOrNrLrMrr<�netrcparts_pathr��netrcparts_moder��write)rr��content�newfile�	finalcharr�r�s      @rrvzShortcutHandler.add_login�s6����D�(�$�*A�B�C�C�	��F��#���)���g�n�n�T�*�*�*���	��	��d�C���
;�A�:�:�A�K�K�M�M�:�:�:��
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;��(�#�#�
*�
*�!�"�I�b�M�	�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*��E�E�E�E��0B�0B�0D�0D�E�E�E�F�F�
��a�;�<�<�t�C�D�D�D���
�a�2�3�3�d�:�;�;�;��|�
	1��
=��O�O�D�$8�9�9�?��G�N�N�4�+?�@�@�?��H�T�1��>�>�>�>��'�=��d�C���=�=����t�';�<�<�<�=�=�=�=�=�=�=�=�=�=�=����=�=�=�=��d�C���
1�A���$�$��G�G�D�M�M�M�����/�0�0�0�	
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1�
1�
1�
	1�
	1sH�!B�B�B�+C�C
�
C
�8G�G#�&G#�:6H=�=I�Ic��t|j|jf��sdS|j}td�|j���D����}t
j�|��sdSt|d��5}td�|�	��D����}ddd��n#1swxYwY||zs ttd��|z��nyttd��|z��|jsSt|d��5}|�
d�||z
����ddd��n#1swxYwY|jsgt|d��5}|������}ddd��n#1swxYwY|rtj|��dSdSdS)	a�Remove the login credentials corresponding to this repo.

        By default, if self.netrcparts_content contains content,
        and self.netrcparts_file points to a file, the content will
        be removed from the file.

        If the file is empty (other than whitespace) after removal, the file
        will be removed.

        This does not consider other files; this only modifies/removes
        self.netrcparts_file.
        Nc�6�g|]}|�����Sr�r�r>s  rrAz0ShortcutHandler.remove_login.<locals>.<listcomp>%s ��O�O�O�Q�q�w�w�y�y�O�O�Orr�c�6�g|]}|�����Sr�r�r>s  rrAz0ShortcutHandler.remove_login.<locals>.<listcomp>+s ��@�@�@�Q�q�w�w�y�y�@�@�@rz'Authentication data not contained in %sz$Removing authentication data from %sr�r�)r�r�r�r�rNr�r�r�r�r�rLrMrr�rXr�r�r{)rr�r�r��filecontentr�s      rrzzShortcutHandler.remove_logins����D�(�$�*A�B�C�C�	��F��#���O�O�$�*A�*L�*L�*N�*N�O�O�O�P�P���w�~�~�d�#�#�	��F�
�$��_�_�	B���@�@�!�+�+�-�-�@�@�@�A�A�K�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B��W�$�	>��!�=�>�>��E�F�F�F�F��!�:�;�;�d�B�C�C�C��<�
>��$��_�_�>���G�G�D�I�I�k�G�&;�<�<�=�=�=�>�>�>�>�>�>�>�>�>�>�>����>�>�>�>��|�	 ��d�C���
-�A��F�F�H�H�N�N�,�,�,��
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-��
 ��	�$������		 �	 �
 �
 s6�,B>�>C�C�$,E�E �#E �>(F2�2F6�9F6c�@�tj�d��S)z@Return result of apt_pkg.config.find_dir("Dir::Etc::netrcparts")zDir::Etc::netrcpartsr�rZs rr�zShortcutHandler.netrcparts_path:s���~�&�&�'=�>�>�>rc�,�|�d��S)z7Get the auth.conf.d filename, without the leading path.�confr�rZs r�netrcparts_filenamez#ShortcutHandler.netrcparts_filename?s���)�)�&�1�1�1rc�B�|�|j|j��S)z+Get the auth.conf.d absolute-path filename.)r�r�r�rZs rr�zShortcutHandler.netrcparts_fileDs ���%�%�d�&:�D�<T�U�U�Urc��t|j|jf��sdSt|���j��j}t|���j��j}d|�|�d|j�d|j��S)z�Content to put into auth.conf.d file

        By default, if both username and password are set, this will return a proper
        netrc-formatted line with the authentication information, including the
        hostname and path.
        Nzmachine z login z
 password )r�r1r2r
rr$�hostnamer�)rr�r�s   rr�z"ShortcutHandler.netrcparts_contentIs����D�M�4�=�1�2�2�	��4��D�,�,�.�.�2�3�3�<����(�(�*�*�.�/�/�4��Y�(�Y�D�Y�Y���Y�Y�$�-�Y�Y�Yrc��dS)zMode of netrcparts filei�r�rZs rr�zShortcutHandler.netrcparts_modeXr�rc���t|��}tt|j��t|j��z��|_tt|��|j���|_dS)z�Set the SourceEntry.

        This should be called from subclasses to set the SourceEntry.
        The SourceEntry file will be set to the sourceparts_file value.

        The self.components, if any, will be added to the line's component(s).
        rhN)rr�r�rYrrnr�r)r�linerSs   r�_set_source_entryz!ShortcutHandler._set_source_entry]s[��
������s�1�7�|�|�c�$�/�&:�&:�:�;�;���(��Q���d�6K�L�L�L����rc�|�|j}|sdS|r|d|zz
}tjdd|�����S)Nz-%sz[^a-z0-9_-]+rM)r�re�sub�lower)rr��bases   r�_encode_filebasez ShortcutHandler._encode_filebaseisH���~���	��4��	#��E�F�N�"�D��v�n�c�4�:�:�<�<�8�8�8rc�D�|�|���}|sdS|�d|��S)Nr��.)r�)r�extr�r�s    rr�z%ShortcutHandler._filebase_to_filenameqs6���$�$�F�$�3�3���	��4��$�$���$�$rc�J�|sdStj�||��Sr)r�r�rX)rr��names   rr�z!ShortcutHandler._filename_to_filews%���	��4��w�|�|�D�$�'�'�'r)NFNNFr).�__name__�
__module__�__qualname__�__doc__r�classmethodr&r.r3rT�propertyr[r^r]rWrcrfrr1r2rwr{rtryr�r�r�r�rur�r�r�r�r�r�rvrzr�r�r�r�r�r�r�r�r�r�rrrr,s�������
�
�����$�/�/��[�/�
�Q�Q��[�Q��7�7��[�7�����[��6�9�9��X�9�
�!�!��X�!��&�&��X�&�����X��
�'�'��X�'��'�'��X�'�#0�#0�#0�#0�J�	�	��X�	��	�	��X�	�	�	�	�	�	�	�G�G�G�R(*�(*�(*�T�@�@��X�@��H�H��X�H��	X�	X��X�	X�����X��%+�%+�%+�N& �& �& �P�A�A��X�A��1�1��X�1��Z�Z��X�Z�����X������X��&1�&1�&1�P$ �$ �$ �L�?�?��X�?��2�2��X�2��V�V��X�V��Z�Z��X�Z�����X��
M�
M�
M�9�9�9�9�%�%�%�%�(�(�(�(�(rrc��eZdZdZdS)r�z-General Exception during shortcut processing.N�r�r�r�r�r�rrr�r�}s������7�7��Drr�c��eZdZdZdS)�InvalidShortcutExceptionz�Invalid shortcut.

    This should only be thrown from the constructor of a ShortcutHandler
    subclass, and only to indicate that the provided shortcut is invalid
    for that ShortcutHandler class.
    Nr�r�rrrr�s��������	�Drr)r�r�r�rGrB�aptsources.distror�&softwareproperties.extendedsourceslistrrr�
contextlibrrr	rM�urllib.parser
�initr��objectr�	Exceptionr�rr�rr�<module>r	su��$����	�	�	�	�	�	�	�	���������(�(�(�(�(�(�J�J�J�J�J�J�J�J�J�J� ������������ � � � � � �!�!�!�!�!�!�
������Q��N	(�N	(�N	(�N	(�N	(�f�N	(�N	(�N	(�b	�	�	�	�	�	�	�	�	�
	�	�	�	�	�0�	�	�	�	�	r