³ò <¯bCc@sÄdZdgZddkZgZd„Zd„Zeedƒoeeiƒnee_edjoVd„Z d „Z dd „Z ee ƒee d ƒee d d ƒee dƒndS(sœ atexit.py - allow programmer to define multiple exit functions to be executed upon normal program termination. One public function, register, is defined. tregisteriÿÿÿÿNcCs¿d}x‰totiƒ\}}}y|||ŽWq tj otiƒ}q ddk}tidIJ|iƒtiƒ}q Xq W|dj o|d|d|d‚ndS(s‰run any registered exit functions _exithandlers is traversed in reverse order so functions are executed last in, first out. iÿÿÿÿNsError in atexit._run_exitfuncs:iii( tNonet _exithandlerstpopt SystemExittsystexc_infot tracebacktstderrt print_exc(RtfuncttargstkargsR((s atexit.pyct_run_exitfuncs s    cOsti|||fƒdS(s×register a function to be executed upon normal program termination func - function to be called at exit targs - optional arguments to pass to func kargs - optional keyword arguments to pass to func N(Rtappend(R R R ((s atexit.pycR%stexitfunct__main__cCs dGHdS(Ns running x1((((s atexit.pyctx14scCsd|fGHdS(Nsrunning x2(%r)((tn((s atexit.pyctx26scCsd||fGHdS(Nsrunning x3(%r, kwd=%r)((Rtkwd((s atexit.pyctx38si itbars no kwd args( t__doc__t__all__RRR RthasattrRt__name__RRRR(((s atexit.pycss