python (3.12.0)

(root)/
lib/
python3.12/
__pycache__/
_pydatetime.cpython-312.opt-1.pyc

ˑeeh	ldZdZddlZddlZddlZddlmZ	dZ
dZdZdZ
d	Zgd
ZdgZdZeddD]Zej'eeez
Z[[dZd
ZdZdZdZedZedZedZdZgdZgdZdZdEdZ dFdZ!dZ"dZ#dZ$dZ%gdZ&dZ'd Z(d!Z)d"Z*d#Z+d$Z,d%Z-d&Z.d'Z/d(Z0Gd)d*Z1e1d+e1_2e1d,d-d.d.d/0e1_3e1d1e1_4Gd2d3Z5e5Z6e5ddde5_2e5dd4d5e5_3e1d6e5_4Gd7d8Z7Gd9d:e8Z9e9Z:[9e7Z;Gd;d<ZeZ<eddde_2ed-d.d.d/e_3e1d1e_4Gd=d>e5Z=e=ddde=_2e=dd4d5d-d.d.d/e=_3e1d1e=_4d?Z>Gd@dAe7Z?e?je1dxZAe?_Be?je1d-d.Be?_2e?je1d-d.Be?_3e=dCdde?jDZCy)GzConcrete date/time and related types.

See http://www.iana.org/time-zones/repository/tz-link.html for
time zone and DST data sources.
)	datedatetimetime	timedeltatimezonetzinfoMINYEARMAXYEARUTCN)indexc"||k(rdS||kDrdSdS)Nrxys  ?/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/_pydatetime.py_cmprsQ1.QA.B.c>|jj}|dk(ry|S)N_pydatetimer)	__class__
__module__)selfmodule_names  r_get_class_modulers"..++Km#rri'i۹7)
rrrr rrr rr rrc:|dzdk(xr|dzdk7xs|dzdk(S)zyear -> 1 if leap year, else 0.rdr)years r_is_leapr&1s*!8q=AdSjAo@qArc:|dz
}|dz|dzz|dzz
|dzzS)z2year -> number of days before January 1st of year.rmr"r#r$r)r%rs  r_days_before_yearr)5s/qAS51a4<!S& 1c6))rc6|dk(rt|ryt|S)z9year, month -> number of days in that month in that year.)r&_DAYS_IN_MONTHr%months  r_days_in_monthr0:s
zhtn%  rc:t||dkDxrt|zS)zCyear, month -> number of days in year preceding first day of month.r+)_DAYS_BEFORE_MONTHr&r.s  r_days_before_monthr3As!e$	(DhtnEErcPt||}t|t||z|zS)z>year, month, day -> ordinal, considering 01-Jan-0001 as day 1.)r0r)r3r%r/daydims    r_ymd2ordr8Fs4u
%Cd#tU+
,
riec|dz}t|t\}}|dzdz}t|t\}}t|t\}}t|d\}}||dz|dzz|zz
}|dk(s|dk(r|dz
ddfS|dk(xr|d	k7xs|dk(}|d
zdz	}t||dkDxr|z}||kDr|dz}|t
||dk(xr|zz}||z}|||dzfS)
z@ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.rr$r(r#r"r2r:r+)divmod_DI400Y_DI100Y_DI4Yr2r-)	nn400r%n100n4n1leapyearr/	precedings	         r_ord2ymdrK_s#.FAQ GD!#:>DQ GD!
1eEB
1cNEBD3Ja"$$D	Qw$!)Avr2~Qw2B"H1	H
VME"5)UQY-C8DI1}

^E*eqj.EXFF	NA
!r)
NJanFebMarAprMayJunJulAugSepOctNovDec)NMonTueWedThuFriSatSunct|||dzdz}t|||z}tj|||||||||f	S)N)r8r3_timestruct_time)	rmdhhmmssdstflagwdaydnums	         r_build_struct_timerlsOQ1!Q&Da#a'DaAr2r4wGHHrcdddddd}|dk(r|rdnd	}n
|d
k(r|dz}	||}|j||||S#t$rtdwxYw)
Nz{:02d}z
{:02d}:{:02d}z{:02d}:{:02d}:{:02d}z{:02d}:{:02d}:{:02d}.{:03d}z{:02d}:{:02d}:{:02d}.{:06d})hoursminutessecondsmillisecondsmicrosecondsautorrrprqzUnknown timespec value)formatKeyError
ValueError)rfrgrhustimespecspecsfmts       r_format_timer|s~")55
E6%'>Y	^	#
t*Hozz"b"b))31223s	9Ac8d}||jdkrd}|}nd}t|td\}}t|td\}}|d||||fzz
}|s|jr2|d	||jfzz
}|jr|d
|jzz
}|S)Nr-+rrnroz%s%02d%s%02dz%s%02d.%06d)daysr@rrrrp)offsepssignrfrgrhs       r_format_offsetrs
A
88a<D$CDYQ/0BIa01B	^tRb1
11

S"**---AWr..Hrcd}d}d}d}g}|j}dt|}
}	|	|
krq||	}|	dz
}	|dk(rR|	|
krC||	}|	dz
}	|dk(r%|dt|ddz}|j|n |dk(r>|*t|drt	|jd	
}nd	}|j|n|dk(rk|	|
kr||	}|	dz
}	|dk(r>|*t|drt	|jd
}nd	}|j|n|d||||nm|dk(rF|2d	}t|d
r$|j
}
|
|
jdd}|j|n"|d||n|dn|||	|
krqd	j|}tj||S)Nrr%fz%06dmicrosecondz	utcoffsetr~r:Ztznamez%%)appendlengetattrhasattrrrrreplacejoinrbstrftime)objectru	timetuplefreplacezreplace
colonzreplaceZreplace	newformatpushirDchch2rs              r_wrap_strftimersHHMHIDc&kqA
a%
AY	Q
91uAYQ9'#)GF4A1-F$F$$X.3Y'"6;7'5f6F6F6Hb'QH')H$$X.3Y1u$QiQ#:,4#*6;#?4B6CSCSCU[^4_M46M%,,]; I H I3Y'#%"684 &

A }+,99S$+?$$X.IHS	Hga%h	"I>>)Y//rc
|dvS)N
0123456789r)cs r_is_ascii_digitrs
rcJt|}|dk(ryd}d}|d|k(rL|d|k(rC|dkrtd|dkDr-|d|k(r%|dk(rtd|d	kDrt|d	ryy	yy	|d|k(r2d}||krt||sn|d
z
}||kr|dkr|S|dzdk(ryyy)
NrarWr"r:zInvalid ISO string	
rr+r)rrwr)dtstr	len_dtstrdate_separatorweek_indicatoridxs     r"_find_isoformat_datetime_separatorrsE
IA~NNQx>!8~%1} !5661}q^!;>$%9::r>oeBi&@8~%C	/&uSz2q	/
Qw
Qw!|rct|dd}|ddk(}d|z}|||dzdk(rp|dz
}t|||dz}|dz
}d}t||kDr/|||dzdk(|k7rtd||z
}t|||dz}tt	|||St|||dz}|dz
}|||dzdk(|k7rtd||z
}t|||dz}|||gS)Nrr"rrrr+z"Inconsistent use of dash separator)intrrwlist_isoweek_to_gregorian)rr%has_sepposweeknodaynor/r6s        r_parse_isoformat_daterOs8uQqz?DAh#oG
g+CSqS qU3sQw'(qu:c#'"c)g5 !EFF7NCc#'*+E)$>??E#cAg&'q#cAg#%'1ABBw%C!G$%eS!!r)ii'rtr#rc t|}gd}d}tddD]c}||z
dkrtdt|||dz||<|dz
}|||dz}|dk(r|dk(}|r|dk\rnr|dk7rtd|z||z
}e||kr||d	vrtd
|dz
}||z
}|dk\rd}n|}t||||z|d<|dkr|dxxt|dz
zcc<||kDr*tt
t|||zdstd|S)
N)rrrrrr=r+zIncomplete time componentrrzInvalid time separator: %cz.,zInvalid microsecond componentr`z%Non-digit values in unparsed fraction)rrangerwr_FRACTION_CORRECTIONallmapr)	tstrlen_str
time_compsrcomp	next_charr
len_remainderto_parses	         r_parse_hh_mm_ss_ffrvse$iGJ
CacMQ899tCA/
4qSUO	193&GDAIyC'9IEFFw%(W}9D <==1HC#cMM!(S#h, 89JqM!|1
!5hqj!AA
(OT3x</5J KL !HIIrcbt|}|dkrtd|jddzxs*|jddzxs|jddz}|dkDr|d|dz
n|}t|}d}||k(r|ddk(rtj
}n|dkDr||d}t|d	vrtd
t|}t
d|Drtj
}n8||dz
dk(rdnd}t|d|d|d|d
}	t	||	z}|j||S)Nr+zIsoformat time too shortrrrrrr)rrr=zMalformed time zone stringc3&K|]	}|dk(yw)rNr).0rs  r	<genexpr>z(_parse_isoformat_time.<locals>.<genexpr>s(!qAv(sr=rnrorprr)	rrwfindrrutcrrr)
rrtz_postimestrrtzitzstrtz_compstzsigntds
          r_parse_isoformat_timersC$iG{344iinq LDIIcNQ$6L$))C.1:LF!'!d9F1HoG#G,J
C
T"X_ll	!VW
u:"9::%e,(x((,,C
+s2RF!hqk#+A;Xa[JB6B;'Ccrcht|cxkr	tksntd|d|cxkrdks@nd}|dk(r't|dddz}|dk(s|dk(r
t	|rd	}|rtd
|d|cxkrdksntd|d
|dz
dz|dz
z}t|}||z}t
|S)NzYear is out of range: r5Trrar"r=FzInvalid week: rzInvalid weekday: z (range is [1, 7]))rr	rwr8r&_isoweek1mondayrK)r%weekr6out_of_range
first_weekday
day_offsetday_1ord_days        rrrsd%g%1$899t=b=2:%T1a014M"}'9'/~$~dV455s;Q;,SE1CDEE(a37+J
D!Ej GGrcX|(t|tstdt|zyy)Nz4tzinfo.tzname() must return None or string, not '%s')
isinstancestr	TypeErrortype)names r
_check_tznamers7
4 5#%)$Z01	1!6rc|yt|tstd|dt|dtd|cxkrtdksnt	|d|dy)Nztzinfo.z'() must return None or timedelta, not ''rz()=zG, must be strictly between -timedelta(hours=24) and timedelta(hours=24))rrrrrw)roffsets  r_check_utc_offsetrse
~fi(48$v,HI	IaL=60IaL0()	)1rc,t|}t|}t|}t|cxkr	tksntdttfz|d|cxkrdksntd|t	||}d|cxkr|ksntd|z||||fS)Nzyear must be in %d..%drr<zmonth must be in 1..12zday must be in 1..%d)_indexrr	rwr0r5s    r_check_date_fieldsr
s$<D5ME
+Cd%g%1Wg4FFMM1599
u
%C?s?/#5s;;rcPt|}t|}t|}t|}d|cxkrdksntd|d|cxkrdksntd|d|cxkrdksntd|d|cxkrdksntd||d	vrtd
||||||fS)Nrzhour must be in 0..23;zminute must be in 0..59zsecond must be in 0..59?Bz microsecond must be in 0..999999)rrzfold must be either 0 or 1)rrw)hourminutesecondrfolds     r_check_time_fieldsrs$<D
F^F
F^F%K??0$77"2F;;"2F;;%v%;[II65t<<d22rc@|t|tstdyy)Nz4tzinfo argument must be None or of a tzinfo subclass)rrr)tzs r_check_tzinfo_argr+s#	~jV4NOO5~rcrtdt|jdt|jd)Nzcan't compare 'z' to 'r)rr__name__rs  r	_cmperrorr/s-
G$$d1g&6&6899rctt||\}}|dz}|dkDr||kDn||k}|s
||k(r
|dzdk(r|dz
}|S)zdivide a by b and round result to the nearest integer

    When the ratio is exactly half-way between two integers,
    the even integer is returned.
    r+rr)r@)abqrgreater_than_halfs     r_divide_and_roundr3sU!Q<DAqFA!"QAAEAFq1uz	QHrceZdZdZdZ		d!dZdZdZdZe	dZ
e	dZe	d	Zd
Z
e
ZdZdZd
ZdZdZdZeZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$y )"raRepresent the difference between two datetime objects.

    Supported operators:

    - add, subtract timedelta
    - unary plus, minus, abs
    - compare to timedelta
    - multiply, divide by int

    In addition, datetime supports subtraction of two datetime objects
    returning a timedelta, and addition or subtraction of a datetime
    and a timedelta giving a datetime.

    Representation: (days, seconds, microseconds).
    )_days_seconds
_microseconds	_hashcodecdx}x}	}
||dzz
}||dz|dzzz
}||dzz
}t|trJtj|\}}tj|dz\}}
t	|
}	t	|}nd}|}t|tr)tj|\}}t	|}||z
}n|}t|d\}}||z
}|	t	|z
}	|d	z}t|tr7t
||z}t|d
\}}t|d\}}||z
}|	|z
}	nAt	|}t|d
\}}t|d\}}||z
}|	|z
}	t
||z}t|d
\}}
|	|z
}	t|	d\}}	||z
}t|dkDrtd|ztj|}||_|	|_|
|_
d
|_|S)Nrra<rtg@gQ.A@Bɚ;z$timedelta # of days is too large: %dr)rfloat_mathmodfrr@roundabs
OverflowErrorr__new__r	r
rr)clsrrprrrqrornweeksrerrxdayfracdaysecondsfracdaysecondswholesecondsfracusdoublers                 rrztimedelta.__new__]s$A	
a72:d
**T))dE"!JJt,MGT.3jjI9N.O+NOO$AD	A NAgu%#(::g#6 K'lG>)K)Kw0
g	T		S\
$lE* !89L$*<$A!G\"7G4MD'
IA
LA|,L$*<$A!G\"7G4MD'
IA
LA !89L\73	WG$a	T	q6I F JKK~~c"

rcg}|jr|jd|jz|jr|jd|jz|jr|jd|jz|s|jdt	|d|j
jddj|dS)	Nzdays=%dz
seconds=%dzmicroseconds=%d0.(, ))r	rr
rrr__qualname__r)rargss  r__repr__ztimedelta.__repr__s::KK	DJJ./==KKt}}45KK)D,>,>>?KK/5"nn99"iio/	/rct|jd\}}t|d\}}d|||fz}|jrd}d||jz|z}|jr|d|jzz}|S)Nrz%d:%02d:%02dc2|t|dk7xrdxsdfS)Nrrr~)r)rDs rpluralz!timedelta.__str__.<locals>.plurals#a&A+-#333rz
%d day%s, r)r@r
r	r)rrgrhrfrr-s      r__str__ztimedelta.__str__s|

r*BBBb"b\)::
4tzz 22a7AGd0000Arc`|jdz|jzdz|jzdzS)zTotal seconds in the duration.rr)rrprrrs r
total_secondsztimedelta.total_secondss7U"T\\1U:!!"%*+	+rc|jSrr	r0s rrztimedelta.dayszzrc|jSrp)r
r0s rrpztimedelta.secondss}}rc|jSrr)rr0s rrrztimedelta.microsecondss!!!rct|trRt|j|jz|j|jz|j|jzSt
SNrrr	r
rNotImplementedrothers  r__add__ztimedelta.__add__XeY'TZZ%++5!]]U^^;!//%2E2EEG
Grct|trRt|j|jz
|j|jz
|j|jz
St
Sr;r<r>s  r__sub__ztimedelta.__sub__rArc:t|tr||zStSr;)rrr=r>s  r__rsub__ztimedelta.__rsub__seY'55= rc^t|j|j|jSr;)rr	r
rr0s r__neg__ztimedelta.__neg__
s.$**--,,,.	.rc|Sr;rr0s r__pos__ztimedelta.__pos__src*|jdkr|S|SNrr4r0s r__abs__ztimedelta.__abs__s::>5LKrc0t|tr4t|j|z|j|z|j
|zSt|tr=|j}|j\}}tddt||z|StSrK)rrrr	r
rr_to_microsecondsas_integer_ratiorr=rr?usecrrs     r__mul__ztimedelta.__mul__seS!TZZ%/!]]U2!//%79
9eU#((*D))+DAqQ#4TAXq#ABBrcZ|jdz|jzdz|jzS)Nrrr	r
rr0s rrNztimedelta._to_microseconds)s/w'$--77B""#	$rct|ttfstS|j	}t|tr||j	zSt|trtdd||zSyrK)rrrr=rN)rr?rQs   r__floordiv__ztimedelta.__floordiv__-se%#y!12!!$$&eY'511333eS!Q45=11"rctt|tttfstS|j}t|tr||jzSt|trtddt
||St|tr-|j\}}tddt
||z|SyrK)rrrrr=rNrrOrPs     r__truediv__ztimedelta.__truediv__6s%#ui!89!!$$&eY'%00222eS!Q#4T5#ABBeU#))+DAqQ#4QXq#ABB$rct|tr.|j|jz}tdd|StSrK)rrrNr=)rr?rs   r__mod__ztimedelta.__mod__Bs=eY'%%'%*@*@*BBAQ1%%rct|tr:t|j|j\}}|tdd|fStSrK)rrr@rNr=)rr?rrs    r
__divmod__ztimedelta.__divmod__HsKeY'$//10024DAqi1a(((rcVt|tr|j|dk(StSrKrrrr=r>s  r__eq__ztimedelta.__eq__Q&eY'99U#q((!!rcVt|tr|j|dkStSrKr^r>s  r__le__ztimedelta.__le__Wr`rcVt|tr|j|dkStSrKr^r>s  r__lt__ztimedelta.__lt__]&eY'99U#a''!!rcVt|tr|j|dk\StSrKr^r>s  r__ge__ztimedelta.__ge__cr`rcVt|tr|j|dkDStSrKr^r>s  r__gt__ztimedelta.__gt__irercRt|j|jSr;)r	_getstater>s  rrztimedelta._cmposDNN$eoo&788rct|jdk(rt|j|_|jS)Nrrhashrkr0s r__hash__ztimedelta.__hash__ss+>>R!$.."23DN~~rcd|jdk7xs |jdk7xs|jdk7SrKrTr0s r__bool__ztimedelta.__bool__xs6

a(

"(""a'	)rcH|j|j|jfSr;rTr0s rrkztimedelta._getstates

DMM4+=+=>>rc:|j|jfSr;rrkr0s r
__reduce__ztimedelta.__reduce__ 011rN)rrrrrrr)%rrr(__doc__	__slots__rr*r.r1propertyrrprrr@__radd__rCrErGrIrLrR__rmul__rNrVrXrZr\r_rbrdrgrirrorqrkrurrrrrGs&BI56:;cJ/
+""H
.H$2
C"""""9
)?2rri6errrr)rrnrorprrr9c0eZdZdZdZd$dZedZedZedZ	edZ
ed	Zd
ZdZ
dZd
ZdZeZedZedZedZdZdZd%dZdZdZdZdZdZdZdZdZ e Z!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(y)&raConcrete date type.

    Constructors:

    __new__()
    fromtimestamp()
    today()
    fromordinal()

    Operators:

    __repr__, __str__
    __eq__, __le__, __lt__, __ge__, __gt__, __hash__
    __add__, __radd__, __sub__ (add/radd only with timedelta arg)

    Methods:

    timetuple()
    toordinal()
    weekday()
    isoweekday(), isocalendar(), isoformat()
    ctime()
    strftime()

    Properties (readonly):
    year, month, day
    )_year_month_dayrNc|t|ttfryt|dk(rkdt	|ddcxkrdkrTnnQt|tr	|jd}tj|}|j|d|_|St|||\}}}tj|}||_
||_||_d|_|S#t$rtdwxYw)	zVConstructor.

        Arguments:

        year, month, day (required, base 1)
        r"rr+r=r<latin1znFailed to encode latin1 string when unpickling a date object. pickle.load(data, encoding='latin1') is assumed.r)rbytesrrordencodeUnicodeEncodeErrorrwrr_date__setstaterrr}r~r)rr%r/r6rs     rrzdate.__new__s
MteS\*s4yA~
T!AY%2%$$L;;x0D>>#&DOOD!DNK-dE3?eS~~c"
	!*L$KLLLsCC+c	Ttj|\	}}}}}}}}	}
||||S)z;Construct a date from a POSIX timestamp (like time.time()).)rb	localtime)rtrrdrerfrgrhweekdayjdaydsts           r
fromtimestampzdate.fromtimestamps338//!2D/1aRWdC1a|rcLtj}|j|S)z"Construct a date from time.time().rbrr)rrs  rtodayz
date.todays 
JJL  ##rc4t|\}}}||||S)zConstruct a date from a proleptic Gregorian ordinal.

        January 1 of year 1 is day 1.  Only the year, month and day are
        non-zero in the result.
        )rK)rrDrrdres     rfromordinalzdate.fromordinals!1+1a1a|rct|tstdt|dvrt	d|	|t|S#t$rt	d|wxYw)z2Construct a date from a string in ISO 8601 format.#fromisoformat: argument must be str)rarrInvalid isoformat string: )rrrrrwr	Exception)rdate_strings  r
fromisoformatzdate.fromisoformatsu+s+ABB{:-9+IJJ	K-k:;;	K9+IJJ	Ks
AAc"|t|||S)z|Construct a date from the ISO year, week number and weekday.

        This is the inverse of the date.isocalendar() function)r)rr%rr6s    rfromisocalendarzdate.fromisocalendars
)$c:;;rcdt||jj|j|j|j
fzS)a5Convert to formal string, for repr().

        >>> dt = datetime(2010, 1, 1)
        >>> repr(dt)
        'datetime.datetime(2010, 1, 1, 0, 0)'

        >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc)
        >>> repr(dt)
        'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)'
        z%s.%s(%d, %d, %d))rrr(r}r~rr0s rr*z
date.__repr__s@#&7&=&*nn&A&A&*jj&*kk&*ii	&11	1rc|jdzxsd}dt|t|j|j|j
fzS)Return ctime() style string.raz%s %s %2d 00:00:00 %04d)	toordinal	_DAYNAMES_MONTHNAMESr~rr}rrs  rctimez
date.ctime
sK.."Q&+!(g$IItzz,##	#rc8t|||jS)zQ
        Format using strftime().

        Example: "%d/%m/%Y, %H:%M:%S"
        )rr)rrus  rrz
date.strftimesdFDNN,<==rct|ts!tdt|jzt|dk7r|j
|St|SNzmust be str, not %srrrrrrrrrr{s  r
__format__zdate.__format__K#s#1DI4F4FFGGs8q===%%4yrcNd|j|j|jfzS)zReturn the date formatted according to ISO.

        This is 'YYYY-MM-DD'.

        References:
        - http://www.w3.org/TR/NOTE-datetime
        - http://www.cl.cam.ac.uk/~mgk25/iso-time.html
        z%04d-%02d-%02d)r}r~rr0s r	isoformatzdate.isoformat$s" 4::t{{DII"FFFrc|jS)z
year (1-9999))r}r0s rr%z	date.year2r5rc|jS)zmonth (1-12))r~r0s rr/z
date.month7s{{rc|jS)z
day (1-31))rr0s rr6zdate.day<syyrc	`t|j|j|jddddS)9Return local time tuple compatible with time.localtime().rr)rlr}r~rr0s rrzdate.timetupleDs*!$**dkk499"#Q2/	/rcXt|j|j|jS)zReturn proleptic Gregorian ordinal for the year, month and day.

        January 1 of year 1 is day 1.  Only the year, month and day values
        contribute to the result.
        )r8r}r~rr0s rrzdate.toordinalIs

DKK;;rc|||j}||j}||j}t||||S)z;Return a new date with new values for the specified fields.)r}r~rr)rr%r/r6s    rrzdate.replaceQsA<::D=KKE;))CtDz$s++rcVt|tr|j|dk(StSrKrrrr=r>s  rr_zdate.__eq__]&eT"99U#q((rcVt|tr|j|dkStSrKrr>s  rrbzdate.__le__brrcVt|tr|j|dkStSrKrr>s  rrdzdate.__lt__g&eT"99U#a''rcVt|tr|j|dk\StSrKrr>s  rrgzdate.__ge__lrrcVt|tr|j|dkDStSrKrr>s  rrizdate.__gt__qrrc|j|j|j}}}|j|j|j}}}t|||f|||fSr;)r}r~rr)rr?rrdrey2m2d2s        rrz	date._cmpvsM**dkk499a1[[%,,

BQ1IB|,,rct|jdk(rt|j|_|jS)Hash.rrmr0s rroz
date.__hash__|s+>>R!$.."23DN~~rct|tr^|j|jz}d|cxkr	tkr'ntdt|j
|StdtS)zAdd a date to a timedelta.rresult out of range)	rrrr_MAXORDINALrrrr=)rr?os   rr@zdate.__add__sceY' 5::-A1## 566Dz--a00 566rct|tr|t|jzSt|tr.|j	}|j	}t||z
St
S)z.Subtract two dates, or a date and a timedelta.)rrrrrr=)rr?days1days2s    rrCzdate.__sub__sYeY')UZZK000eT"NN$EOO%EUU]++rc.|jdzdzS)z:Return day of the week, where Monday == 0 ... Sunday == 6.r`rarr0s rrzdate.weekdays 1$))rc0|jdzxsdS)z:Return day of the week, where Monday == 1 ... Sunday == 7.rarr0s r
isoweekdayzdate.isoweekdays~~!#(q(rcZ|j}t|}t|j|j|j}t||z
d\}}|dkr#|dz}t|}t||z
d\}}n|dk\r|t|dzk\r|dz
}d}t
||dz|dzS)aReturn a named tuple containing ISO year, week number, and weekday.

        The first ISO week of the year is the (Mon-Sun) week
        containing the year's first Thursday; everything else derives
        from that.

        The first week is 1; Monday is 1 ... Sunday is 7.

        ISO calendar algorithm taken from
        http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm
        (used with permission)
        rarr4)r}rr8r~rr@_IsoCalendarDate)rr%week1mondayrrr6s      risocalendarzdate.isocalendarszz%d+T[[$))<5;.2	c!8AID)$/Ku{2A6ID#
RZQ//	d1fc!e44rc|t|jd\}}t|||j|jgfSN)r@r}rr~r)ryhiylos   rrkzdate._getstates5$**c*Sc3TYY7899rc@|\}}|_|_|dz|z|_yr)r~rr})rstringrrs    r
__setstatezdate.__setstates#+1(S$+ty3Y_
rc:|j|jfSr;rtr0s rruzdate.__reduce__rvr)NN)NNN))rrr(rwrxrclassmethodrrrrrr*rrrrr.ryr%r/r6rrrr_rbrdrgrirror@rzrCrrrrkrrurrrrrs867ID
$$
KK<<1,#>	GG/
<,




-H*)
5<:%2rrr<rr3c2eZdZdZdZdZdZdZdZdZ	y)	rzAbstract base class for time zone info classes.

    Subclasses must override the tzname(), utcoffset() and dst() methods.
    rctd)z%datetime -> string name of time zone.z&tzinfo subclass must override tzname()NotImplementedErrorrdts  rrz
tzinfo.tznames!"JKKrctd)zIdatetime -> timedelta, positive for east of UTC, negative for west of UTCz)tzinfo subclass must override utcoffset()rrs  rrztzinfo.utcoffsets!"MNNrctd)zdatetime -> DST offset as timedelta, positive for east of UTC.

        Return 0 if DST not in effect.  utcoffset() must include the DST
        offset.
        z#tzinfo subclass must override dst()rrs  rrz
tzinfo.dsts""GHHrc:t|tstd|j|urt	d|j}|t	d|j
}|t	d||z
}|r"||z
}|j
}|t	d||zS)z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfz0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultz;fromutc(): dt.dst gave inconsistent results; cannot convert)rrrrrwrr)rrdtoffdtdstdeltas     rfromutcztzinfo.fromutcs"h'DEE
99D 455=&'
'
=IJJ
%KBFFHE} ";<<Ezrcnt|dd}|r|}nd}|j||jfS)N__getinitargs__r)rr__getstate__)rgetinitargsr)s   rruztzinfo.__reduce__s:d$5t<=DDd&7&7&9::rN)
rrr(rwrxrrrrrurrrrrs*ILOI:;rrcZeZdZfdZedZedZedZdZdZ	xZ
S)IsoCalendarDatec*t|||||fSr;)superr)rr%rrrs    rrzIsoCalendarDate.__new__swsT4$9::rc|dSrKrr0s rr%zIsoCalendarDate.yearAwrc|dS)Nrrr0s rrzIsoCalendarDate.weekrrc|dSNr+rr0s rrzIsoCalendarDate.weekdayrrc&tt|ffSr;)tupler0s rruzIsoCalendarDate.__reduce__"sd~&&rcX|jjd|dd|dd|ddS)Nz(year=rz, week=rz
, weekday=r+r')rrr0s rr*zIsoCalendarDate.__repr__'s?>>**+a	a	DG9AG	Hr)rrr(rryr%rrrur*
__classcell__)rs@rrrsO;'
Hrrc eZdZdZdZd"dddZedZedZed	Z	ed
Z
edZedZd
Z
dZdZdZdZd#dZdZdZdZd$dZeZedZdZdZdZdZdZ		d%dddZd&dZ dZ!d Z"d!Z#y)'ra<Time with time zone.

    Constructors:

    __new__()

    Operators:

    __repr__, __str__
    __eq__, __le__, __lt__, __ge__, __gt__, __hash__

    Methods:

    strftime()
    isoformat()
    utcoffset()
    tzname()
    dst()

    Properties (readonly):
    hour, minute, second, microsecond, tzinfo, fold
    )_hour_minute_second_microsecond_tzinfor_foldrNrct|ttfrxt|dk(rjt	|dddzdkrVt|tr	|jd}tj|}|j||xsdd	|_|St|||||\}}}}}t|tj|}||_||_||_||_||_d	|_||_|S#t$rtdwxYw)
zConstructor.

        Arguments:

        hour, minute (required)
        second, microsecond (default to zero)
        tzinfo (default to None)
        fold (keyword only, default to zero)
        r`rrr>rznFailed to encode latin1 string when unpickling a time object. pickle.load(data, encoding='latin1') is assumed.Nr)rrrrrrrrwrr_time__setstaterrrrrrrrr)rrrrrrrrs        rrztime.__new__Is
teS\*s4yA~Qq	N4"$$$L;;x0D>>#&DOOD&.D1DNK2D&&+t35/ffk4&!~~c"
'
+*L$KLLLs
C77Dc|jSzhour (0-23)rr0s rrz	time.hourqr5rc|jSz
minute (0-59)rr0s rrztime.minutev||rc|jSz
second (0-59)rr0s rrztime.second{r
rc|jSzmicrosecond (0-999999)rr0s rrztime.microsecond   rc|jSztimezone info objectrr0s rrztime.tzinfor
rc|jSr;rr0s rrz	time.foldzzrcZt|tr|j|ddk(StS)NTallow_mixedrrrrr=r>s  rr_ztime.__eq__s*eT"99U95::!!rcVt|tr|j|dkStSrKrr>s  rrbztime.__le__&eT"99U#q((!!rcVt|tr|j|dkStSrKrr>s  rrdztime.__lt__&eT"99U#a''!!rcVt|tr|j|dk\StSrKrr>s  rrgztime.__ge__rrcVt|tr|j|dkDStSrKrr>s  rriztime.__gt__rrc|j}|j}dx}}||urd}n%|j}|j}||k(}|rdt|j|j|j
|jf|j|j|j
|jfS|||rytd|jdz|jz|tdzz
}|jdz|jz|tdzz
}	t||j
|jf|	|j
|jfS)NTr+z$cannot compare naive and aware timesrrr)	rrrrrrrrr)
rr?rmytzottzmyoffotoffbase_comparemyhhmmothhmms
          rrz	time._cmps:||}}4<LNN$EOO%E E>LT\\4<<**,emmU]]++-.
.=EM FGGb4<</%19M2MMr!EMM1E9Q;O4OOVT\\4+<+<=U]]E,>,>?A	Arcr|jdk(r|jr|jd}n|}|j}|s-t	|jd|_|jSt
t|j|j|z
td\}}|tdz}d|cxkrdkr?nn<t	t|||j|j|_|jSt	|||j|jf|_|jS)	rrrrrnrorrrr>)
rrrrrnrkr@rrrrrr)rrtzoffhrds     rroz
time.__hash__s>>RyyLLaL(KKME!%akkmA&6!7~~idiiMPUU'a021i**;B;%)$q!T[[$BRBR*S%TDN~~&*1ad>N>N*O%PDN~~rc8|j}t|S)z=Return formatted timezone offset (+xx:xx) or an empty string.)rr)rrs  r_tzstrztime._tzstrsnnc""rc|jdk7rd|j|jfz}n!|jdk7rd|jz}nd}dt||jj|j
|j|fz}|j|ddd|jzzd	z}|jr|ddd
z}|S)%Convert to formal string, for repr().rz, %d, %dz, %dr~z%s.%s(%d, %d%s)Nr, tzinfo=%rr'	, fold=1))	rrrrr(rrrrrrs  rr*z
time.__repr__s!dllD,=,=>>A
\\Q
%AA 1$ 7 $ ; ; $

DLL! ==<<##255;A::#2$Arct|j|j|j|j|}|j}|r||z
}|S)aReturn the time formatted according to ISO.

        The full format is 'HH:MM:SS.mmmmmm+zz:zz'. By default, the fractional
        part is omitted if self.microsecond == 0.

        The optional argument timespec specifies the number of additional
        terms of the time to include. Valid options are 'auto', 'hours',
        'minutes', 'seconds', 'milliseconds' and 'microseconds'.
        )r|rrrrr/)rryrrs    rrztime.isoformatsG
T\\4<<++X
7
[[]

GArct|tstd|jd}	|t	|S#t
$rt
d|wxYw)z>Construct a time from a string in one of the ISO 8601 formats.rTr)rrrremoveprefixrrrw)rtime_strings  rrztime.fromisoformatsg+s+ABB
"..s3	K-k:;;	K9+IJJ	Ks	
<Ac	nddd|j|j|jdddf	}t|||S)z{Format using strftime().  The date part of the timestamp passed
        to underlying strftime should not be used.
        ilrrr)rrrr)rrurs   rrz
time.strftimes=1aZZt||2	dFI66rct|ts!tdt|jzt|dk7r|j
|St|Srrrs  rrztime.__format__)rrcn|jy|jjd}td||S)z^Return the timezone offset as timedelta, positive east of UTC
         (negative west of UTC).Nrrrrrrs  rrztime.utcoffset24<<''-+v.
rcl|jy|jjd}t||SaReturn the timezone name.

        Note that the name is 100% informational -- there's no requirement that
        it mean anything in particular. For example, "GMT", "UTC", "-500",
        "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies.
        Nrrrrrs  rrztime.tzname;2<<||""4(drcn|jy|jjd}td||SaqReturn 0 if DST is not in effect, or the DST offset (as timedelta
        positive eastward) if DST is in effect.

        This is purely informational; the DST offset has already been added to
        the UTC offset returned by utcoffset() if applicable, so there's no
        need to consult dst() unless you're interested in displaying the DST
        info.
        Nrrrrr>s  rrztime.dstH4<<!!$'%(
rc||j}||j}||j}||j}|dur|j}||j
}t
|||||||S)z;Return a new time with new values for the specified fields.Tr)rrrrrrr)rrrrrrrs       rrztime.replaceWsx<99D>[[F>[[F**KT>[[F<::DtDz$V$OOrct|jd\}}t|d\}}|j}|jr
|dkDr|dz
}t	||j
|j|||g}|j|fS||jfSNrr=)r@rrrrrrr)rprotocolus2us3us1r-	basestates       rrkztime._getstatejs$++S1S#s#SJJ::(Q,
HA1dllDLLS*+	<<<t||,,rc|t|tstd|\}|_|_}}}|dkDrd|_|dz
|_nd|_||_|dz|zdz|z|_||_y)Nbad tzinfo state argrrrLrr)	r
_tzinfo_classrrrrrrr)rrrr-rPrNrOs       rrztime.__setstatews|j&G2337=44<sCs7DJSDJDJDJ"ax3.14;rc<|j|j|fSr;rtrrMs  r
__reduce_ex__ztime.__reduce_ex__x 899rc$|jdSrrWr0s rruztime.__reduce__!!!$$rrrrrNFrs)NNNNTr=)$rrr(rwrxrryrrrrrrr_rbrdrgrirror/r*rr.rrrrrrrrrkrrWrurrrrr0s),_I%UV%P!!"""""A8.#
&"G
K
K	7
HLP%)P&-:%rrceZdZdZej
ej
zZ		d2dddZedZ	edZ
edZed	Zed
Z
edZedZed3d
ZedZed3dZedZed4dZedZdZdZdZdZdZdZdZ		d5dddZdZd3dZdZd6dZ dZ!d Z"ed!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d7d*Z,d+Z-e-Z.d,Z/d-Z0d8d.Z1d/Z2d0Z3d1Z4y)9rzdatetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

    The year, month and day arguments are required. tzinfo may be None, or an
    instance of a tzinfo subclass. The remaining arguments may be ints.
    Nrrc	jt|ttfrxt|dk(rjdt	|dddzcxkrdkrPnnMt|tr
	t|d}tj|}
|
j||d	|
_
|
St|||\}}}t|||||	\}}}}}	t|tj|}
||
_||
_||
_||
_||
_||
_||
_||
_d	|
_
|	|
_|
S#t
$rt
dwxYw)
Nrrr+r=rr<rzrFailed to encode latin1 string when unpickling a datetime object. pickle.load(data, encoding='latin1') is assumed.r)rrrrrrrwrr_datetime__setstaterrrrr}r~rrrrrrr)rr%r/r6rrrrrrrs           rrzdatetime.__new__s;teS\*s4yB
T!AY$**$$L x0D>>#&DOOD%(DNK-dE3?eS2D&&+t35/ffk4&!~~c"
	
'
3*L$KLLLsDD2c|jSrrr0s rrz
datetime.hourr5rc|jSrr	r0s rrzdatetime.minuter
rc|jSrr
r0s rrzdatetime.secondr
rc|jSrrr0s rrzdatetime.microsecondrrc|jSrrr0s rrzdatetime.tzinfor
rc|jSr;rr0s rrz
datetime.foldrrc
tj|\}}t|dz}|dk\r|dz
}|dz}n|dkr
|dz}|dz
}|rtjntj
}||\	}}}	}
}}}
}}t
|d}||||	|
||||}||sd}||kr!tjjdr|S|||z
dd	\}}}	}
}}||||	|
||||}||z
td|z
}|jdkr=|||tddzzdd	\}}}	}
}}||||	|
||||}||k(rd|_|S||j|}|S)
Construct a datetime from a POSIX timestamp (like time.time()).

        A timezone info object may be passed in as well.
        rrrrrNrwinr`)rrrrbgmtimerminsysplatform
startswithrrrr)rrrrfracrx	converterrrdrerfrgrhrrrresultmax_fold_secondsprobe1transprobe2s                     r_fromtimestampzdatetime._fromtimestamps**Q-a
4#:

=
FA'MB
!V
FA'MB$'ELLU__	2;A,/1aRWdC
R[Q1b"b"b1
:c )##(?(?(F
"+A0@,@"A"1"EAq!RRAq"b"b"5FVOi3C&DDEzzA~&/EYq!_4L0L&Mbq&Q#1aRQ1b"b"b9V##$FL
^ZZ'F
rcBt||j||du|S)rjN)rrx)r	timestamprs   rrzdatetime.fromtimestamps%	"!!)Rt^R@@rc`ddl}|jdtd|j|ddS)z6Construct a naive UTC datetime from a POSIX timestamp.rNzdatetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(t, datetime.UTC).r+
stacklevelT)warningswarnDeprecationWarningrx)rrr~s   rutcfromtimestampzdatetime.utcfromtimestamps=	

J)!"		$!!!T400rcNtj}|j||S)zBConstruct a datetime from time.time() and optional time zone info.r)rrrs   rnowzdatetime.nows"
JJL  B''rcddl}|jdtdtj}|j|ddS)z*Construct a UTC datetime from time.time().rNzdatetime.utcnow() is deprecated and scheduled for removal in a future version. Instead, Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).r+r|T)r~rrrbrrx)rr~rs   rutcnowzdatetime.utcnow"sG	

=)!"		$
JJL!!!T400rcPt|tstdt|tstd|dur|j}||j
|j|j|j|j|j|j||j	S)z8Construct a datetime from a given date and a given time.z%date argument must be a date instancez%time argument must be a time instanceTr)
r_date_classr_time_classrr%r/r6rrrrr)rrrrs    rcombinezdatetime.combine/s$,CDD$,CDDT>[[F499djj$((99dkk4;;8H8H		+	+rc^t|tstdt|dkrt	d|	t|}|d|}||dzd}t
|}|r
	t|}ngd}|||zS#t$rt	d|dwxYw#t$rt	d|dwxYw)zBConstruct a datetime from a string in one of the ISO 8601 formats.rrarrrNr\)rrrrrwrrr)rrseparator_locationdstrrdate_componentstime_componentss       rrzdatetime.fromisoformat<s+s+ABB{a9+IJJ	H!CK!Pq!34D 21 467D3D9O

L"7"=
1O_688	H,[O<>CG
H	H
L 0@BGKL
Ls#A7B7BB,c	|j}|d}n|rd}nd}t|j|j|j|j
|j|j|S)rrrr)rrlr%r/r6rrr)rrs  rrzdatetime.timetuple[sYhhj;C
CC!$))TZZ"&))T[[$++"%'	'rcV
tddd
d}|
z
tddz}
fd}|||z
}||z
}||}||k(r'|||f|jz}|||z
}||k(r|S||z
}||z
}||}	|	|k(r|S||k(r|Sttf|j||S)zReturn integer POSIX timestamp.rrrctj|dd\}}}}}}t||||||z
tddzS)Nr`rr)rbrrr)urrdrerfrgrhepochs       rlocalzdatetime._mktime.<locals>.localmsJ"'//!"4Ra"8Aq!RRQ1b"b1E9i1oMMr)rrrmaxrm)rrtrrru1t1u2rt2rs          @r_mktimezdatetime._mktimehsq!$$
E\i1o-	N

!HqL
U
2Y
7((*:;DIIFFBb	BAAv	RA
U
2Y
7I
7ISz$))$R,,rc|j"|j}||jdzzS|tz
j	S)zReturn POSIX timestamp as floatr)rrr_EPOCHr1r4s  rrzzdatetime.timestamps@<<At''#---6M0022rc	|j}|r||z}|j|j|j}}}|j|j
|j}}}t||||||dS)z4Return UTC time tuple compatible with time.gmtime().r)rr%r/r6rrrrl)rrrrdrerfrgrhs        rutctimetuplezdatetime.utctimetuplesc!FND))TZZa1YYT[[B!!Q2r2q99rcXt|j|j|jS)zReturn the date part.)rr}r~rr0s rrz
datetime.datesDJJTYY77rct|j|j|j|j|j
S)z'Return the time part, with tzinfo None.r)rrrrrrr0s rrz
datetime.times.DIIt{{DKK9I9IPTPYPYZZrct|j|j|j|j|j
|jS)z'Return the time part, with same tzinfo.r)rrrrrrrr0s rtimetzzdatetime.timetzs6DIIt{{DKK9I9ILLtyy2	2rc	6||j}||j}||j}||j}||j}||j
}||j}|dur|j}|	|j}	t||||||||||		S)z?Return a new datetime with new values for the specified fields.Tr)
r%r/r6rrrrrrr)
rr%r/r6rrrrrrs
          rrzdatetime.replaces<99D=JJE;((C<99D>[[F>[[F**KT>[[F<99DtDz$sD&&%vD:	:rc|jW|j}|jd|jz
j}||k7r+||kD|jk(r|}n|tz
tdz}t
j|}t|dd}|j}|j}tt||S)Nrrr7r`)rrrrrrrbrr	tm_gmtofftm_zoner)rtsts2localtmrgmtoffzones       r_local_timezonezdatetime._local_timezones;;B,,AdiiK,088:Cby"H*B-Ia$88B//"%'"1+&""	&1488rc||j}nt|tstd|j}|"|j}|j	|}nD|j	|}|1|jdj}|j	|}||ur|S||z
j|}|j
|S)Nz)tz argument must be an instance of tzinfor)rrrrrrr)rrr#myoffsetrs     r
astimezonezdatetime.astimezones
:%%'BB'GHH{{<'')D~~d+H~~d+H||4|0@@B>>$/
:Kh''r'2zz#rc|jdzxsd}dt|t|j|j|j
|j|j|jfzS)rraz%s %s %2d %02d:%02d:%02d %04d)	rrrr~rrrrr}rs  rrzdatetime.ctimes_.."Q&+!.g$IIJJdllJJ2	rcd|j|j|j|fzt|j|j
|j|j|z}|j}t|}|r||z
}|S)aReturn the time formatted according to ISO.

        The full format looks like 'YYYY-MM-DD HH:MM:SS.mmmmmm'.
        By default, the fractional part is omitted if self.microsecond == 0.

        If self.tzinfo is not None, the UTC offset is also attached, giving
        giving a full format of 'YYYY-MM-DD HH:MM:SS.mmmmmm+HH:MM'.

        Optional argument sep specifies the separator between date and
        time, default 'T'.

        The optional argument timespec specifies the number of additional
        terms of the time to include. Valid options are 'auto', 'hours',
        'minutes', 'seconds', 'milliseconds' and 'microseconds'.
        z%04d-%02d-%02d%c)
r}r~rr|rrrrrr)rrryrrrs      rrzdatetime.isoformatsv  4::t{{DIIs"K
K
$**dllDLL++X77nn
C
 

GArc
|j|j|j|j|j|j
|jg}|ddk(r|d=|ddk(r|d=t|d|jjddjtt|d}|j|ddd|jzzdz}|jr|ddd	z}|S)
r1rrr$r%r&r'Nr2r3)r}r~rrrrrrrr(rrrrr)rLrs   rr*zdatetime.__repr__s
ZZdii
ZZt||T5F5F
HR5A:"R5A:",T2>>6699Sa[1
3<<##255;A::#2$Arc&|jdS)zConvert to string, for str(). r)rr0s rr.zdatetime.__str__&s~~#~&&rc0ddl}|j|||S)zKstring, format -> new datetime parsed from a string (like time.strptime()).rN)	_strptime_strptime_datetime)rrrurs    rstrptimezdatetime.strptime*s	++CfEErcn|jy|jj|}td||S)z\Return the timezone offset as timedelta positive east of UTC (negative west of
        UTC).Nrr=r>s  rrzdatetime.utcoffset0r?rcl|jy|jj|}t||SrArBrCs  rrzdatetime.tzname9rDrcn|jy|jj|}td||SrFrGr>s  rrzdatetime.dstFrHrc|t|tr|j|ddk(St|tstSy)NTrrF)rrrrr=r>s  rr_zdatetime.__eq__Ws7eX&99U95::E4(!!rct|tr|j|dkSt|tstSt||yrKrrrrr=rr>s  rrbzdatetime.__le___:eX&99U#q((E4(!!dE"rct|tr|j|dkSt|tstSt||yrKrr>s  rrdzdatetime.__lt__g:eX&99U#a''E4(!!dE"rct|tr|j|dk\St|tstSt||yrKrr>s  rrgzdatetime.__ge__orrct|tr|j|dkDSt|tstSt||yrKrr>s  rrizdatetime.__gt__wrrc
|j}|j}dx}}||urd}n|j}|j}|r^||j|jjk7ry||j|jjk7ry||k(}|rt	|j
|j|j|j|j|j|jf|j
|j|j|j|j|j|jfS|||rytd||z
}|jdkry|xrdxsdS)NTrr+z(cannot compare naive and aware datetimesrrr)rrrrrr}r~rrrrrrr)	rr?rr#r$r%r&r'diffs	         rrz
datetime._cmpsS||}}4<LNN$EOO%EDLL$))mL<FFHHEMM5::~M>HHJJ E>LT[[$))T\\4<<**,ellEJJemmU]]++-.
.=EM JKKe|99q=zQrc
*t|tstSt|j|j|j
|j|j}||z
}t|jd\}}t|d\}}d|jcxkr	tkrgnt'dt|jtj|jt!||||j"|j$St'd)zAdd a datetime and a timedelta.rrrrrr)rrr=rrrrrr@rprrrrrrrrrrr)rr?rrremrrs       rr@zdatetime.__add__s%+!!$..* $

"&,,"&,,'+'8'8	:
	5==$/	cRuzz([(
122	:%%d&6&6uzz&B&*4+0+=+=26,,'@A
A122rcNt|tst|tr||zStS|j	}|j	}|j
|jdzz|jdzz}|j
|jdzz|jdzz}t||z
||z
|j|jz
}|j|jur|S|j}|j}||k(r|S||td||z|z
S)z6Subtract two datetimes, or a datetime and a timedelta.rrz(cannot mix naive and timezone-aware time)rrrr=rrrrrrrr)	rr?rrsecs1secs2baser%r&s	         rrCzdatetime.__sub__s%*%+uf}$!! !t||b004::3DD



 22U[[45GG**U-?-??A<<5==(K !E>K=EMFGGe|e##rc|jdk(r|jr|jd}n|}|j}|-t	|jd|_|jSt
|j|j|j}|jdz|jdzz|jz}t	t|||j|z
|_|jS)Nrrrrr)rrrrrnrkr8r%r/r6rrrrr)rrr,rrps     rrozdatetime.__hash__s>>RyyLLaL(KKME}!%akkmA&6!7
~~ 		4::txx@))d*T[[2-==K!%igt?O?O&PSX&X!Y~~rc|t|jd\}}t|jd\}}t|d\}}|j}|jr
|dkDr|dz
}t||||j|j|j|j|||g
}|j|fS||jfSrK)r@r}rr~rrrrrrr)	rrMrrrNrOrPrdrQs	         rrkzdatetime._getstates$**c*S$++S1S#s#SKK::(Q,
HA3Q		::t||T\\S*+	<<<t||,,rc
|t|tstd|\
}}}|_|_|_|_}}}|dkDrd|_|dz
|_nd|_||_|dz|z|_	|dz|zdz|z|_
||_y)NrSrrrLrrr)rrTrrrrrrr~r}rr)	rrrrrrdrPrNrOs	         rrzdatetime.__setstatesj&G2336<	4c1di	
t|S#ss7DJc'DKDJDK3Y_
"ax3.14;rc<|j|j|fSr;rtrVs  rrWzdatetime.__reduce_ex__	rXrc$|jdSrrZr0s rruzdatetime.__reduce__	r[r)NNrrrrNr;)T)NNNNNNNT)r7rsr]r_)5rrr(rwrrxrrryrrrrrrrrxrrrrrrrrrzrrrrrrrr*r.rrrrr_rbrdrgrirr@rzrCrorkrbrWrurrrrrs
/IJK&*!45!H!!))VAA	1	1((

1
1
+
+99<' -F3:8[2
=ACG::29"66&'FF

"#####J3&H$0
"
-
:%rrcRd}t|dd}|dzdz}||z
}||kDr|dz
}|S)Nr=rr`ra)r8)r%THURSDAYfirstdayfirstweekdayrs     rrr	sGHa#HqLA%L\)KhqrceZdZdZeZefdZeddZdZ	dZ
dZdZd	Z
d
ZdZdZd
ZeddZeZedZy)r)_offset_namec<t|tstd||jur|s|jSd}nt|t
std|j|cxkr|jkstdtd|j||S)Nzoffset must be a timedeltazname must be a stringzYoffset must be a timedelta strictly between -timedelta(hours=24) and timedelta(hours=24).)
rrr_Omittedrr
_minoffset
_maxoffsetrw_create)rrrs   rrztimezone.__new__	s&),8993<<wwDD#&344~~93>>945
5:45
5{{64((rNcLtj|}||_||_|Sr;)rrrr)rrrrs    rrztimezone._create,	s#~~c"
rcd|j
|jfS|j|jfS)zpickle support)rrr0s rrztimezone.__getinitargs__3	s+::LL?"djj))rc`t|tr|j|jk(StSr;)rrrr=r>s  rr_ztimezone.__eq__9	s%eX&<<5==00rc,t|jSr;)rnrr0s rroztimezone.__hash__>	sDLL!!rc||jury|j2t|d|jjd|j
dSt|d|jjd|j
d|jdS)aConvert to formal string, for repr().

        >>> tz = timezone.utc
        >>> repr(tz)
        'datetime.timezone.utc'
        >>> tz = timezone(timedelta(hours=-5), 'EST')
        >>> repr(tz)
        "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')"
        zdatetime.timezone.utcr$r%r'r&)rrrrr(rr0s rr*ztimezone.__repr__A	sq488*::"3D"9"&.."="="&,,0
0#4D"9"&.."="="&,,

<	<rc$|jdSr;)rr0s rr.ztimezone.__str__U	s{{4  rcTt|ts||jStd)Nz8utcoffset() argument must be a datetime instance or None)rrrrrs  rrztimezone.utcoffsetX	s,b(#rz<<#$	$rct|ts|3|j|j|jS|jStd)Nz5tzname() argument must be a datetime instance or None)rrr_name_from_offsetrrrs  rrztimezone.tzname^	sKb(#rzzz!--dll;;::#$	$rc>t|ts|ytd)Nz2dst() argument must be a datetime instance or None)rrrrs  rrztimezone.dstf	s%b(#rz#$	$rct|tr(|j|urtd||jzStd)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rrrrwrrrs  rrztimezone.fromutcl	sKb(#yy$ "/00$$#$	$rr>r)rnrrc
0|sy|tdkrd}|}nd}t|td\}}t|td\}}|j}|j}|rd||dd	|dd	|dd
|d	S|rd||dd	|dd	|dSd||dd	|dS)Nr
rrrrrr02drr$06d)rr@rprr)rrrnrestrorprrs       rrztimezone._name_from_offsetx	s9Q<DFEDUIA$67ttYq%9:
,,(($c{!GC='#S)+
,uSk73-q
FFTF5+Qwsm44rr;)rrr(rxrrrrrrr_ror*r.rrrrrrrstaticmethodrrrrrr	s"IxH"*
)*
"<(!$$$$"5JJ55rrr+rrr^)r)Drw__all__rrbmathrrnoperatorrrrrrr	rr-r2dbmr7rr&r)r0r3r8rArBrCrKrrrlr|rrrrrrrrrrrrrrrrrrmr
resolutionrrrrrrrTrrrrrr
rrrrr<module>rs(
$/
FT!"Cc"3JCB*
!F
C
 
C
 
A
<~?C	I
**
&@0F6r!"H6.`,^B1
)3"P9
(|2|2|	*%	
yB'-/	
 a0	A2A2F
1a=b"#:;:;zHeH6#
X%X%t
1a=BF#+s	%ts	%l1a b"b"b&9Q/	r5vr5h%%il33hl
R!@ @A	B ?@	$1X\\	2r