+
        v                         ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt	^ RI	t	 ! R R4      t
 ! R R]
4      t ! R R]4      t ! R R	]
4      t ! R
 R]
4      t ! R R4      t]! 4       tR# )    Nc                   @   a  ] tR t^t o RtR tRR ltR tR tRt	V t
R# )		LogTargetz#Abstract class for logging targets.c                    R V n         R # Nfdselfs   &9/usr/lib/python3.14/site-packages/firewall/core/logger.py__init__LogTarget.__init__   s	        c                    \        R 4      h)z%LogTarget.write is an abstract methodNotImplementedErrorr
   datalevelloggeris_debugs   &&&&&r   writeLogTarget.write       !"IJJr   c                    \        R 4      h)z%LogTarget.flush is an abstract methodr   r	   s   &r   flushLogTarget.flush    r   r   c                    \        R 4      h)z%LogTarget.close is an abstract methodr   r	   s   &r   closeLogTarget.close#   r   r   r   Nr   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r      s%     -KKK Kr   r   c                   <   a  ] tR t^+t o R tRR ltR tR tRtV t	R# )
_StdoutLogc                Z    \         P                  V 4       \        P                  V n        R # r   )r   r   sysstdoutr   r	   s   &r   r   _StdoutLog.__init__,   s    4 **r   c                \    V P                   P                  V4       V P                  4        R # r   )r   r   r   r   s   &&&&&r   r   _StdoutLog.write0   s    d

r   c                &    V P                  4        R # r   )r   r	   s   &r   r   _StdoutLog.close5   s    

r   c                :    V P                   P                  4        R # r   r   r   r	   s   &r   r   _StdoutLog.flush8   s    r   r   Nr    
r!   r"   r#   r$   r   r   r   r   r&   r'   r(   s   @r   r+   r+   +   s     
 r   r+   c                   &   a  ] tR t^@t o R tRtV tR# )
_StderrLogc                Z    \         P                  V 4       \        P                  V n        R # r   )r+   r   r-   stderrr   r	   s   &r   r   _StderrLog.__init__A   s    D!**r   r   N)r!   r"   r#   r$   r   r&   r'   r(   s   @r   r9   r9   @   s      r   r9   c                   <   a  ] tR t^Jt o R tRR ltR tR tRtV t	R# )
_SyslogLogc                    \         P                  V 4       \        P                  ! \        P
                  P                  \        P                  ^ ,          4      \        P                  \        P                  4       R# )r   N)r   r   syslogopenlogospathbasenamer-   argvLOG_PID
LOG_DAEMONr	   s   &r   r   _SyslogLog.__init__K   sC    4  	rww''4fnnfFWFWXr   c                "   R pV'       d   \         P                  pMW#P                  8  d   \         P                  pMbW#P                  8X  d   \         P
                  pMAW#P                  8X  d   \         P                  pM W#P                  8X  d   \         P                  pVP                  R4      '       d   VR \        V4      ^,
           p\        V4      ^ 8  d5   Vf   \         P                   ! V4       R # \         P                   ! WQ4       R # R # )N
)r@   	LOG_DEBUGINFO1LOG_INFOWARNINGLOG_WARNINGERRORLOG_ERRFATALLOG_CRITendswithlen)r
   r   r   r   r   prioritys   &&&&& r   r   _SyslogLog.writeX   s    ''H$!??..(!--,,&!>>,,&!??==#d)a-(Dt9q=d#h-	 r   c                0    \         P                  ! 4        R # r   )r@   closelogr	   s   &r   r   _SyslogLog.closen   s    r   c                    R # r    r	   s   &r   r   _SyslogLog.flushq   s    r   r\   Nr    r7   r(   s   @r   r>   r>   J   s     Y., r   r>   c                   J   a  ] tR t^xt o RtR	R ltR tR
R ltR tR t	Rt
V tR# )FileLogz6FileLog class.
File will be opened on the first write.c                H    \         P                  V 4       Wn        W n        R # r   )r   r   filenamemode)r
   ra   rb   s   &&&r   r   FileLog.__init__|   s    4  	r   c                T   V P                   '       d   R # \        P                  \        P                  ,          pV P                  P                  R4      '       d   V\        P                  ,          p\        P                  ! V P                  VR4      V n         \        P                  ! V P                   R4       \        P                  ! V P                   V P                  4      V n         \        P                  ! V P                   \        P                  \        P                  4       R # )Nai  )r   rB   O_CREATO_WRONLYrb   
startswithO_APPENDopenra   fchmodfdopenfcntlF_SETFD
FD_CLOEXEC)r
   flagss   & r   rj   FileLog.open   s    777

R[[(99$$R[[ E''$--6
		$''5!))DGGTYY/DGGU]]E,<,<=r   c                    V P                   '       g   V P                  4        V P                   P                  V4       V P                   P                  4        R # r   )r   rj   r   r   r   s   &&&&&r   r   FileLog.write   s1    wwwIIKdr   c                p    V P                   '       g   R # V P                   P                  4        R V n         R # r   )r   r   r	   s   &r   r   FileLog.close   s"    wwwr   c                b    V P                   '       g   R # V P                   P                  4        R # r   r5   r	   s   &r   r   FileLog.flush   s    wwwr   )r   ra   rb   N)wr    )r!   r"   r#   r$   r%   r   rj   r   r   r   r&   r'   r(   s   @r   r_   r_   x   s(     /
> r   r_   c                     a  ] tR t^t o RtR,tR-tR.tR/tR0t	^ t
]! 4       t]! 4       t]! 4       tR1R ltR tR2R ltR2R ltR2R ltR2R ltR tR	 tR
 tR tR tR t]R3R lt]R3R lt]R3R lt]R3R lt ]R3R lt!]R3R lt"R t#R t$R t%R t&R t'R t(R t)R t*R t+R t,R t-R3R  lt.R! t/R3R" lt0]R^ 3R# lt1]R^ 3R$ lt2]R^ 3R% lt3R3R& lt4R' t5R( t6R) t7R3R* lt8R+t9V t:R# )4Loggerah  
Format string:

%(class)s      Calling class the function belongs to, else empty
%(date)s       Date using Logger.date_format, see time module
%(domain)s     Full Domain: %(module)s.%(class)s.%(function)s
%(file)s       Filename of the module
%(function)s   Function name, empty in __main__
%(label)s      Label according to log function call from Logger.label
%(level)d      Internal logging level
%(line)d       Line number in module
%(module)s     Module name
%(message)s    Log message

Standard levels:

FATAL                 Fatal error messages
ERROR                 Error messages
WARNING               Warning messages
INFOx, x in [1..5]    Information
DEBUGy, y in [1..10]  Debug messages
NO_INFO               No info output
NO_DEBUG              No debug output
INFO_MAX              Maximum info level
DEBUG_MAX             Maximum debug level

x and y depend on info_max and debug_max from Logger class
initialization. See __init__ function.

Default logging targets:

stdout        Logs to stdout
stderr        Logs to stderr
syslog        Logs to syslog

Additional arguments for logging functions (fatal, error, warning, info
and debug):

nl       Disable newline at the end with nl=0, default is nl=1.
fmt      Format string for this logging entry, overloads global format
         string. Example: fmt="%(file)s:%(line)d %(message)s"
nofmt    Only output message with nofmt=1. The nofmt argument wins over
         the fmt argument.

Example:

from logger import log
log.setInfoLogLevel(log.INFO1)
log.setDebugLogLevel(log.DEBUG1)
for i in range(1, log.INFO_MAX+1):
    log.setInfoLogLabel(i, "INFO%d: " % i)
log.setFormat("%(date)s %(module)s:%(line)d [%(domain)s] %(label)s: "
              "%(level)d %(message)s")
log.setDateFormat("%Y-%m-%d %H:%M:%S")

fl = FileLog("/tmp/log", "a")
log.addInfoLogging("*", fl)
log.addDebugLogging("*", fl)
log.addInfoLogging("*", log.syslog, fmt="%(label)s%(message)s")

log.debug3("debug3")
log.debug2("debug2")
log.debug1("debug1")
log.info2("info2")
log.info1("info1")
log.warning("warning\n", nl=0)
log.error("error\n", nl=0)
log.fatal("fatal")
log.info(log.INFO1, "nofmt info", nofmt=1)

c           	     0   / V n         / V n        RV n        RV n        / V n        / V n        / V n        / V n        / V n        / V n	        V^8  d   \        RV,          4      hV^ 8  d   \        RV,          4      hV P                  V n        Wn        ^ V n        W n        V P!                  V P"                  R4       V P!                  V P$                  R4       V P!                  V P&                  R4       V P!                  V P                  R4       \)        ^V P                  ^,           4       FD  p\+        V RV,          V4       V P!                  VR4       \+        V RV,          R	 ! W4      4       KF  	  \)        ^V P                  ^,           4       FK  p\+        V R
V,          V4       V P-                  VRV,          4       \+        V RV,          R ! W4      4       KM  	  V P/                  V P0                  4       V P3                  V P                  4       V P5                  R4       V P7                  R4       V P9                  RV P:                  V P"                  V P&                  V P                  .4       T P9                  RV P<                  \)        V P0                  V P                  ^,           4       Uu. uF  qDNK  	  up4       T P?                  RV P<                  \)        ^V P                  ^,           4       Uu. uF  qDNK  	  up4       R# u upi u upi )zLogger class initialization zLogger: info_max %d is too lowzLogger: debug_max %d is too lowzFATAL ERROR: zERROR: z	WARNING: zINFO%dzinfo%dc                    a a V V3R  l# )c                 2   < SP                   ! SV .VO5/ VB # r   )infomessageargskwargsr
   xs   &*,r   <lambda>3Logger.__init__.<locals>.<lambda>.<locals>.<lambda>  s&    TYY7F%)F-3Fr   r\   r
   r   s   ffr   r   !Logger.__init__.<locals>.<lambda>       %r   zDEBUG%dz	DEBUG%d: zdebug%dc                    a a V V3R  l# )c                 2   < SP                   ! SV .VO5/ VB # r   )debugr   s   &*,r   r   r   ,  s&    TZZ7F%)F-3Fr   r\   r   s   ffr   r   r   ,  r   r   z%(label)s%(message)sz%d %b %Y %H:%M:%S*N) _level_debug_level_format_date_format_label_debug_label_logging_debug_logging_domains_debug_domains
ValueErrorrN   NO_INFOINFO_MAXNO_DEBUG	DEBUG_MAXsetInfoLogLabelrR   	TRACEBACKrP   rangesetattrsetDebugLogLabelsetInfoLogLevelrL   setDebugLogLevel	setFormatsetDateFormatsetInfoLoggingr;   r.   setDebugLogging)r
   info_max	debug_maxr   is   &&&  r   r   Logger.__init__   s      a<=HIIq=>JKK|| "TZZ9T^^R0TZZ3T\\;7 At}}q01FD(V+V4  ,F# 	  2 At~~12FD)f,f5!!&+*>?V$ 	  3 	TZZ(dmm,-../Ctzz4::t||.TU%

DMMA<M*NO*NQq*NO	
 	%4>>A3E*FG*FQq*FG	
 P Hs   4
L;
Lc                    \        V P                  V P                  ^,           4       FB  pWP                  9  d   K  V P                  V,           F  w  r#pVP	                  4        K  	  KD  	  R# )zClose all logging targetsN)r   rR   r   r   r   )r
   r   dummytargets   &   r   r   Logger.close?  sQ    4::t~~'9:EMM)(,e(<(<$u )= ;r   c                    V P                  V4       WP                  9   d   V P                  V,          # V P                  # )zGet info log level.)_checkDomainr   NOTHINGr
   domains   &&r   getInfoLogLevelLogger.getInfoLogLevelG  s3    &![[ ;;v&&||r   c                    V P                  V4       WP                  8  d   V P                  pWP                  8  d   V P                  pWP                  V&   R# )z#Set log level [NOTHING .. INFO_MAX]N)r   r   r   r   r
   r   r   s   &&&r   r   Logger.setInfoLogLevelN  sB    &!<<LLE== MME#Fr   c                    V P                  V4       WP                  9   d%   V P                  V,          V P                  ,           # V P                  # )zGet debug log level.)r   r   r   r   s   &&r   getDebugLogLevelLogger.getDebugLogLevelW  s@    &!&&&$$V,t}}<<}}r   c                    V P                  V4       V^ 8  d   ^ pWP                  8  d   V P                  pWP                  ,
          V P                  V&   R# )z+Set debug log level [NO_DEBUG .. DEBUG_MAX]N)r   r   r   r   r   s   &&&r   r   Logger.setDebugLogLevel^  sF    &!19E>>!NNE$)MM$9&!r   c                    V P                   # r   r   r	   s   &r   	getFormatLogger.getFormatg  s    ||r   c                    Wn         R # r   r   r
   r   s   &&r   r   Logger.setFormatj  s    r   c                    V P                   # r   r   r	   s   &r   getDateFormatLogger.getDateFormatm  s       r   c                    Wn         R # r   r   r   s   &&r   r   Logger.setDateFormatp  s    #r   c                    V P                  V4      pV F8  pV P                  WP                  V P                  R7       W P                  V&   K:  	  R# )KSet log label for level. Level can be a single level or an array
of levels.	min_level	max_levelN)
_getLevels_checkLogLevelrR   r   r   r
   r   labellevelss   &&& r   r   Logger.setInfoLogLabels  sC     'Et}}U!&KK r   c                    V P                  V^R7      pV F8  pV P                  WP                  V P                  R7       W P                  V&   K:  	  R# )r   r   r   N)r   r   rL   r   r   r   s   &&& r   r   Logger.setDebugLogLabel{  sI     3Et~~V',e$ r   Nc                .    V P                  WW4^ R7       R# )zSet info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_setLoggingr
   r   r   r   fmts   &&&&&r   r   Logger.setInfoLogging       	a@r   c                .    V P                  WW4^R7       R# )zSet debug log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   s   &&&&&r   r   Logger.setDebugLogging  r   r   c                .    V P                  WW4^ R7       R# )zAdd info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_addLoggingr   s   &&&&&r   addInfoLoggingLogger.addInfoLogging  r   r   c                .    V P                  WW4^R7       R# )zAdd debg log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   s   &&&&&r   addDebugLoggingLogger.addDebugLogging  r   r   c                .    V P                  WW4^ R7       R# )zDelete info log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   N_delLoggingr   s   &&&&&r   delInfoLoggingLogger.delInfoLogging  r   r   c                .    V P                  WW4^R7       R# )zDelete debug log target for domain and level. Level can be a single
level or an array of levels. Use level ALL to set for all levels.
If no format is specified, the default format will be used.r   Nr   r   s   &&&&&r   delDebugLoggingLogger.delDebugLogging  r   r   c                (    V P                  V^ R7      # )zDIs there currently any info logging for this log level (and
domain)?r   _isLoggingHerer
   r   s   &&r   isInfoLoggingHereLogger.isInfoLoggingHere       ""51"55r   c                (    V P                  V^R7      # )zEIs there currently any debug logging for this log level (and
domain)?r   r   r   s   &&r   isDebugLoggingHereLogger.isDebugLoggingHere  r   r   c                t    V P                  V4       ^ VR&   V P                  ! V P                  V.VO5/ VB  R# )zFatal error log.r   N)_checkKWargs_logrR   r
   r   r   r   s   &&*,r   fatalLogger.fatal  6    &!z		$**g777r   c                t    V P                  V4       ^ VR&   V P                  ! V P                  V.VO5/ VB  R# )z
Error log.r   N)r   r   rP   r   s   &&*,r   errorLogger.error  r  r   c                t    V P                  V4       ^ VR&   V P                  ! V P                  V.VO5/ VB  R# )zWarning log.r   N)r   r   rN   r   s   &&*,r   warningLogger.warning  s6    &!z		$,,9$9&9r   c                    V P                  V^V P                  R7       V P                  V4       ^ VR&   V P                  ! WP                  ,           V.VO5/ VB  R# )zxInformation log using info level [1..info_max].
There are additional infox functions according to info_max from
__init__r   r   N)r   r   r   r   r   r
   r   r   r   r   s   &&&*,r   r   Logger.info  sT     	EQ$--H&!z		%,,&A$A&Ar   c                    V P                  V^V P                  R7       V P                  V4       ^VR&   V P                  ! W.VO5/ VB  R# )zvDebug log using debug level [1..debug_max].
There are additional debugx functions according to debug_max
from __init__r   r   N)r   r   r   r   r  s   &&&*,r   r   Logger.debug  sK     	EQ$..I&!z		%24262r   c                j    V P                  V P                  \        P                  ! 4       . / R 7       R# ))r   r   N)r   r   	traceback
format_excr	   s   &r   	exceptionLogger.exception  s#    		$..)"6"6"8r"	Mr   c                F    W8  g   W8  d   \        R WV3,          4      hR# )z*Level %d out of range, should be [%d..%d].Nr   )r
   r   r   r   s   &&&&r   r   Logger._checkLogLevel  s/     1<Y/0  !2r   c                z    V'       g   R # VP                  4        F  pVR9  g   K  \        RV,          4      h	  R # )Nz0Key '%s' is not allowed as argument for logging.)nlr   nofmt)keysr   )r
   r   keys   && r   r   Logger._checkKWargs  s6    ;;=C00 FL  !r   c                H    V'       d   VR 8X  d   \        RV,          4      hR# )r|   zDomain '%s' is not valid.Nr  r   s   &&r   r   Logger._checkDomain  s!    286ABB &r   c                   WP                   8w  d   \        V\        4      '       g   \        V\        4      '       d   TpMV.pV FR  pV'       d!   V P	                  V^V P
                  R7       K+  V P	                  WP                  V P                  R7       KT  	  V# V'       d1   \        V P                  V P
                  4       Uu. uF  qDNK  	  ppV# \        V P                  V P                  4       Uu. uF  qDNK  	  ppV# u upi u upi )zGenerate log level array.r   )
ALL
isinstancelisttupler   r   rR   r   r   DEBUG1)r
   r   r   r   r   s   &&&  r   r   Logger._getLevels  s    HH%&&*UE*B*B''dnn'U''t}} ( 	   	 %*4;;%GH%G!%GH  &+4::t}}%EF%E!%EF IFs   
D7
D
c                   \        V\        4      '       g   \        V\        4      '       d   TpMV.pV FI  p\        VP                  \
        4      '       d   K%  \        RVP                  P                  ,          4      h	  V# )zGenerate target array.z '%s' is no valid logging target.)r!  r"  r#  
issubclass	__class__r   r   r!   )r
   r   targets_targets   &&  r   _getTargetsLogger._getTargets  sl    fd##z&%'@'@GhGGg//;; 69J9J9S9SS  
 r   c                   V'       d/   V P                   pV P                  p^V P                  ^,           3pM7V P                  pV P                  pV P
                  V P                  ^,           3p\        V4      ^ 8  d   VP                  4        \        V^ ,          V^,          4       FG  pWS9  d   K  W5,           F0  w  p pWb9  g   K  VP                  V. 4      P                  V4       K2  	  KI  	  R# )z#Generate dict with domain by level.N)r   r   r   r   r   rR   r   rU   clearr   
setdefaultappend)r
   r   r   r   _ranger   r   r   s   &&      r   _genDomainsLogger._genDomains  s     **H**H!+,F}}H}}Hjj$--!"34Fx=1NN6!9fQi0E$(0$u)''r299&A )8 1r   c                   V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F  pV F
  pWV3.W&   K  	  K  	  V P                  V4       R # r   )r   r   r+  r   r   r2  	r
   r   r   r   r   r   r   r)  r   s	   &&&&&&   r   r   Logger._setLogging(  sx    &!1""6***H}}HE!$*C#8"9 "  	"r   c                :   V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F/  pV F&  pVP                  V. 4      P                  WV34       K(  	  K1  	  V P                  V4       R # r   )r   r   r+  r   r   r/  r0  r2  r5  s	   &&&&&&   r   r   Logger._addLogging7  s    &!1""6***H}}HE!##E2.55vs6KL "  	"r   c           	        V P                  V4       V P                  W54      pV P                  V4      pV'       d   V P                  pMV P                  pV F  p	V F  pW9  d   K  WV3W,          9   d4   W,          P                  WV34       \        W,          4      ^ 8X  d   W KM  W0P                  8w  g   K_  \        RWVP                  P                  V3,          4      h	  K  	  V P                  V4       R# )r   zENo matching logging for level %d, domain %s, target %s and format %s.N)r   r   r+  r   r   removerU   r   r   r(  r!   r2  )
r
   r   r   r   r   r   r   r)  r   r   s
   &&&&&&    r   r   Logger._delLoggingF  s    &!1""6***H}}HF!)C(H,<<$++VS,AB8+,1$, HH$$H!6+;+;+D+DcJK  "  	"r   c                N   V P                  W4      pV'       g   R # VR,          R,           pV'       d   V P                  pMV P                  pWQ,           FL  w  p pVR8X  g>   VP                  V4      '       g'   \        P
                  ! VR,          V4      '       g   KK   R# 	  R # )Fr   .r   T)_genDictr   r   rh   fnmatchfnmatchcase)r
   r   r   _dictpoint_domainr   r   r   s   &&&     r   r   Logger._isLoggingHerea  s    e.X,**H}}H %-OO FE5#**622&&uX?? %4 r   c                   VP                   P                  ^ 8  dq   VP                   P                  ^ ,          pW!P                  9   dD   VP                  V,          pV P	                  VP
                  VP                   4      pV'       d   V# \        P                  ! VP                   4      pVP                   pVP                  VP                  9   d\   \        VP                  VP                  ,          R4      '       d/   VP                  VP                  ,          P                  V8X  d   R# VP                  P                  4        F  w  rt\        V\        P                  4      '       g   K'  \        WFP                  4      '       g   KD  \!        WFP                  4      p\        V\        P"                  4      '       g   K{  VP                  V8X  g   K  Vu # 	  R# )z5Function to get calling class. Returns class or None.	func_codeN)f_codeco_argcountco_varnamesf_locals
_getClass2r(  inspect	getmoduleco_name__dict__hasattr__code__itemsr!  types	ClassTypegetattrFunctionType)	r
   frameselfname_selfobjmodulecoder   values	   &&       r   	_getClassLogger._getClassw  s;    <<##a'||//2H>>)x0ooeoou||DJ""5<<0|| <<6??*5{CCOODLL1::dB !////1JE#u//3--#C6E!%););<< >>T1#&J 2 r   c                   VP                   P                  4        F:  p\        V\        P                  4      '       g   K%  VP
                  V8X  g   K8  Vu # 	  VP                   F   pV P                  WB4      pV'       g   K  Vu # 	  R# )z>Internal function to get calling class. Returns class or None.N)rN  valuesr!  rR  rU  rP  	__bases__rJ  )r
   rY  r[  r\  base_objs   &&&   r   rJ  Logger._getClass2  sj    \\((*E%!3!344>>T)J +
 MMD??4.Dt " r   c                v   ^ pRV9   d
   VR,          p^pRV9   d
   VR,          p^ pRV9   d
   VR,          pV P                  W4      pV'       g   R# \        V4      ^8  d   W#,          VR&   M'\        V4      ^8X  d   W#^ ,          ,          VR&   MW(R&   VR,          R,           p	V'       d   V P                  p
MV P                  p
. pW,           F  w  rpW9   d   K  VR8X  gE   V	P	                  VR,           4      '       g'   \
        P                  ! VR,          V4      '       g   KY  V'       g   V P                  pR	V9   d
   VR	,          pV'       d   VP                  VR,          WV4       MVP                  W(,          WV4       V'       d   VP                  R
WV4       VP                  V4       K  	  R# )r   r   r  r  Nr   r   r=  r   r   rJ   )
r>  rU   r   r   rh   r?  r@  r   r   r0  )r
   r   r   r   r   r   r  r  rA  rB  r   used_targetsr   r   s   &&&*,         r   r   Logger._log  ss   j)H6>Bf7OEe.t9q=&~E)Y!^&a0E)&)X,**H}}H'/#FG%#**6C<88&&uX??"llGF?$UmGLLy!15ILL%xHLLuH=##F+% (7r   c                0   . pRpV'       d&   V P                   pV P                  pV P                  pM$V P                  pV P                  pV P
                  pV FO  pVR8X  d&   WX,          V8  d   Rp\        V4      ^ 8  d   . p M&K/  WX,          V8  g   K>  VP                  V4       KQ  	  V'       g   \        V4      ^8  d   R# W9  d   R# \        P                  ! 4       p	V	'       dC   V	P                  '       d1   V	P                  R,          V P                  8X  d   V	P                  p	KJ  V	'       g   \        R4      hV	P                  R,          p
V
R,           pV F  pVP                  V4      '       g   K  . p M	  V	P                  p\        V
4      pWa,           Fr  pVP!                  R4      pV^ 8X  d   K  V^ 8  d   VRV pMTpV\        V4      8  d   V
P                  V4      '       g    R# KX  VP                  V
4      '       d   Kq   R# 	  RpW9   d	   Wq,          pR	VP"                  R
V	P$                  RV
RRRVP&                  RRRVRVR\(        P*                  ! V P,                  \(        P.                  ! 4       4      /	pVR,          R8X  d   RVR&   RpWa,           F  pVR8X  d   K  Rp M	  V P0                  P!                  R4      ^ 8  g9   V P0                  P!                  R4      ^ 8  g   V'       g   \        V4      ^ 8  d)   V P3                  V	4      pV'       d   VP4                  VR&   RVR,          ,           VR&   VR,          R8w  d$   VR;;,          RVR,          ,           ,          uu&   VR,          R8w  d$   VR;;,          RVR,          ,           ,          uu&   \        V4      ^8  d   V# VR,          R,           pV FB  pVP                  V4      '       g'   \6        P8                  ! VR,          V4      '       g   K@  Vu # 	  R# )zInternal function.Fr   TNr!   z Frame information not available.r=  r|   filelinerZ  classfunctionr   r   r   date?z	%(domain)z%(class))r   r   r   r   r   r   rU   r0  rK  currentframef_back	f_globalsr"   r   rh   rF  findco_filenamef_linenorM  timestrftimer   	localtimer   r]  r!   r?  r@  )r
   r   r   check_domainssimple_matchrA  r   r   r   fmodule_namepoint_moduleco_lenr   d	level_strdomain_neededrY  rB  s   &&&                 r   r>  Logger._genDict  s   %%E**H&&FKKE}}H[[F F}=E)#'L=)A-(*	 * =E)!((0  M 2Q 6   " AHHHZ!8DOO!KA?@@ kk*- #S(#F&&v.. "	 $ XX ;ooFC AAvQ2AJs1v~"--a00 1 ||K00 &  	?IBNNAJJkR

bYUDMM$"3"3T^^5EF

 # "E* ooF} M & LLk*a/||  ,1=!A%..#C!$g uX.h>R(OsU7^33O"(OsU:%666O}!LX,#F&&v..'2E2Eh3 3 	 $ r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )   
   )r   r    );r!   r"   r#   r$   r%   r   r   rR   r   rP   rN   r+   r.   r9   r;   r>   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r  r   r   r   r   r+  r2  r   r   r   r   r]  rJ  r   r>  r&   r'   r(   s   @r   rz   rz      se    FP CGEIEG \F\F\FD
L$:!$'- 47D A 58T A 47D A 58T A 47D A 58T A6
688:B3N
C*B, 14 # 14 # 14 #6, D3,lA Ar   rz   )r-   rR  ru  rK  r?  r@   r  rm   os.pathrB   r   r+   r9   r>   r_   rz   logr\   r   r   <module>r     s~             	K K( * ( (\%i %V{
 {
B h0r   