Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
§

iµµhRÑã	óD—UdZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZddl
mZmZmZmZmZmZmZmZmZmZddlmZmZmZmZmZmZmZdd	l m!Z!erdd
l"m#Z#dZ$dZ%d
Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e3Z4Gd„de¦«Z5d„Z6d„Z7d„Z8d„Z9d „Z:d!„Z;d"„Z<d#e=d$e=d%e3fd&„Z>dWd'e?d(ee?fd)„Z@d*ee3e=fd%eed+fd,„ZAd-„ZBd.e3d/e?d%dfd0„ZCd1„ZDd2„ZEGd3„d4¦«ZFGd5„d+¦«ZGGd6„d7eG¦«ZHd8ee3d%eeed9eee3e3fffd:„ZId;„ZJGd<„d=eG¦«ZKGd>„d?ed?gd@¢¦«¦«ZLdXdB„ZMdC„ZNdDeOfdE„ZPd%e3fdF„ZQdG„ZRdYd%e?fdI„ZSGdJ„dKeT¦«ZUGdL„dMeG¦«ZVdN„ZWdXdO„ZXdP„ZYdQ„ZZdR„Z[GdS„dTeG¦«Z\e\eVeHeKfZ]iZ^eee3e=feeGfe_dU<e]D]Z`e`e^e`ja<e`e^e`jb<ŒeMZcePZd	ddVlemMZMmPZPdS#ef$rYdSwxYw)ZzAccess to base git objects.éN)Ú
namedtuple)Úsha1)ÚBytesIO)
Ú
TYPE_CHECKINGÚBinaryIOÚDictÚIterableÚIteratorÚListÚOptionalÚTupleÚTypeÚUnioné)ÚChecksumMismatchÚFileFormatExceptionÚNotBlobErrorÚNotCommitErrorÚNotTagErrorÚNotTreeErrorÚObjectFormatException)ÚGitFile)ÚHASHs(0000000000000000000000000000000000000000ótreesparentsauthors	committersencodingsmergetagsgpgsigsobjectstypeótagstaggeriàlÿÿÿÿs-----BEGIN PGP SIGNATURE-----có—eZdZdZdS)ÚEmptyFileExceptionz+An unexpectedly empty file was encountered.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__©óú:/usr/local/lib/python3.11/site-packages/dulwich/objects.pyrrYs€€€€€Ø5Ð5Ð5Ð5r#rcó<—tj|¦«tkS)zhCheck if a mode indicates a submodule.

    Args:
      m: Mode to check
    Returns: a ``boolean``
    )ÚstatÚS_IFMTÚS_IFGITLINK)Úms r$ÚS_ISGITLINKr*]s€õŒ;q‰>Œ>[Ò(Ð(r#có„—tj¦«}| |¦«}|| ¦«z
}|S©N)ÚzlibÚ
decompressobjÚ
decompressÚflush)ÚstringÚdcompÚdcompeds   r$Ú_decompressr4gs:€ÝÔÑ Ô €EØ×Ò˜vÑ&Ô&€G؈u{Š{‰}Œ}Ñ€GØ€Nr#cón—tj|¦«}t|¦«dks
Jd|z¦«‚|S)z5Takes a string and returns the hex of the sha within.é(z#Incorrect length of sha1 string: %r)ÚbinasciiÚhexlifyÚlen)ÚshaÚhexshas  r$Ú
sha_to_hexr<ns<ی
Ô
˜cÑ
"Ô
"€F݈v‰;Œ;˜"ÒÐÐÐCÀfÑLÑÔÐØ€Mr#cóò—t|¦«dks
Jd|z¦«‚	tj|¦«S#t$r6}t	|t
¦«s‚t
|jd¦«|‚d}~wwxYw)z)Takes a hex sha and returns a binary sha.r6zIncorrect length of hexsha: %srN)r9r7Ú	unhexlifyÚ	TypeErrorÚ
isinstanceÚbytesÚ
ValueErrorÚargs)ÚhexÚexcs  r$Ú
hex_to_sharFus€åˆs‰8Œ8rŠ>ˆ>ˆ>Ð;¸cÑA‰>Œ>ˆ>ð/ÝÔ! #Ñ&Ô&Ð&øÝð/ð/ð/ݘ#uÑ%Ô%ð	Øݘœ !œÑ%Ô%¨3Ð.øøøøð/øøøs¢6¶
A6Á1A1Á1A6có”—t|¦«dkrdS	tj|¦«dS#ttjf$rYdSwxYw)Nr6FT)r9r7r>r?ÚError)rDs r$Úvalid_hexsharI€s^€Ý
ˆ3x„x2‚~€~؈uðÝÔ˜3ÑÔÐðˆtøõ
•x”~Ð&ððð؈uˆuðøøøs—-­AÁAcóô—t|¦«t|¦«ur&t|dd¦«| d¦«}|dd…}|dd…}tj |||¦«S)zDTakes a hex sha and returns its filename relative to the given path.ÚencodeNÚasciié)ÚtypeÚgetattrÚdecodeÚosÚpathÚjoin)rRrDÚdirÚfiles    r$Úhex_to_filenamerV‹so€õ
ˆDz„z˜c™œÐ"Ð"¥w¨t°X¸tÑ'DÔ'DÐ'P؏jŠj˜Ñ!Ô!ˆØ

ˆbˆqˆbŒ'€C؈qˆrˆrŒ7€Då
Œ7<Š<˜˜c 4Ñ(Ô(Ð(r#có\—| tjjd¦«dd…}d|z}t	|¦«dks
J|¦«‚|\}}t	|¦«dkrt	|¦«dks
J|¦«‚||z d¦«}t
|¦«|S)z?Takes an object filename and returns its corresponding hex sha.rMéþÿÿÿNzInvalid object filename: %sé&rL)ÚrsplitrQrRÚsepr9rKrF)ÚfilenameÚnamesÚerrmsgÚbaseÚrestrDs      r$Úfilename_to_hexra˜sŸ€ð
OŠOBœGœK¨Ñ+Ô+¨B¨C¨CÔ0€EØ
*¨XÑ
5€F݈u‰:Œ:˜Š?ˆ?ˆ?˜F‰?Œ?ˆ?؁J€Dˆ$݈t‰9Œ9˜Š>ˆ>c $™iœi¨2šo˜o˜o¨v™oœoÐ-ؐ$‰;×
Ò
˜wÑ
'Ô
'€C݈sO„O€OØ€Jr#Únum_typeÚlengthÚreturncó¨—t|¦«}|€td|z¦«‚|jdzt|¦« d¦«zdzS)zCReturn an object header for the given numeric type and text length.Núunsupported class type num: %dó rLó)Úobject_classÚAssertionErrorÚ	type_nameÚstrrK)rbrcÚclss   r$Ú
object_headerrn¥sS€å
xÑ
 Ô
 €CØ
€{ÝÐ=ÀÑHÑIÔIÐIØŒ=˜4Ñ¥# f¡+¤+×"4Ò"4°WÑ"=Ô"=Ñ=ÀÑEÐEr#ÚnameÚ	docstringcó<‡—ˆfd„}ˆfd„}t|||¬¦«S)zBA property that helps tracking whether serialization is necessary.có>•—t|d‰z|¦«d|_dS)NÚ_T)ÚsetattrÚ_needs_serialization)ÚobjÚvalueros  €r$Úsetz"serializable_property.<locals>.set°s'ø€ÝS˜4‘Z Ñ'Ô'Ð'Ø#'ˆÔ Ð Ð r#có*•—t|d‰z¦«S)Nrs)rO)rvros €r$Úgetz"serializable_property.<locals>.get´sø€Ýs˜C $™JÑ'Ô'Ð'r#©Údoc)Úproperty)rorprxrzs`   r$Úserializable_propertyr~­sLø€ð(ð(ð(ð(ð(ð(ð(ð(ð(ð(õC˜ )Ð,Ñ,Ô,Ð,r#rNÚShaFilecó8—t |d¦«S)zúGet the object class corresponding to the given type.

    Args:
      type: Either a type name string or a numeric type.
    Returns: The ShaFile subclass corresponding to the given type, or None if
        type is not a valid type name/number.
    N)Ú	_TYPE_MAPrz)rNs r$ririºs€õ=Š=˜˜tÑ$Ô$Ð$r#cóL—t|¦«st|›d|›¦«‚dS)zÛCheck if a string is a valid hex sha string.

    Args:
      hex: Hex string to check
      error_msg: Error message to use in exception
    Raises:
      ObjectFormatException: Raised when the string is not valid
    ú N)rIr)rDÚ	error_msgs  r$Úcheck_hexshar…Ås:€õ˜ÑÔð:Ý# yÐ$8Ð$8°3Ð$8Ð$8Ñ9Ô9Ð9ð:ð:r#Úidentityr„c	ó*—| d¦«}| d¦«}t|dk||dz
dk| d|dz¦«dk|t|¦«dz
kd|vd|vg¦«st|¦«‚dS)	zÌCheck if the specified identity is valid.

    This will raise an exception if the identity is not valid.

    Args:
      identity: Identity string
      error_msg: Error message to use in exception
    ó<ó>ré éÿÿÿÿrhó
N)ÚfindÚallr9r)r†r„Úemail_startÚ	email_ends    r$Úcheck_identityr‘Òs­€ð—-’- Ñ%Ô%€KØ—
’
˜dÑ#Ô#€IÝà˜1ÒØ[ 1‘_Ô%¨Ò0ØMŠM˜$ ¨a¡Ñ0Ô0°BÒ6Ø˜X™œ¨Ñ*Ò*Ø˜Ð!Ø˜Ð!ð
	
ñ	ô	ð
/õ$ IÑ.Ô.Ð.ð
/ð
/r#cóJ—|tkrtdtz¦«‚dS)z¬Check if the specified time is not prone to overflow error.

    This will raise an exception if the time is not valid.

    Args:
      time_seconds: time in seconds

    zDate field should not exceed %sN)ÚMAX_TIMEr)Útime_secondss r$Ú
check_timer•ês+€ð•hÒÐÝ#Ð$EÍÑ$PÑQÔQÐQðÐr#có2—d |¦«dzS)z*Formats items into a space separated line.rgrŒ)rS)Úitemss r$Úgit_liner˜øs€à9Š9UÑÔ˜eÑ#Ð#r#có6—eZdZdZdZdd„Zdefd„Zdefd„Z	dS)	ÚFixedShazBSHA object that behaves like hashlib's but is given a fixed value.)Ú_hexshaÚ_shardNcó֗t|dd¦«| d¦«}t|t¦«st	d|z¦«‚||_t
|¦«|_dS)NrKrLz!Expected bytes for hexsha, got %r)rOrKr@rAr?r›rFrœ)Úselfr;s  r$Ú__init__zFixedSha.__init__sf€Ý6˜8 TÑ*Ô*Ð6Ø—]’] 7Ñ+Ô+ˆFݘ&¥%Ñ(Ô(ð	JÝÐ?À&ÑHÑIÔIÐI؈ŒݘvÑ&Ô&ˆŒ	ˆ	ˆ	r#có—|jS)zReturn the raw SHA digest.)rœ©ržs r$ÚdigestzFixedSha.digest
s
€àŒyÐr#có6—|j d¦«S)zReturn the hex SHA digest.rL)r›rPr¡s r$Ú	hexdigestzFixedSha.hexdigests€àŒ|×"Ò" 7Ñ+Ô+Ð+r#©rdN)
rrr r!Ú	__slots__rŸrAr¢rlr¤r"r#r$ršršýsi€€€€€ØLÐLà#€Ið'ð'ð'ð'ð˜ððððð,˜3ð,ð,ð,ð,ð,ð,r#ršc	óð—eZdZUdZdZeed<eed<eed<e	e
eed<eeddfed	<e
d
eddfd„¦«Zd5d
„Zd6dedeefd„Zd6dedefd„Zde
efd„Zdefd„Zdefd„Zd„Zdefd„Zd7dede	eddfd„Z	d7de
ede	eddfd„Ze
d„¦«Zd5d„Zededefd„¦«Zed „¦«Z d5d!„Z!de
eddfd"„Z"de
efd#„Z#ed$„¦«Z$ed%„¦«Z%e
d7d&„¦«Z&e
	d7dede
ede	efd'„¦«Z'ed(„¦«Z(d)„Z)d5d*„Z*d+„Z+defd,„Z,d-„Z-d.„Z.e/d/„¦«Z0de1fd0„Z2d1„Z3d2„Z4d3„Z5d4„Z6dS)8rzA git SHA file.)Ú
_chunked_textrœrururkÚtype_numr¨NrrœÚfrdcóV—d}tj¦«}| |¦«}d}d}|dkr]| |¦«}|| |¦«z
}||z
}| d|¦«}t|¦«}|dk°]|d|…}| dd¦«\}}		t|	¦«n%#t$r}
td|
z¦«|
‚d}
~
wwxYwt|¦«}|s%td	| d
¦«z¦«‚|¦«S)z<Parse a legacy object, creating it but not reading the file.irr‹rhNrgrzObject size not an integer: %súNot a known type: %srL)r-r.r/Úreadrr9ÚsplitÚintrBrrirP)ÚmagicrªÚbufsizeÚdecompÚheaderÚstartÚendÚextrarkÚsizerEÚ	obj_classs            r$Ú_parse_legacy_object_headerz#ShaFile._parse_legacy_object_headersT€ðˆÝÔ#Ñ%Ô%ˆØ×"Ò" 5Ñ)Ô)ˆØˆØˆØAŠgˆgØ—F’F˜7‘O”OˆEØf×'Ò'¨Ñ.Ô.Ñ.ˆFØU‰NˆEØ—+’+˜e UÑ+Ô+ˆCݘ‘K”KˆEðAŠgˆgð˜˜˜”ˆØ Ÿ,š, t¨QÑ/Ô/‰ˆ	4ð	YÝ‰IŒIˆIˆIøÝð	Yð	Yð	YÝ'Ð(HÈ3Ñ(NÑOÔOÐUXÐXøøøøð	Yøøøå  Ñ+Ô+ˆ	Øð	Ý'Ø&¨×)9Ò)9¸'Ñ)BÔ)BÑBñôð
ðˆy‰{Œ{ÐsÂ6CÃ
C(ÃC#Ã#C(có¸—t|¦«}| d¦«}|dkrtd¦«‚| ||dzd…¦«dS)z.Parse a legacy object, setting the raw string.rhrzInvalid object header, no \0rN)r4rrÚset_raw_string)ržÚmapÚtextÚ
header_ends    r$Ú_parse_legacy_objectzShaFile._parse_legacy_object9sa€å˜3ÑԈؗY’Y˜uÑ%Ô%ˆ
ؘŠ>ˆ>Ý'Ð(GÑHÔHÐHØ×Ò˜D ¨a¡Ð!1Ð!1Ô2Ñ3Ô3Ð3Ð3Ð3r#r‹Úcompression_levelc#óK—tj|¦«}| | ¦«¦«V—| ¦«D]}| |¦«V—Œ| ¦«V—dS)zlReturn chunks representing the object in the experimental format.

        Returns: List of strings
        N)r-ÚcompressobjÚcompressÚ_headerÚ
as_raw_chunksr0)ržrÀÚcompobjÚchunks    r$Úas_legacy_object_chunkszShaFile.as_legacy_object_chunksAsèè€õ
Ô"Ð#4Ñ5Ô5ˆØ×Ò˜tŸ|š|™~œ~Ñ.Ô.Ð.Ð.Ð.Ø×'Ò'Ñ)Ô)ð	*ð	*ˆEØ×"Ò" 5Ñ)Ô)Ð)Ð)Ð)Ð)؏mŠm‰oŒoÐÐÐÐÐr#cóT—d | |¬¦«¦«S)zAReturn string representing the object in the experimental format.r#)rÀ)rSrÈ)ržrÀs  r$Úas_legacy_objectzShaFile.as_legacy_objectLs-€àxŠxØ×(Ò(Ð;LÐ(ÑMÔMñ
ô
ð	
r#cól—|jr'd|_| ¦«|_d|_|jS)zxReturn chunks with serialization of the object.

        Returns: List of strings, not necessarily one per line
        NF)rurœÚ
_serializer¨r¡s r$rÅzShaFile.as_raw_chunksRs9€ð
Ô$ð	.؈DŒIØ!%§¢Ñ!2Ô!2ˆDÔØ(-ˆDÔ%ØÔ!Ð!r#cóP—d | ¦«¦«S)z\Return raw string with serialization of the object.

        Returns: String object
        r#)rSrÅr¡s r$Ú
as_raw_stringzShaFile.as_raw_string]s"€ð
xŠx˜×*Ò*Ñ,Ô,Ñ-Ô-Ð-r#có*—| ¦«S)z/Return raw string serialization of this object.©rÎr¡s r$Ú	__bytes__zShaFile.__bytes__dó€à×!Ò!Ñ#Ô#Ð#r#có*—t|j¦«S)z#Return unique hash for this object.)ÚhashÚidr¡s r$Ú__hash__zShaFile.__hash__hs€åD”G‰}Œ}Ðr#có*—| ¦«S)z:Return a string representing this object, fit for display.rÐr¡s r$Úas_pretty_stringzShaFile.as_pretty_stringlrÒr#r½r:có‚—t|t¦«std|z¦«‚| |g|¦«dS)z9Set the contents of this object from a serialized string.zExpected bytes for text, got %rN)r@rAr?Úset_raw_chunks)ržr½r:s   r$r»zShaFile.set_raw_stringpsG€å˜$¥Ñ&Ô&ð	FÝÐ=ÀÑDÑEÔEÐEØ×Ò˜T˜F CÑ(Ô(Ð(Ð(Ð(r#Úchunkscóˆ—||_| |¦«|€d|_nt|¦«|_d|_dS)z6Set the contents of this object from a list of chunks.NF)r¨Ú_deserializerœršru)ržrÛr:s   r$rÚzShaFile.set_raw_chunksvsI€ð$ˆÔØ×Ò˜&Ñ!Ô!Ð!؈;؈DŒIˆIå  ™
œ
ˆDŒIØ$)ˆÔ!Ð!Ð!r#có–—t|dd…¦«dz	dz}t|¦«}|std|z¦«‚|¦«S)z?Parse a new style object, creating it but not reading the file.rréézNot a known type %d)Úordrir)r°rªrbr¸s    r$Ú_parse_object_headerzShaFile._parse_object_header‚sW€õ˜˜a ˜cœ
‘O”O qÑ(¨AÑ-ˆÝ  Ñ*Ô*ˆ	Øð	JÝ'Ð(=ÀÑ(HÑIÔIÐI؈y‰{Œ{Ðr#cóò—t|dd…¦«}d}|dzdkr(t|||dz…¦«}|dz
}|dzdk°(||d…}| t|¦«¦«dS)z-Parse a new style object, setting self._text.rré€N)rár»r4)ržr¼ÚbyteÚusedÚraws     r$Ú
_parse_objectzShaFile._parse_object‹s€õ3q˜s”8‰}Œ}ˆØˆØd‰{˜qÒ Ð Ýs˜4 $¨¡(˜?Ô+Ñ,Ô,ˆDØA‰IˆDðd‰{˜qÒ Ð ð$%%ŒjˆØ×ҝK¨Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-r#r°có’—t|dd…¦«}t|dd…¦«}|dz|z}|dzdko|dzdkS)NrrrMééé)rá)rmr°Úb0Úb1Úwords     r$Ú_is_legacy_objectzShaFile._is_legacy_object—sR€å
q˜s”‰_Œ_ˆÝ
q˜s”‰_Œ_ˆØa‘˜2‰~ˆØT‘	˜dÒ"Ð7¨¨r©	°aÒ'7Ð7r#có(—| ¦«}|std¦«‚| |¦«r,| ||¦«}| |¦«n+| ||¦«}| |¦«|S)NzCorrupted empty file detected)r­rrðr¹r¿rârè)rmrªr¼rvs    r$Ú_parse_filezShaFile._parse_filežs—€àfŠf‰hŒhˆØð	FÝ$Ð%DÑEÔEÐEà× Ò  Ñ%Ô%ð	#Ø×1Ò1°#°qÑ9Ô9ˆCØ×$Ò$ SÑ)Ô)Ð)Ð)à×*Ò*¨3°Ñ2Ô2ˆCØ×Ò˜cÑ"Ô"Ð"؈
r#có0—d|_g|_d|_dS)zDon't call this directly.NT)rœr¨rur¡s r$rŸzShaFile.__init__¬s€àˆŒ	ØˆÔØ$(ˆÔ!Ð!Ð!r#có*—t|j¦«‚r,)ÚNotImplementedErrorrÝ©ržrÛs  r$rÝzShaFile._deserialize²s€Ý! $Ô"3Ñ4Ô4Ð4r#có*—t|j¦«‚r,)rõrÌr¡s r$rÌzShaFile._serializeµs€Ý! $¤/Ñ2Ô2Ð2r#có€—t|d¦«5}| |¦«cddd¦«S#1swxYwYdS)zOpen a SHA file from disk.ÚrbN)rÚ	from_file)rmrRrªs   r$Ú	from_pathzShaFile.from_path¸s„€õT˜4Ñ
 Ô
 ð	$ AØ—=’= Ñ#Ô#ð	$ð	$ð	$ð	$ñ	$ô	$ð	$ð	$ð	$ð	$ð	$ð	$øøøð	$ð	$ð	$ð	$ð	$ð	$s‘3³7º7có’—	| |¦«}d|_|S#ttf$r}t	d¦«|‚d}~wwxYw)z'Get the contents of a SHA file on disk.Nzinvalid object header)ròrœÚ
IndexErrorrBr)rmrªrvrEs    r$rúzShaFile.from_file¾s^€ð	JØ—/’/ !Ñ$Ô$ˆC؈CŒH؈JøÝJÐ'ð	Jð	Jð	JÝ'Ð(?Ñ@Ô@ÀcÐIøøøøð	Jøøøs‚  A±AÁAcóŒ—t|¦«}|€td|z¦«‚|¦«}| ||¦«|S)zðCreates an object of the indicated type from the raw string given.

        Args:
          type_num: The numeric type of the object.
          string: The raw uncompressed contents.
          sha: Optional known sha for the object
        Nrf)rirjr»)r©r1r:rmrvs     r$Úfrom_raw_stringzShaFile.from_raw_stringÈsP€õ˜8Ñ$Ô$ˆØˆ;Ý Ð!AÀHÑ!LÑMÔMÐM؈c‰eŒeˆØ×Ò˜6 3Ñ'Ô'Ð'؈
r#cóŒ—t|¦«}|€td|z¦«‚|¦«}| ||¦«|S)zÿCreates an object of the indicated type from the raw chunks given.

        Args:
          type_num: The numeric type of the object.
          chunks: An iterable of the raw uncompressed contents.
          sha: Optional known sha for the object
        Nrf)rirjrÚ)r©rÛr:rmrvs     r$Úfrom_raw_chunkszShaFile.from_raw_chunksØsP€õ˜8Ñ$Ô$ˆØˆ;Ý Ð!AÀHÑ!LÑMÔMÐM؈c‰eŒeˆØ×Ò˜6 3Ñ'Ô'Ð'؈
r#cóD—|¦«}| |¦«|S)zCreate a ShaFile from a string.©r»)rmr1rvs   r$Úfrom_stringzShaFile.from_stringês(€ðˆc‰eŒeˆØ×Ò˜6Ñ"Ô"Ð"؈
r#cóF—t||d¦«€t|¦«‚dS)a:Check that the object has a given member variable.

        Args:
          member: the member variable to check for
          error_msg: the message for an error if the member is missing
        Raises:
          ObjectFormatException: with the given error_msg if member is
            missing or is None
        N)rOr)ržÚmemberr„s   r$Ú_check_has_memberzShaFile._check_has_memberñs,€õ4˜ Ñ&Ô&Ð.Ý'¨	Ñ2Ô2Ð2ð/Ð.r#cóò—|j}	| | ¦«¦«d|_|j}n"#t$r}t|¦«|‚d}~wwxYw||krt
||¦«‚dS)zûCheck this object for internal consistency.

        Raises:
          ObjectFormatException: if the object is malformed in some way
          ChecksumMismatch: if the object was created with a SHA that does
            not match its contents
        N)rÕrÝrÅrœÚ	Exceptionrr)ržÚold_shaÚnew_sharEs    r$Úcheckz
ShaFile.checkþs’€ð”'ˆð	6Ø×Ò˜d×0Ò0Ñ2Ô2Ñ3Ô3Ð3؈DŒIØ”gˆGˆGøÝð	6ð	6ð	6Ý'¨Ñ,Ô,°#Ð5øøøøð	6øøøàgÒÐÝ" 7¨GÑ4Ô4Ð4ðÐs‰5?¿
AÁ	AÁAcóP—t|j| ¦«¦«Sr,)rnr©Ú
raw_lengthr¡s r$rÄzShaFile._headers€Ý˜Tœ]¨D¯OªOÑ,=Ô,=Ñ>Ô>Ð>r#cój—ttt| ¦«¦«¦«S)z4Returns the length of the raw string of this object.)Úsumr¼r9rÅr¡s r$rzShaFile.raw_lengths&€å•3•s˜D×.Ò.Ñ0Ô0Ñ1Ô1Ñ2Ô2Ð2r#cóü—|j|jrht¦«}| | ¦«¦«| ¦«D]}| |¦«Œ||_|jS)z0The SHA1 object that is the name of this object.)rœrurÚupdaterÄrÅ)ržrrÇs   r$r:zShaFile.shast€àŒ9Ð Ô 9Ðå‘f”fˆGØNŠN˜4Ÿ<š<™>œ>Ñ*Ô*Ð*Ø×+Ò+Ñ-Ô-ð
&ð
&Ø—’˜uÑ%Ô%Ð%Ð%؈DŒIØŒyÐr#có—t|j¦«}|€td|jz¦«‚| |j| ¦«|j¦«S)z:Create a new copy of this SHA1 object from its raw string.Nzinvalid type num %d)rir©rjrÿrÎrÕ)ržr¸s  r$ÚcopyzShaFile.copy&sU€å  ¤Ñ/Ô/ˆ	ØÐÝ Ð!6¸¼Ñ!FÑGÔGÐGØ×(Ò(¨¬¸×8JÒ8JÑ8LÔ8LÈdÌgÑVÔVÐVr#cót—| ¦« ¦« d¦«S)zThe hex SHA of this object.rL)r:r¤rKr¡s r$rÕz
ShaFile.id-s,€ðxŠx‰zŒz×#Ò#Ñ%Ô%×,Ò,¨WÑ5Ô5Ð5r#có2—d|jj›d|j›dS)Nú<rƒú>)Ú	__class__rrÕr¡s r$Ú__repr__zShaFile.__repr__2s"€Ø74”>Ô*Ð7Ð7¨T¬WÐ7Ð7Ð7Ð7r#cóN—t|t¦«p|j|jkS)z3Check whether this object does not match the other.©r@rrÕ©ržÚothers  r$Ú__ne__zShaFile.__ne__5s#€å˜e¥WÑ-Ô-Ð-ÐD°´¸E¼HÒ1DÐDr#cóL—t|t¦«o|j|jkS)z1Return True if the SHAs of the two objects match.rrs  r$Ú__eq__zShaFile.__eq__9s €å˜%¥Ñ)Ô)ÐA¨d¬g¸¼Ò.AÐAr#cóZ—t|t¦«st‚|j|jkS)z9Return whether SHA of this object is less than the other.©r@rr?rÕrs  r$Ú__lt__zShaFile.__lt__=s(€å˜%¥Ñ)Ô)ð	݈OØŒw˜œÒ!Ð!r#cóZ—t|t¦«st‚|j|jkS)zDCheck whether SHA of this object is less than or equal to the other.r#rs  r$Ú__le__zShaFile.__le__Cs(€å˜%¥Ñ)Ô)ð	݈OØŒw˜%œ(Ò"Ð"r#r¥)r‹r,)7rrr r!r¦ÚboolÚ__annotations__rAr¯rrrršÚstaticmethodrr¹r¿r
rÈrÊrÅrÎrÑrÖrØÚObjectIDr»rÚrârèÚclassmethodrðròrŸrÝrÌrûrúrÿrrrrrÄrr:rr}rÕrlrrr!r$r&r"r#r$rrsg€€€€€€ØÐàA€IàÐÐÑØÐÐÑØ€M€MMؘD œKÔ(Ð(Ð(Ñ(Ø
˜$ Ð&Ô
'Ð'Ð'Ñ'àð¨hð¸9ðððñ„\ðð44ð4ð4ð4ð	ð	¸ð	ÀhÈuÄoð	ð	ð	ð	ð
ð
°#ð
¸uð
ð
ð
ð
ð	"˜t Eœ{ð	"ð	"ð	"ð	"ð.˜uð.ð.ð.ð.ð$˜5ð$ð$ð$ð$ðððð$ %ð$ð$ð$ð$ð)ð) 5ð)¨x¸Ô/Að)ÈTð)ð)ð)ð)ð>Bð
*ð
*ؘ5”kð
*Ø(0°Ô(:ð
*à	
ð
*ð
*ð
*ð
*ðððñ„\ðð
.ð
.ð
.ð
.ðð8 eð8°ð8ð8ð8ñ„[ð8ðððñ„[ðð)ð)ð)ð)ð5 4¨¤;ð5°4ð5ð5ð5ð5ð3˜D œKð3ð3ð3ð3ðð$ð$ñ„[ð$ð
ðJðJñ„[ðJðð
ð
ð
ñ„\ð
ðàFJððØðØ# Eœ{ðØ19¸(Ô1Cðððñ„\ðð"ððñ„[ðð3ð3ð3ð5ð5ð5ð5ð,?ð?ð?ð3˜Cð3ð3ð3ð3ð	ð	ð	ðWðWðWðð6ð6ñ„Xð6ð8˜#ð8ð8ð8ð8ðEðEðEðBðBðBð"ð"ð"ð#ð#ð#ð#ð#r#cóeZdZUdZdZdZdZeee	d<dˆfd„Z
d	„Zd
„Ze
eed¬¦«Zd
„Zdeefd„Zd„Zd„Ze
eed¬¦«Zed„¦«Zˆfd„Zdeefd„ZˆxZS)ÚBlobzA Git Blob object.r"sblobér¨rdNcód•—t¦« ¦«g|_d|_dS©NF)ÚsuperrŸr¨ru©ržrs €r$rŸz
Blob.__init__Ts/ø€Ý
‰Œ×ÒÑÔÐØˆÔØ$)ˆÔ!Ð!Ð!r#có*—| ¦«Sr,rÐr¡s r$Ú	_get_datazBlob._get_dataYs€Ø×!Ò!Ñ#Ô#Ð#r#có0—| |¦«dSr,r)ržÚdatas  r$Ú	_set_datazBlob._set_data\s€Ø×Ò˜DÑ!Ô!Ð!Ð!Ð!r#z*The text contained within the blob object.r{có—|jSr,©r¨r¡s r$Ú_get_chunkedzBlob._get_chunkedcó€ØÔ!Ð!r#rÛcó—||_dSr,r9rös  r$Ú_set_chunkedzBlob._set_chunkedfó€Ø#ˆÔÐÐr#có—|jSr,r9r¡s r$rÌzBlob._serializeir;r#có—||_dSr,r9rös  r$rÝzBlob._deserializelr>r#z>The text in the blob object, as chunks (not necessarily lines)cóx—t |¦«}t||¦«st|¦«‚|Sr,)rrûr@r)rmrRÚblobs   r$rûzBlob.from_pathus:€å× Ò  Ñ&Ô&ˆÝ˜$ Ñ$Ô$ð	%ݘtÑ$Ô$Ð$؈r#cóH•—t¦« ¦«dS)úCheck this object for internal consistency.

        Raises:
          ObjectFormatException: if the object is malformed in some way
        N)r1rr2s €r$rz
Blob.check|sø€õ	‰Œ
Š
‰Œˆˆˆr#có—|j}|sgSt|¦«dkr|d d¦«Sd}g}|D]±}| d¦«}t|¦«dkrF| |pd|dz¦«| |dd…¦«|d}Œpt|¦«dkr.|€| ¦«}Œš|| ¦«z
}Œ²|| |¦«|S)z^Return list of lines in this blob.

        This preserves the original line endings.
        rrTNr#r‹)Úchunkedr9Ú
splitlinesÚappendÚextendÚpop)ržrÛÚ	remainingÚretrÇÚliness      r$rGzBlob.splitlines„s€ð
”ˆØð	؈I݈v‰;Œ;˜!ÒÐØ˜!”9×'Ò'¨Ñ-Ô-Ð-؈	؈Øð
	-ð
	-ˆEØ×$Ò$ TÑ*Ô*ˆEݐ5‰zŒz˜AŠ~ˆ~Ø—
’
˜IÐ,¨°°a´Ñ8Ñ9Ô9Ð9Ø—
’
˜5  2 œ;Ñ'Ô'Ð'Ø! "œI		ݐU‘”˜q’ØÐ$Ø %§	¢	¡¤IIà §¢¡¤Ñ,IøØÐ ØJŠJyÑ!Ô!Ð!؈
r#r¥)rrr r!r¦rkr©rrAr(rŸr4r7r}r6r:r=rÌrÝrFr+rûrrGÚ
__classcell__©rs@r$r-r-Jsbø€€€€€€ØÐà€Ià€IØ€Hà˜”;ÐÐÑð*ð*ð*ð*ð*ð*ð
$ð$ð$ð"ð"ð"ðˆ8ؐ9Ð"Nðñô€Dð"ð"ð"ð$ 4¨¤;ð$ð$ð$ð$ð"ð"ð"ð$ð$ð$ðˆhØØØLðñô€Gðððñ„[ððððððð˜D œKððððððððr#r-rÛ©NNc#óžK—td |¦«¦«}d}d}d}d„}|D]W}| d¦«r||dd…z
}Œ%||||¦«fV—|dkrn1| dd¦«\}}ŒXd}||||¦«fV—d	V—|sd| ¦«fV—| ¦«dS)
aQParse a message with a list of fields and a body.

    Args:
      chunks: the raw chunks of the tag or commit object.
    Returns: iterator of tuples of (field, value), one per header line, in the
        order read from the text, possibly including duplicates. Includes a
        field named None for the freeform tag/commit text.
    r#NFcóH—|r| d¦«r
|dd…S|S)z"Strip the last newline from value.rŒNr‹)Úendswith)rws r$Ú_strip_last_newlinez+_parse_message.<locals>._strip_last_newline°s0€àð	U—^’^ EÑ*Ô*ð	ؘ˜"˜”:Ð؈r#rgrrŒTrP)rrSÚ
startswithr®r­Úclose)rÛrªÚkÚvÚeofrTÚlines       r$Ú_parse_messager[ s)èè€õ	—’˜Ñ Ô Ñ!Ô!€AØ€AØ€AØ
€CððððððˆØ?Š?˜4Ñ Ô ð
	)à
abb”‰MˆAˆAàˆ}àÐ-Ð-¨aÑ0Ô0Ð1Ð1Ð1Ð1ؐuŠ}ˆ}àØ—Z’Z  aÑ(Ô(‰FˆQðˆØˆ=ØÐ)Ð)¨!Ñ,Ô,Ð-Ð-Ð-Ð-ØÐÐÐàððQ—V’V‘X”XÐÐÐÐà‡G‚GI„I€I€I€Ir#c#óºK—|D]I\}}| d¦«}t||d¦«V—|dd…D]}d|zdzV—Œ
ŒJ|r
dV—|V—dSdS)NrŒrrrg)r®r˜)ÚheadersÚbodyÚfieldrwrMrZs      r$Ú_format_messager`Øs èè€Øð&ð&‰ˆˆuØ—’˜EÑ"Ô"ˆÝu˜e AœhÑ'Ô'Ð'Ð'Ð'ؘ!˜"˜"”Ið	&ð	&ˆDؘ‘+ Ñ%Ð%Ð%Ð%Ð%ð	&àðØˆˆˆØˆ
ˆ
ˆ
ˆ
ˆ
ððr#cól‡—eZdZUdZdZdZdZeee	d<dˆfd„Z
ed	„¦«Zˆfd
„Z
d„Zd„Zd
„Zd„Zeee¦«Zedd¦«Zedd¦«Zedd¦«Zedd¦«Zedd¦«Zedd¦«Zd deefd„Zd deeeddfd„ZˆxZS)!ÚTagzA Git Tag object.rrß)	Ú_tag_timezone_neg_utcÚ_nameÚ_object_shaÚ
_object_classÚ	_tag_timeÚ
_tag_timezoneÚ_taggerÚ_messageÚ
_signaturerirdNcóŽ•—t¦« ¦«d|_d|_d|_d|_d|_dSr0)r1rŸrirgrhrcrkr2s €r$rŸzTag.__init__÷sBø€Ý
‰Œ×ÒÑÔÐØˆŒ؈ŒØ!ˆÔØ%*ˆÔ"؈Œˆˆr#cóx—t |¦«}t||¦«st|¦«‚|Sr,)rrûr@r)rmr\Útags   r$rûz
Tag.from_pathÿs:€å×Ò Ñ)Ô)ˆÝ˜#˜sÑ#Ô#ð	(ݘhÑ'Ô'Ð'؈
r#có•—t¦« ¦«|j€J‚| dd¦«| dd¦«| dd¦«|jstd¦«‚t
|jd	¦«|jt|jd
¦«| dd¦«t|j¦«d}t|j¦«D]’\}}|tkr|td
¦«‚|tkr|tkrtd¦«‚|tkr|tkrtd¦«‚|t kr|tkrtd¦«‚|}Œ“dS)rDNrezmissing object sharfzmissing object typerdzmissing tag namezempty tag namezinvalid object shazinvalid taggerrgzmissing tag timezunexpected objectzunexpected typezunexpected tag namezunexpected tagger)r1rr¨rrdrr…rerir‘r•rgr[Ú_OBJECT_HEADERÚ_TYPE_HEADERÚ_TAG_HEADERÚ_TAGGER_HEADER)ržÚlastr_rsrs    €r$rz	Tag.checks˜ø€õ	‰Œ
Š
‰ŒˆØÔ!Ð-Ð-Ð-Ø×Ò˜}Ð.BÑCÔCÐCØ×Ò˜Ð0EÑFÔFÐFØ×Ò˜wÐ(:Ñ;Ô;Ð;àŒzð	:Ý'Ð(8Ñ9Ô9Ð9åTÔ%Ð';Ñ<Ô<Ð<àŒ<Ð#Ý˜4œ<Ð)9Ñ:Ô:Ð:à×Ò˜{Ð,>Ñ?Ô?Ð?ݐ4”>Ñ"Ô"Ð"àˆÝ& tÔ'9Ñ:Ô:ð		ð		‰HˆE1؝Ò&Ð&¨4Ð+;Ý+Ð,?Ñ@Ô@Ð@؝,Ò&Ð&¨4µ>Ò+AÐ+AÝ+Ð,=Ñ>Ô>Ð>؝+Ò%Ð%¨$µ,Ò*>Ð*>Ý+Ð,AÑBÔBÐB؝.Ò(Ð(¨Tµ[Ò-@Ð-@Ý+Ð,?Ñ@Ô@Ð@؈DˆDð		ð		r#c	ó:—g}| t|jf¦«| t|jjf¦«| t|jf¦«|jrj|j	€"| t|jf¦«nA| tt|j|j	|j|j
f¦«f¦«|j€
|j€d}n|jpd|jpdz}t!t#||¦«¦«S)Nr#)rHrprerqrfrkrrrdrirgrsÚformat_time_entryrhrcÚmessagerkÚlistr`)ržr]r^s   r$rÌzTag._serialize)s€ØˆØŠ¨Ô(8Ð9Ñ:Ô:Ð:ØŠ dÔ&8Ô&BÐCÑDÔDÐDØŠ T¤ZÐ0Ñ1Ô1Ð1ØŒ<ð
	ØŒ~Ð%Ø—’¥°´Ð=Ñ>Ô>Ð>Ð>à—’å&Ý)Ø œLØ œNØ!Ô/°Ô1KÐLñôðñ	ô	ð	ðŒ<РD¤OÐ$;؈DˆDà”LÐ' C¨D¬OÐ,B¸sÑCˆDÝ•O G¨TÑ2Ô2Ñ3Ô3Ð3r#có¶—d|_d|_d|_d|_t	|¦«D]+\}}|t
kr||_Œ|tkrBt|t¦«sJ‚t|¦«}|std|z¦«‚||_Œf|tkr||_Œy|tkr+t!|¦«\|_|_\|_|_Œ¯|€j|€d|_d|_ŒÂ	| t(¦«}|d|…|_||d…|_Œü#t*$r||_d|_YŒwxYwtd|z¦«‚dS)z&Grab the metadata attached to the tag.NFr¬zUnknown field %s)rirgrhrcr[rprerqr@rArirrfrrrdrsÚparse_time_entryrjrkÚindexÚBEGIN_PGP_SIGNATURErB)ržrÛr_rwr¸Úsig_idxs      r$rÝzTag._deserializeCs˜€àˆŒ؈ŒØ!ˆÔØ%*ˆÔ"Ý*¨6Ñ2Ô2ð	Hñ	H‰LˆE5؝Ò&Ð&Ø#(Ô Р؝,Ò&Ð&Ý! %­Ñ/Ô/Ð/Ð/Ð/Ý(¨Ñ/Ô/	Ø ðPÝ/Ð0FÈÑ0NÑOÔOÐOØ%.Ô"Ð"؝+Ò%Ð%Ø"”

؝.Ò(Ð(õ
% UÑ+Ô+ñ	Ø”LØ”NÙDTÔ'¨Ô)CÐ)CàØ=Ø$(D”MØ&*D”OOð:Ø"'§+¢+Õ.AÑ"BÔ"B˜ð
).¨h¨w¨h¬˜œ
Ø*/°°°¬/˜œ˜øõ&ð/ð/ð/Ø(-˜œ
Ø*.˜œ˜™ð/øøøõ,Ð,>ÀÑ,FÑGÔGÐGð?	Hð	HsÃ/D(Ä(EÅEcó—|j|jfS)z_Get the object pointed to by this tag.

        Returns: tuple of (object class, sha).
        )rfrer¡s r$Ú_get_objectzTag._get_objectjs€ð
Ô" DÔ$4Ð5Ð5r#có2—|\|_|_d|_dS©NT)rfreru©ržrws  r$Ú_set_objectzTag._set_objectqs €Ø16Ñ.ˆÔ	˜TÔ-Ø$(ˆÔ!Ð!Ð!r#rozThe name of this tagÚtaggerz3Returns the name of the person who created this tagÚtag_timezLThe creation timestamp of the tag.  As the number of seconds since the epochÚtag_timezonez!The timezone that tag_time is in.rwz the message attached to this tagÚ	signaturezOptional detached GPG signatureÚkeyidcó—ddl}| d¬¦«5}|‹| |¦«}| d|g¬¦«5}| | ¦«|jjjj¬¦«\|_	}ddd¦«n#1swxYwYnE| | ¦«|jjjj¬¦«\|_	}ddd¦«dS#1swxYwYdS©NrT)Úarmor)r‹Úsigners)Úmode)
ÚgpgÚContextÚget_keyÚsignrÎÚ	constantsÚsigrÚDETACHr‡©ržrˆrŽÚcÚkeyÚctxÚ
unused_results       r$r‘zTag.sign‡s{€Øˆ
ˆ
ˆ
à
[Š[˜tˆ[Ñ
$Ô
$ð	¨ØÐ Ø—i’i Ñ&Ô&Ø—[’[ t°c°U[Ñ;Ô;ð¸sØ47·H²HØ×*Ò*Ñ,Ô,Ø œ]Ô.Ô3Ô:ð5=ñ5ô5Ñ1D”N Mðððñôððððððøøøððððøð12·²Ø×&Ò&Ñ(Ô(¨s¬}Ô/@Ô/EÔ/Lð17ñ1ô1Ñ-” 
ð	ð	ð	ñ	ô	ð	ð	ð	ð	ð	ð	ð	øøøð	ð	ð	ð	ð	ð	ó7›0C;ÁABÂC;ÂB!	Â!C;Â$B!	Â%A	C;Ã;C?ÄC?Úkeyidscóê‡	—|j€dSddl}| ¦«5Š	‰	 | ¦«dt|j¦«…|j¬¦«\}}|rhˆ	fd„|D¦«}|D]8}|D]3}|jD])}|jr |j|jkrddd¦«dSŒ*Œ4Œ9|j	 
||||f¬¦«‚	ddd¦«dS#1swxYwYdS)a
Verify GPG signature for this tag (if it is signed).

        Args:
          keyids: Optional iterable of trusted keyids for this tag.
            If this tag is not signed by any key in keyids verification will
            fail. If not specified, this function only verifies that the tag
            has a valid signature.

        Raises:
          gpg.errors.BadSignatures: if GPG signature verification fails
          gpg.errors.MissingSignatures: if tag was not signed by a key
            specified in keyids
        Nr©r‡có:•—g|]}‰ |¦«‘ŒSr"©r©Ú.0r—r˜s  €r$ú
<listcomp>zTag.verify.<locals>.<listcomp>°ó%ø€Ð;Ð;Ð;¨S˜Ÿš CÑ(Ô(Ð;Ð;Ð;r#©Úresults)rkrŽrÚverifyrÎr9Ú
signaturesÚcan_signÚfprÚerrorsÚMissingSignatures)
ržr›rŽr6ÚresultÚkeysr—Úsubkeyr“r˜s
         @r$r¦z
Tag.verify—s½ø€ðŒ?Ð"ØˆFàˆ
ˆ
ˆ
à
[Š[‰]Œ]ð	Y˜cØŸ:š:Ø×"Ò"Ñ$Ô$Ð%<­¨D¬OÑ(<Ô(<Ð'<Ð%<Ô=Øœ/ð&ñô‰LˆD&ðð
YØ;Ð;Ð;Ð;°FÐ;Ñ;Ô;Øð'ð'CØ"&ð'ð'˜Ø#)Ô#4ð'ð'˜CØ%œð'°6´:ÀÄÒ3HÐ3HØ &  ð	Yð	Yð	Yñ	Yô	Yð	Yð	Yð	Yøð'ð'ð”j×2Ò2°6¸4È$ÐPVÈÐ2ÑXÔXÐXð
Yð	Yð	Yð	Yñ	Yô	Yð	Yð	Yð	Yð	Yð	Yð	Yð	Yøøøð	Yð	Yð	Yð	Yð	Yð	Ys£BC(Â8"C(Ã(C,Ã/C,r¥r,) rrr r!rkr©r¦rrAr(rŸr+rûrrÌrÝrrƒr}Úobjectr~ror„r…r†rwr‡rlr‘r	r¦rNrOs@r$rbrbãsØø€€€€€€ØÐà€IØ€Hð
€IðeŒ_ÐÐÑðððððððððñ„[ðð!ð!ð!ð!ð!ðF4ð4ð4ð4%Hð%Hð%HðN6ð6ð6ð)ð)ð)ðˆXk ;Ñ
/Ô
/€Fà Ð  Ð)?Ñ@Ô@€DØ
"Ð
"ØÐGñô€Fð%Ð$Øð	ñô€Hð
)Ð(ØÐ;ñô€Lð$Ð# IÐ/QÑRÔR€Gà%Ð% kÐ3TÑUÔU€Iðð˜( 3œ-ððððð YðY˜X h¨s¤mÔ4ðYÀðYðYðYðYðYðYðYðYr#rbcó—eZdZdZdefd„ZdS)Ú	TreeEntryz.Named tuple encapsulating a single tree entry.rRcóÀ—t|jt¦«std|z¦«‚t	tj||j¦«|j|j¦«S)z:Return a copy of this entry with the given path prepended.zExpected bytes for path, got %r)	r@rRrAr?r±Ú	posixpathrSrr:)ržrRs  r$Úin_pathzTreeEntry.in_path¼sO€å˜$œ)¥UÑ+Ô+ð	FÝÐ=ÀÑDÑEÔEÐEݝœ¨¨d¬iÑ8Ô8¸$¼)ÀTÄXÑNÔNÐNr#N)rrr r!rAr´r"r#r$r±r±¹s<€€€€€Ø8Ð8ðO˜EðOðOðOðOðOðOr#r±)rRrr:Fc#ó"K—d}t|¦«}||krõ| d|¦«}|||…}|r'| d¦«rtd|z¦«‚	t	|d¦«}n%#t
$r}td|z¦«|‚d}~wwxYw| d|¦«}||dz|…}	|d	z}||dz|…}
t|
¦«d
krtd¦«‚t
|
¦«}|	||fV—||k°ódSdS)zÎParse a tree text.

    Args:
      text: Serialized text to parse
    Returns: iterator of tuples of (name, mode, sha)

    Raises:
      ObjectFormatException: if the object was malformed in some way
    rrgó0zInvalid mode '%s'rêNrhréézSha has invalid length)r9r{rUrr¯rBr<)r½ÚstrictÚcountrcÚmode_endÚ	mode_textrrEÚname_endror:r;s            r$Ú
parse_treer¾ÃsVèè€ð
€EÝ
‰YŒY€FØ
&Š.ˆ.Ø—:’:˜d EÑ*Ô*ˆØ˜˜x˜Ô(ˆ	Øð	Ii×*Ò*¨4Ñ0Ô0ð	IÝ'Ð(;¸iÑ(GÑHÔHÐHð	Rݐy !Ñ$Ô$ˆDˆDøÝð	Rð	Rð	RÝ'Ð(;¸iÑ(GÑHÔHÈcÐQøøøøð	Røøøà—:’:˜e XÑ.Ô.ˆØH˜q‘L 8Ð+Ô,ˆØ˜2‘
ˆØ8˜a‘< %Ð'Ô(ˆÝˆs‰8Œ8rŠ>ˆ>Ý'Ð(@ÑAÔAÐAݘC‘”ˆØT˜6Ð"Ð"Ð"Ð"ð!&Š.ˆ.ˆ.ˆ.ˆ.ˆ.sÁ$A5Á5
BÁ?BÂBc#ó‚K—|D]9\}}}d|z d¦«dz|zdzt|¦«zV—Œ:dS)zŸSerialize the items in a tree to a text.

    Args:
      items: Sorted iterable over (name, mode, sha) tuples
    Returns: Serialized tree text as chunks
    z%04orLrgrhN)rKrF)r—rorr;s    r$Úserialize_treerÀâsmèè€ð$ð
ð
шˆdFà
d‰]×"Ò" 7Ñ+Ô+¨dÑ2°TÑ9¸EÑAÅJÈvÑDVÔDVÑVð	
ð	
ð	
ð	
ð
ð
r#Ú
name_orderc#óK—|rt}nt}t| ¦«|¬¦«D]S\}}|\}}t	|¦«}t|t¦«std|z¦«‚t|||¦«V—ŒTdS)aXIterate over a tree entries dictionary.

    Args:
      name_order: If True, iterate entries in order of their name. If
        False, iterate entries in tree order, that is, treat subtree entries as
        having '/' appended.
      entries: Dictionary mapping names to (mode, sha) tuples
    Returns: Iterator over (name, mode, hexsha)
    )r—zExpected bytes for SHA, got %rN)	Úkey_entry_name_orderÚ	key_entryÚsortedr—r¯r@rAr?r±)ÚentriesrÁÚkey_funcroÚentryrr;s       r$Úsorted_tree_itemsrÉïs¤èè€ððÝ'ˆˆåˆÝ˜gŸmšm™oœo°8Ð<Ñ<Ô<ð,ð,‰ˆˆe؉ˆˆfå4‰yŒyˆÝ˜&¥%Ñ(Ô(ð	GÝÐ<¸vÑEÑFÔFÐFݘ˜d FÑ+Ô+Ð+Ð+Ð+Ð+ð
,ð,r#cóN—|\}}tj|d¦«r|dz
}|S)zISort key for tree entry.

    Args:
      entry: (name, value) tuple
    ró/)r&ÚS_ISDIR)rÈrorws   r$rÄrÄs1€ðM€Tˆ5Ý„|E˜!”HÑÔðØ‰ˆØ€Kr#có—|dS)z&Sort key for tree entry in name order.rr")rÈs r$rÃrÃs€àŒ8€Or#úutf-8c	ó¨—|tjzrd}nd}d ||| d¦«| |d¦«¦«S)zÇPretty format tree entry.

    Args:
      name: Name of the directory entry
      mode: Mode of entry
      hexsha: Hexsha of the referenced object
    Returns: string describing the tree entry
    ÚtreerBz{:04o} {} {}	{}
rLÚreplace)r&ÚS_IFDIRÚformatrP)rorr;ÚencodingÚkinds     r$Úpretty_format_tree_entryrÖs]€ðdŒlÑðØˆˆàˆØ×&Ò&ØØ؏
Š
gÑÔØŠH˜iÑ(Ô(ñ	ôðr#có—eZdZdZdd„ZdS)ÚSubmoduleEncounteredz3A submodule was encountered while resolving a path.rdNcó"—||_||_dSr,)rRr:)ržrRr:s   r$rŸzSubmoduleEncountered.__init__/s€ØˆŒ	؈Œˆˆr#r¥)rrr r!rŸr"r#r$rØrØ,s.€€€€€Ø=Ð=ððððððr#rØc󰇗eZdZdZdZdZdZdˆfd„Zed„¦«Z	de
fd	„Zd
„Zdd„Z
dd„Zdefd
„Zd„Zd„Zdd„Zd„Zd„Zˆfd„Zd„Zd„Zd„ZˆxZS)ÚTreezA Git tree object.rrMÚ_entriesrdNcóV•—t¦« ¦«i|_dSr,)r1rŸrÜr2s €r$rŸz
Tree.__init__<s$ø€Ý
‰Œ×ÒÑÔÐØ8:ˆŒ
ˆ
ˆ
r#cóx—t |¦«}t||¦«st|¦«‚|Sr,)rrûr@r)rmr\rÐs   r$rûzTree.from_path@s:€å× Ò  Ñ*Ô*ˆÝ˜$ Ñ$Ô$ð	)ݘxÑ(Ô(Ð(؈r#có—||jvSr,©rÜ©ržros  r$Ú__contains__zTree.__contains__Gs€Øt”}Ð$Ð$r#có—|j|Sr,ràrás  r$Ú__getitem__zTree.__getitem__Js€ØŒ}˜TÔ"Ð"r#có6—|\}}||f|j|<d|_dS)aSet a tree entry by name.

        Args:
          name: The name of the entry, as a string.
          value: A tuple of (mode, hexsha), where mode is the mode of the
            entry as an integral type and hexsha is the hex SHA of the entry as
            a string.
        TN©rÜru)ržrorwrr;s     r$Ú__setitem__zTree.__setitem__Ms+€ð‰ˆˆfØ# V˜nˆŒ
dÑØ$(ˆÔ!Ð!Ð!r#có$—|j|=d|_dSrrærás  r$Ú__delitem__zTree.__delitem__Zs€ØŒM˜$ÐØ$(ˆÔ!Ð!Ð!r#có*—t|j¦«Sr,)r9rÜr¡s r$Ú__len__zTree.__len__^s€Ý4”=Ñ!Ô!Ð!r#có*—t|j¦«Sr,)ÚiterrÜr¡s r$Ú__iter__z
Tree.__iter__as€ÝD”MÑ"Ô"Ð"r#có,—||f|j|<d|_dS)a*Add an entry to the tree.

        Args:
          mode: The mode of the entry as an integral type. Not all
            possible modes are supported by git; see check() for details.
          name: The name of the entry, as a string.
          hexsha: The hex SHA of the entry as a string.
        TNræ)ržrorr;s    r$ÚaddzTree.addds"€ð# F˜lˆŒ
dÑØ$(ˆÔ!Ð!Ð!r#Fcó,—t|j|¦«S)z½Iterate over entries.

        Args:
          name_order: If True, iterate in name order instead of tree
            order.
        Returns: Iterator over (name, mode, sha) tuples
        )rÉrÜ)ržrÁs  r$Ú	iteritemszTree.iteritemsps€õ! ¤°
Ñ;Ô;Ð;r#cóD—t| ¦«¦«S)zeReturn the sorted entries in this tree.

        Returns: List with (name, mode, sha) tuples
        )rxròr¡s r$r—z
Tree.itemszs€õ
D—N’NÑ$Ô$Ñ%Ô%Ð%r#có´—	td |¦«¦«}n"#t$r}t|¦«|‚d}~wwxYwd„|D¦«|_dS)zGrab the entries in the tree.r#Ncó —i|]\}}}|||f“ŒSr"r")r¡Únr)Úss    r$ú
<dictcomp>z%Tree._deserialize.<locals>.<dictcomp>Šs$€ÐAÐAÐA¡w q¨!¨Q˜˜Q ˜FÐAÐAÐAr#)r¾rSrBrrÜ)ržrÛÚparsed_entriesrEs    r$rÝzTree._deserializesm€ð	6Ý'¨¯ª°Ñ(8Ô(8Ñ9Ô9ˆNˆNøÝð	6ð	6ð	6Ý'¨Ñ,Ô,°#Ð5øøøøð	6øøøð
BÐA°.ÐAÑAÔAˆŒ
ˆ
ˆ
s‚"%¥
A¯?¿Ac󨕗t¦« ¦«|j€J‚d}tjdztjdztjtjttjdzf}td 	|j¦«d¦«D]´\}}}t|d|z¦«d|vs|d	vr&td
| dd¦«z¦«‚||vrtd
|z¦«‚|||ff}|rMt|¦«t|¦«krtd¦«‚||dkrtd|z¦«‚|}ŒµdS)rDNiíi¤i´r#Tzinvalid sha %srË)r#ó.s..s.gitzinvalid name %srÎrÑzinvalid mode %06ozentries not sortedrzduplicate entry %s)r1rr¨r&ÚS_IFREGÚS_IFLNKrÒr(r¾rSr…rrPrÄ)ržrtÚ
allowed_modesrorr:rÈrs       €r$rz
Tree.checkŒspø€õ	‰Œ
Š
‰ŒˆØÔ!Ð-Ð-Ð-؈åŒL˜5Ñ ÝŒL˜5Ñ ÝŒLÝŒLÝåŒL˜5Ñ ð
ˆ
õ *¨#¯(ª(°4Ô3EÑ*FÔ*FÈÑMÔMð	ð	‰OˆD$˜Ý˜Ð.°Ñ4Ñ5Ô5Ð5ؐtˆ|ˆ|˜tÐ'BÐBÐBÝ+Ø%¨¯ª°G¸YÑ(GÔ(GÑGñôðð˜=Ð(Ð(Ý+Ð,?À$Ñ,FÑGÔGÐGà˜D #˜;Ð'ˆEØð
MݘT‘?”?¥Y¨uÑ%5Ô%5Ò5Ð5Ý/Ð0DÑEÔEÐEؘ4 œ7’??Ý/Ð0DÀtÑ0KÑLÔLÐL؈DˆDð!	ð	r#có^—tt| ¦«¦«¦«Sr,)rxrÀròr¡s r$rÌzTree._serialize°s"€Ý•N 4§>¢>Ñ#3Ô#3Ñ4Ô4Ñ5Ô5Ð5r#có®—g}| ¦«D]*\}}}| t|||¦«¦«Œ+d |¦«S)NÚ)ròrHrÖrS)ržr½rorr;s     r$rØzTree.as_pretty_string³s[€ØˆØ"&§.¢.Ñ"2Ô"2ð	Fð	FÑˆD$˜ØKŠKÕ0°°t¸VÑDÔDÑEÔEÐEÐE؏wŠwt‰}Œ}Ðr#cób—| d¦«}|j}d}t|¦«D]~\}}|sŒ|:t|¦«r+t	d |d|…¦«|¦«‚||¦«}t
|t¦«st|¦«‚||\}}Œ||fS)zÓLook up an object in a Git tree.

        Args:
          lookup_obj: Callback for retrieving object by SHA1
          path: Path to lookup
        Returns: A tuple of (mode, SHA) of the resulting path.
        rËN)	r®rÕÚ	enumerater*rØrSr@rÛr)	ržÚ
lookup_objrRÚpartsr:rÚiÚprvs	         r$Úlookup_pathzTree.lookup_path¹sĀð—
’
˜4Ñ Ô ˆØŒgˆØˆÝ˜eÑ$Ô$ð	ð	‰DˆAˆqØð
ØØÐ¥K°Ñ$5Ô$5ÐÝ*¨4¯9ª9°U¸2¸A¸2´YÑ+?Ô+?ÀÑEÔEÐEؐ*˜S‘/”/ˆCݘc¥4Ñ(Ô(ð
(Ý" 3Ñ'Ô'Ð'ؘAœ‰IˆD##ؐSˆyÐr#r¥©F)rrr r!rkr©r¦rŸr+rûr'rârärçrér¯rërîrðròr—rÝrrÌrØrrNrOs@r$rÛrÛ4stø€€€€€ØÐà€IØ€Hà€Ið;ð;ð;ð;ð;ð;ðððñ„[ðð% Dð%ð%ð%ð%ð#ð#ð#ð)ð)ð)ð)ð)ð)ð)ð)ð"˜ð"ð"ð"ð"ð#ð#ð#ð
)ð
)ð
)ð<ð<ð<ð<ð&ð&ð&ð	Bð	Bð	Bð"ð"ð"ð"ð"ðH6ð6ð6ððððððððððr#rÛcóN—|ddvr&tdjdit¦«¤Ž¦«‚|dd…}t|dd…¦«}|dkr|}|dko|dk}|dkrdpd}t	|¦«}t|dz¦«}|dz}||d	z|d
zzz|fS)aParse a timezone text fragment (e.g. '+0100').

    Args:
      text: Text to parse.
    Returns: Tuple with timezone as seconds difference to UTC
        and a boolean indicating whether this was a UTC timezone
        prefixed with a negative sign (-0000).
    rs+-z(Timezone must start with + or - ({text})Nró-r‹édéé<r")rBrÓÚvarsr¯Úabs)r½r‘ÚoffsetÚunnecessary_negative_timezoneÚsignumÚhoursÚminutess       r$Úparse_timezonerÐs׀ðˆA„weÐÐÝÐJÐCÔJÐTÐTÍTÉVÌVÐTÐTÑUÔUÐUؐŒ8€DÝ
abb”‰]Œ]€F؈t‚|€|ؐˆØ$*¨a¢KÐ$@°D¸D²LÐ!ؐqŠjÐ
 ˜bÐ
% A€FÝ
‰[Œ[€FÝ˜‘ÑÔ€Eؐs‰l€Gà%˜$‘, ¨2¡Ñ-Ñ.Ø%ððr#cóš—|dzdkrtd¦«‚|dks|rd}|}nd}d||dz|dzdzfz d¦«S)	aFormat a timezone for Git serialization.

    Args:
      offset: Timezone offset as seconds difference to UTC
      unnecessary_negative_timezone: Whether to use a minus sign for
        UTC or positive timezones (-0000 and --700 rather than +0000 / +0700).
    rrz#Unable to handle non-minute offset.ú-ú+z
%c%02d%02dr
rL)rBrK)rrr‘s   r$Úformat_timezonerísp€ð{aÒÐÝÐ>Ñ?Ô?Ð?Ø
‚z€zÐ2€z؈ؐˆˆàˆØ˜D &¨4¡-°&¸2±+ÀÑ1CÐDÑD×LÒLÈWÑUÔUÐUr#cóX—	| d¦«}n#t$r|ddfcYSwxYw	|d|dz…}||dzd…}| dd¦«\}}t|¦«}t	|¦«\}}n"#t$r}	t|	¦«|	‚d}	~	wwxYw||||ffS)zóParse event.

    Args:
      value: Bytes representing a git commit/tag line
    Raises:
      ObjectFormatException in case of parsing error (malformed
      field date)
    Returns: Tuple of (author, time, (timezone, timezone_neg_utc))
    s> Nr0rrrMrg)ÚrindexrBrZr¯rr)
rwr[Úpersonr`ÚtimetextÚtimezonetextÚtimeÚtimezoneÚtimezone_neg_utcrEs
          r$rzrzÿsì€ð,؏lŠl˜5Ñ!Ô!ˆˆøÝð,ð,ð,ؐt˜]Ð+Ð+Ð+Ð+ð,øøøð2ؐq˜3 ™7{Ô#ˆØS˜1‘WYYÔˆØ!%§¢¨T°1Ñ!5Ô!5ш,ݐ8‰}Œ}ˆÝ%3°LÑ%AÔ%AÑ"ˆÐ"Ð"øÝð2ð2ð2Ý# CÑ(Ô(¨cÐ1øøøøð2øøøà4˜(Ð$4Ð5Ð5Ð5s$‚˜*©*®ABÂ
B"Â
BÂB"có˜—|\}}d |t|¦« d¦«t||¦«g¦«S)zFormat an event.rgrL)rSrlrKr)rr Ú
timezone_infor!r"s     r$rvrvsL€à#0Ñ €XÐØ9Š9Ø	•T‘”×!Ò! 'Ñ*Ô*­O¸HÐFVÑ,WÔ,WÐXñôðr#c	óL—tjdt¦«g}g}d}d}d}d}g}d}d}	t|¦«D]Þ\}
}|
tkr|}Œ|
t
kr| |¦«Œ4|
tkrt|¦«}ŒO|
tkrt|¦«}Œj|
tkr|}Œx|
tkr1| t 
|dz¦«¦«Œ´|
tkr|}	ŒÂ|
€|}ŒÇ| |
|f¦«Œß|||||||	||f	S)zÄParse a commit object from chunks.

    Args:
      chunks: Chunks to parse
    Returns: Tuple of (tree, parents, author_info, commit_info,
        encoding, mergetag, gpgsig, message, extra)
    z$parse_commit will be removed in 0.22N©NNrPrŒ)ÚwarningsÚwarnÚDeprecationWarningr[Ú_TREE_HEADERÚ_PARENT_HEADERrHÚ_AUTHOR_HEADERrzÚ_COMMITTER_HEADERÚ_ENCODING_HEADERÚ_MERGETAG_HEADERrbrÚ_GPGSIG_HEADER)rÛÚparentsr¶rÐÚauthor_infoÚcommit_inforÔÚmergetagrwÚgpgsigr_rws            r$Úparse_commitr6 sg€õ
„MÐ8Õ:LÑMÔMÐMØ€GØ€EØ€DØ,€KØ,€KØ€HØ€HØ€GØ
€Få& vÑ.Ô.ð)ð)‰ˆˆuà•LÒ Ð ØˆDˆDØ
•nÒ
$Ð
$ØNŠN˜5Ñ!Ô!Ð!Ð!Ø
•nÒ
$Ð
$Ý*¨5Ñ1Ô1ˆKˆKØ
Õ'Ò
'Ð
'Ý*¨5Ñ1Ô1ˆKˆKØ
Õ&Ò
&Ð
&؈HˆHØ
Õ&Ò
&Ð
&ØOŠOCŸOšO¨E°E©MÑ:Ô:Ñ;Ô;Ð;Ð;Ø
•nÒ
$Ð
$؈FˆFØ
ˆ]؈GˆGàLŠL˜% ˜Ñ(Ô(Ð(Ð(àØØØØØØØØ
ð
ð
r#có쇗eZdZdZdZdZdZd,ˆfd„Zed„¦«Z	d	„Z
ˆfd
„Zd-dee
fd„Zd-d
eee
fd„Zd„Zedd¦«Zd„Zd„Zeeed¬¦«Zd„Zeed¬¦«Zedd¦«Zedd¦«Zedd¦«Zedd¦«Zed d!¦«Zed"d#¦«Zed$d%¦«Z ed&d'¦«Z!ed(d)¦«Z"ed*d+¦«Z#ˆxZ$S).ÚCommitzA git commit object.scommitr)Ú_parentsÚ	_encodingÚ_extraÚ_author_timezone_neg_utcÚ_commit_timezone_neg_utcÚ_commit_timeÚ_author_timeÚ_author_timezoneÚ_commit_timezoneÚ_authorÚ
_committerÚ_treerjÚ	_mergetagÚ_gpgsigrdNc󪕗t¦« ¦«g|_d|_g|_d|_g|_d|_d|_dSr0)	r1rŸr9r:rErFr;r<r=r2s €r$rŸzCommit.__init__lsRø€Ý
‰Œ×ÒÑÔÐØ%'ˆŒ
؈ŒØ$&ˆŒØˆŒØ13ˆŒØ(-ˆÔ%Ø(-ˆÔ%Ð%Ð%r#cóx—t |¦«}t||¦«st|¦«‚|Sr,)rrûr@r)rmrRÚcommits   r$rûzCommit.from_pathvs:€å×"Ò" 4Ñ(Ô(ˆÝ˜& #Ñ&Ô&ð	'Ý  Ñ&Ô&Ð&؈
r#có—g|_g|_d|_d}d}d|_g|_d|_d|_t|¦«D]
\}}|tkr||_Œ|tkr|€J‚|j 
|¦«ŒC|tkrt|¦«}Œ^|tkrt|¦«}Œy|tkr||_ŒŒ|tkr:|€J‚|j 
t  |dz¦«¦«ŒÑ|t$kr||_Œä|€||_Œî|j 
||f¦«Œ|\|_|_\|_|_|\|_|_\|_|_dS)Nr&rŒ)r9r;rDr:rErjrFr[r*r+rHr,rzr-r.r/rbrr0rBr?r@r<rCr>rAr=)ržrÛr2r3r_rws      r$rÝzCommit._deserialize}s°€ØˆŒ
؈ŒØˆŒ
Ø0ˆØ0ˆØˆŒØˆŒØˆŒ
؈Œå*¨6Ñ2Ô2ð	3ñ	3‰LˆE5àÒ$Ð$Ø"”

؝.Ò(Ð(ØÐ(Ð(Ð(Ø”
×$Ò$ UÑ+Ô+Ð+Ð+؝.Ò(Ð(Ý.¨uÑ5Ô5ØÕ+Ò+Ð+Ý.¨uÑ5Ô5ØÕ*Ò*Ð*Ø!&”ØÕ*Ò*Ð*ØÐ(Ð(Ð(Ø”×%Ò%¥c§o¢o°e¸e±mÑ&DÔ&DÑEÔEÐEÐE؝.Ò(Ð(Ø$”ØØ %”

à”×"Ò" E¨5 >Ñ2Ô2Ð2Ñ2ð
ñ		
ØŒLØÔÙBˆTÔ
" DÔ$Að
ñ		
ØŒOØÔÙBˆTÔ
" DÔ$AÐ$AÐ$Ar#cóè•—t¦« ¦«|j€J‚| dd¦«| dd¦«| dd¦«| dd	¦«| d
d¦«|jD]}t|d¦«Œt|jd
¦«t|jd¦«t|j	d¦«t|j¦«t|j¦«d}t|j¦«D]Á\}}|tkr|td¦«‚|t kr|t tfvrtd¦«‚|t"kr|tt fvrtd¦«‚|t$kr|t"krtd¦«‚|t&kr|t$krtd¦«‚|}ŒÂdS)rDNrDzmissing treerBzmissing authorrCzmissing committerr?zmissing author timer>zmissing commit timezinvalid parent shazinvalid tree shazinvalid authorzinvalid committerzunexpected treezunexpected parentzunexpected authorzunexpected committerzunexpected encoding)r1rr¨rr9r…rDr‘rBrCr•r?r>r[r*rr+r,r-r.)ržÚparentrtr_rsrs     €r$rzCommit.checkªsø€õ	‰Œ
Š
‰ŒˆØÔ!Ð-Ð-Ð-Ø×Ò˜w¨Ñ7Ô7Ð7Ø×Ò˜yÐ*:Ñ;Ô;Ð;Ø×Ò˜|Ð-@ÑAÔAÐAØ×Ò˜~Ð/DÑEÔEÐEØ×Ò˜~Ð/DÑEÔEÐEà”mð	7ð	7ˆFÝ˜Ð!5Ñ6Ô6Ð6Ð6ݐT”ZÐ!3Ñ4Ô4Ð4åt”|Ð%5Ñ6Ô6Ð6ݐt”Ð(;Ñ<Ô<Ð<å4Ô$Ñ%Ô%Ð%ݐ4Ô$Ñ%Ô%Ð%àˆÝ& tÔ'9Ñ:Ô:ð	ð	‰HˆE1؝Ò$Ð$¨Ð)9Ý+Ð,=Ñ>Ô>Ð>؝.Ò(Ð(¨TÝÝð:ð.ð.õ,Ð,?Ñ@Ô@Ð@؝.Ò(Ð(¨TÝÝð:ð.ð.õ,Ð,?Ñ@Ô@Ð@ØÕ+Ò+Ð+°½Ò0FÐ0FÝ+Ð,BÑCÔCÐCØÕ*Ò*Ð*¨tÕ7HÒ/HÐ/HÝ+Ð,AÑBÔBÐB؈DˆDð#	ð	r#rˆcó—ddl}| d¬¦«5}|‹| |¦«}| d|g¬¦«5}| | ¦«|jjjj¬¦«\|_	}ddd¦«n#1swxYwYnE| | ¦«|jjjj¬¦«\|_	}ddd¦«dS#1swxYwYdSrŠ)
rŽrrr‘rÎr’r“rr”r5r•s       r$r‘zCommit.signØs{€Øˆ
ˆ
ˆ
à
[Š[˜tˆ[Ñ
$Ô
$ð	¨ØÐ Ø—i’i Ñ&Ô&Ø—[’[ t°c°U[Ñ;Ô;ð¸sØ14·²Ø×*Ò*Ñ,Ô,Ø œ]Ô.Ô3Ô:ð2:ñ2ô2Ñ.D”K ðððñôððððððøøøððððøð./¯VªVØ×&Ò&Ñ(Ô(¨s¬}Ô/@Ô/EÔ/Lð.4ñ.ô.Ñ*”˜]ð	ð	ð	ñ	ô	ð	ð	ð	ð	ð	ð	ð	øøøð	ð	ð	ð	ð	ð	ršr›cóø‡
—|j€dSddl}| ¦«5Š
| ¦«}d|_d|_‰
 | ¦«|j¬¦«\}}|rhˆ
fd„|D¦«}|D]8}|D]3}|jD])}	|jr |j	|	j	krddd¦«dSŒ*Œ4Œ9|j
 ||||f¬¦«‚	ddd¦«dS#1swxYwYdS)aVerify GPG signature for this commit (if it is signed).

        Args:
          keyids: Optional iterable of trusted keyids for this commit.
            If this commit is not signed by any key in keyids verification will
            fail. If not specified, this function only verifies that the commit
            has a valid signature.

        Raises:
          gpg.errors.BadSignatures: if GPG signature verification fails
          gpg.errors.MissingSignatures: if commit was not signed by a key
            specified in keyids
        Nrrcó:•—g|]}‰ |¦«‘ŒSr"rŸr s  €r$r¢z!Commit.verify.<locals>.<listcomp>r£r#r¤)rFrŽrrr5r¦rÎr§r¨r©rªr«)ržr›rŽÚself_without_gpgsigr6r¬r­r—r®r“r˜s          @r$r¦z
Commit.verifyèsÅø€ðŒ<ÐØˆFàˆ
ˆ
ˆ
à
[Š[‰]Œ]ð	Y˜cØ"&§)¢)¡+¤+ÐØ*.ÐÔ'Ø)-ÐÔ&ØŸ:š:Ø#×1Ò1Ñ3Ô3Øœ,ð&ñô‰LˆD&ðð
YØ;Ð;Ð;Ð;°FÐ;Ñ;Ô;Øð'ð'CØ"&ð'ð'˜Ø#)Ô#4ð'ð'˜CØ%œð'°6´:ÀÄÒ3HÐ3HØ &  ð	Yð	Yð	Yñ	Yô	Yð	Yð	Yð	Yøð'ð'ð”j×2Ò2°6¸4È$ÐPVÈÐ2ÑXÔXÐXð
Yð	Yð	Yð	Yñ	Yô	Yð	Yð	Yð	Yð	Yð	Yð	Yð	Yøøøð	Yð	Yð	Yð	Yð	Yð	Ys£BC/Â?"C/Ã/C3Ã6C3c	ó€—g}t|jt¦«r|jjn|j}| t
|f¦«|jD]}| t|f¦«Œ| tt|j
|j|j|j
f¦«f¦«| tt|j|j|j|jf¦«f¦«|jr!| t(|jf¦«|jD]8}| t,| ¦«dd…f¦«Œ9| |j¦«|jr!| t6|jf¦«t9t;||j¦«¦«S)Nr‹)r@rDrÛrÕrHr*r9r+r,rvrBr?r@r<r-rCr>rAr=rÔr.r4r/rÎrIr;r5r0rxr`rj)ržr]Ú
tree_bytesrr4s     r$rÌzCommit._serializes­€ØˆÝ&0°´½TÑ&BÔ&BÐRT”Z”]]ÈÌ
ˆ
ØŠ jÐ1Ñ2Ô2Ð2Ø”ð	0ð	0ˆAØNŠNN¨AÐ.Ñ/Ô/Ð/Ð/؏ŠåÝ!Ø”LØÔ%ØÔ*¨DÔ,IÐJñôð
ñ		
ô		
ð		
ð	Šå!Ý!Ø”OØÔ%ØÔ*¨DÔ,IÐJñôð
ñ		
ô		
ð		
ðŒ=ð	>ØNŠNÕ,¨d¬mÐ<Ñ=Ô=Ð=Øœ
ð	Nð	NˆHØNŠNÕ,¨h×.DÒ.DÑ.FÔ.FÀsÈÀsÔ.KÐLÑMÔMÐMÐMØŠt”{Ñ#Ô#Ð#ØŒ;ð	:ØNŠNN¨D¬KÐ8Ñ9Ô9Ð9Ý•O G¨T¬]Ñ;Ô;Ñ<Ô<Ð<r#rÐz%Tree that is the state of this commitcó—|jS)z(Return a list of parents of this commit.)r9r¡s r$Ú_get_parentszCommit._get_parents1s
€àŒ}Ðr#có"—d|_||_dS)z%Set a list of parents of this commit.TN)rur9r‚s  r$Ú_set_parentszCommit._set_parents5s€à$(ˆÔ!؈Œ
ˆ
ˆ
r#z&Parents of this commit, by their SHA1.r{cóH—tjdtd¬¦«|jS)z%Return extra settings of this commit.z6Commit.extra is deprecated. Use Commit._extra instead.rM)Ú
stacklevel)r'r(r)r;r¡s r$Ú
_get_extrazCommit._get_extra@s.€åŒ
ØDÝØð	
ñ	
ô	
ð	
ð
Œ{Ðr#zæExtra header fields not understood (presumably added in a newer version of git). Kept verbatim so the object can be correctly reserialized. For private commit metadata, use pseudo-headers in Commit.message, rather than this field.Úauthorz$The name of the author of the commitÚ	committerz'The name of the committer of the commitrwzThe commit messageÚcommit_timezFThe timestamp of the commit. As the number of seconds since the epoch.Úcommit_timezonezThe zone the commit time is inÚauthor_timezOThe timestamp the commit was written. As the number of seconds since the epoch.Úauthor_timezonez'Returns the zone the author time is in.rÔzEncoding of the commit message.r4zAssociated signed tag.r5zGPG Signature.r¥r,)%rrr r!rkr©r¦rŸr+rûrÝrrrlr‘r	r¦rÌr~rÐrTrVr}r1rYr¶rZr[rwr\r]r^r_rÔr4r5rNrOs@r$r8r8TsZø€€€€€ØÐà€IØ€Hð€Ið$.ð.ð.ð.ð.ð.ðððñ„[ðð+ð+ð+ðZ*ð*ð*ð*ð*ð\ð˜( 3œ-ððððð "Yð"Y˜X h¨s¤mÔ4ð"Yð"Yð"Yð"YðH!=ð!=ð!=ðF!Ð  Ð)PÑQÔQ€Dððððððð
ˆhØØØ4ðñô€Gðððð
ˆHØð
Dð
ñ
ô
€Eð#Ð
" 8Ð-SÑ
TÔ
T€Fà%Ð%ØÐ>ñô€Ið$Ð# IÐ/CÑDÔD€Gà'Ð'ØØSñô€Kð
,Ð+ØÐ;ñô€Oð(Ð'Øð	#ñô€Kð,Ð+ØÐDñô€Oð%Ð$ ZÐ1RÑSÔS€Hà$Ð$ ZÐ1IÑJÔJ€Hà
"Ð
" 8Ð-=Ñ
>Ô
>€F€F€F€F€Fr#r8r)r¾rÉr,r	)rÎ)gr!r7rQr³r&r'r-ÚcollectionsrÚhashlibrÚiorÚtypingrrrr	r
rrr
rrrªrrrrrrrrUrÚ_hashlibrÚZERO_SHAr*r+r,r-r.r/r0rprqrrrsr(r“r|rAr*rr*r4r<rFrIrVrar¯rnrlr~rir…r‘r•r˜ršrr-r[r`rbr±r¾rÀr'rÉrÄrÃrÖr	rØrÛrrrzrvr6r8ÚOBJECT_CLASSESrr(rmrkr©Ú_parse_tree_pyÚ_sorted_tree_items_pyÚdulwich._objectsÚImportErrorr"r#r$ú<module>rksæðð,"Ð!Ð!à€€€Ø	€	€	€	ØÐÐÐØ€€€Ø€€€Ø€€€Ø"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐØÐÐÐÐÐðððððððððððððððððððððððððððððððððððððððððððÐÐÐÐÐàðØÐÐÐÐÐà€ð€Ø€Ø€Ø ÐØÐØÐØ€ð€Ø€؀؀ð€ð€à6Ðð€ð6ð6ð6ð6ð6Ð,ñ6ô6ð6ð)ð)ð)ððððððð/ð/ð/ðððð
)ð
)ð
)ð
ð
ð
ðF˜CðF¨ðF°ðFðFðFðFð
-ð
- ð
-°¸´
ð
-ð
-ð
-ð
-ð%u˜U C˜ZÔ(ð%¨X°d¸9´oÔ-Fð%ð%ð%ð%ð
:ð
:ð
:ð/˜Uð/¨sð/°tð/ð/ð/ð/ð0RðRðRð$ð$ð$ð
,ð,ð,ð,ð,ñ,ô,ð,ð,t#ðt#ðt#ðt#ðt#ñt#ôt#ðt#ðn	SðSðSðSðSˆ7ñSôSðSðl5ØUŒOð5à
ˆeE˜*Ô% u¨X°e¬_¸eÐ-CÔ'DÐDÔEÔFð5ð5ð5ð5ðpðððSYðSYðSYðSYðSYˆ'ñSYôSYðSYðlOðOðOðOðO

˜;Ð(?Ð(?Ð(?Ñ@Ô@ñOôOðOð#ð#ð#ð#ð>

ð

ð

ð,¨4ð,ð,ð,ð,ð.	˜ð	ð	ð	ð	ðððð
ðÀcððððð*ðððð˜9ñôððYðYðYðYðYˆ7ñYôYðYðxððð:VðVðVðVð$6ð6ð6ð2ððð1ð1ð1ðh\?ð\?ð\?ð\?ð\?ˆWñ\?ô\?ð\?ð@	ØØØð	€ð57€	ˆ4e˜SjÔ! 4¨¤=Ð0Ô1Ð6Ð6Ñ6àð"ð"€CØ"€IˆcŒmÑØ!€IˆcŒlÑÐð€Ø)Ðð	à>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øØð	ð	ð	Ø€D€Dð	øøøsÈHÈHÈH