§
    …ßj«&  ã                   óè   — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlm Z  d d	l!m"Z"  G d
„ d¦  «        Z#dS )é    N)Údatetime)Úrandint)ÚSSLError)Úutil)ÚForbiddenProxyRequestÚInvalidHeaderÚInvalidHeaderNameÚInvalidHTTPVersionÚInvalidProxyLineÚInvalidRequestLineÚInvalidRequestMethodÚInvalidSchemeHeadersÚLimitRequestHeadersÚLimitRequestLineÚUnsupportedTransferCodingÚExpectationFailedÚConfigurationProblemÚObsoleteFolding)ÚResponseÚdefault_environ)Úreloader_engines)Ú	WorkerTmpc                   óœ   — e Zd Zd„ d                     ¦   «         D ¦   «         Zg Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚWorkerc                 ó>   — g | ]}t          t          d |z  ¦  «        ‘ŒS )zSIG%s)ÚgetattrÚsignal)Ú.0Úxs     úH/var/www/html/venv/lib/python3.11/site-packages/gunicorn/workers/base.pyú
<listcomp>zWorker.<listcomp>    s2   € ð ð ð °�w•v˜w¨™{Ñ+Ô+ð ð ð ó    z+ABRT HUP QUIT INT TERM USR1 USR2 WINCH CHLDc                 óf  — || _         d| _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        |j        dk    r%t          d|j        ¦  «        }|j        |z   | _        nt          j        | _        d| _        || _        t%          |¦  «        | _        dS )zÎ        This is called pre-fork so it shouldn't do anything to the
        current process. If there's a need to make process wide
        changes you'll want to do that in ``self.init_process()``.
        z	[booting]FNr   T)ÚageÚpidÚppidÚsocketsÚappÚtimeoutÚcfgÚbootedÚabortedÚreloaderÚnrÚmax_requestsr   Úmax_requests_jitterÚsysÚmaxsizeÚaliveÚlogr   Útmp)	Úselfr$   r&   r'   r(   r)   r*   r4   Újitters	            r    Ú__init__zWorker.__init__&   s­   € ð ˆŒØˆŒØˆŒ	ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒàˆŒàÔ˜aÒÐÝ˜Q Ô 7Ñ8Ô8ˆFØ #Ô 0°6Ñ 9ˆDÔÐå #¤ˆDÔàˆŒ
ØˆŒÝ˜S‘>”>ˆŒˆˆr"   c                 ó   — d| j         z  S )Nz<Worker %s>)r%   ©r6   s    r    Ú__str__zWorker.__str__C   s   € Ø˜tœxÑ'Ð'r"   c                 ó8   — | j                              ¦   «          dS )z×        Your worker subclass must arrange to have this method called
        once every ``self.timeout`` seconds. If you fail in accomplishing
        this task, the master process will murder your workers.
        N)r5   Únotifyr:   s    r    r=   zWorker.notifyF   s   € ð 	Œ�ŠÑÔÐÐÐr"   c                 ó   — t          ¦   «         ‚)z¼        This is the mainloop of a worker process. You should override
        this method in a subclass to provide the intended behaviour
        for your particular evil schemes.
        )ÚNotImplementedErrorr:   s    r    Úrunz
Worker.runN   s   € õ "Ñ#Ô#Ð#r"   c                 óZ  ‡ — ‰ j         j        r3‰ j         j                             ¦   «         D ]\  }}|t          j        |<   Œt          j        ‰ j         j        ‰ j         j        ‰ j         j	        ¬¦  «         t          j
        ¦   «          t          j        ¦   «         ‰ _        ‰ j        D ]*}t          j        |¦  «         t          j        |¦  «         Œ+‰ j        D ]}t          j        |¦  «         Œt          j        ‰ j                             ¦   «         ¦  «         ‰ j        ‰ j        d         gz   ‰ _        ‰ j                             ¦   «          ‰                      ¦   «          ‰ j         j        rRˆ fd„}‰ j                             d¦  «         t.          ‰ j         j                 } |‰ j         j        |¬¦  «        ‰ _        ‰                      ¦   «          ‰ j        r‰ j                             ¦   «          ‰ j                              ‰ ¦  «         d‰ _        ‰                      ¦   «          dS )zÑ        If you override this method in a subclass, the last statement
        in the function should be to call this method with
        super().init_process() so that the ``run()`` loop is initiated.
        )Ú
initgroupsr   c                 ó  •— ‰j                              d| ¦  «         d‰_        t          j        ‰j        d         d¦  «         ‰j                             ‰¦  «         t          j	        d¦  «         t          j        d¦  «         d S )NzWorker reloading: %s modifiedFé   ó   1çš™™™™™¹?r   )r4   Úinfor3   ÚosÚwriteÚPIPEr*   Ú
worker_intÚtimeÚsleepr1   Úexit)Úfnamer6   s    €r    Úchangedz$Worker.init_process.<locals>.changed{   sm   ø€ Ø”—’Ð=¸uÑEÔEÐEØ"�”
Ý”˜œ 1œ tÑ,Ô,Ð,Ø”×#Ò# DÑ)Ô)Ð)Ý”
˜3‘”�Ý”˜‘”���r"   z(Reloader is on. Use in development only!)Úextra_filesÚcallbackTN) r*   ÚenvÚitemsrH   Úenvironr   Úset_owner_processÚuidÚgidrB   ÚseedÚpiperJ   Úset_non_blockingÚclose_on_execr'   r5   ÚfilenoÚwait_fdsr4   Úinit_signalsÚreloadÚwarningr   Úreload_engineÚreload_extra_filesr-   Ú	load_wsgiÚstartÚpost_worker_initr+   r@   )r6   ÚkÚvÚpÚsrP   Úreloader_clss   `      r    Úinit_processzWorker.init_processV   s  ø€ ð Œ8Œ<ð 	"Øœœ×*Ò*Ñ,Ô,ð "ð "‘��1Ø !•”
˜1‘�åÔ˜tœxœ|¨T¬X¬\Ø*.¬(Ô*=ð	?ñ 	?ô 	?ð 	?õ 	Œ	‰Œˆõ ”G‘I”IˆŒ	Ø”ð 	"ð 	"ˆAÝÔ! !Ñ$Ô$Ð$ÝÔ˜qÑ!Ô!Ð!Ð!ð ”ð 	"ð 	"ˆAÝÔ˜qÑ!Ô!Ð!Ð!ÝÔ˜4œ8Ÿ?š?Ñ,Ô,Ñ-Ô-Ð-àœ¨¬	°!¬ ~Ñ5ˆŒàŒ×ÒÑ Ô Ð à×ÒÑÔÐð Œ8Œ?ð 	;ðð ð ð ð ð ŒH×ÒÐGÑHÔHÐHÝ+¨D¬HÔ,BÔCˆLØ(˜L°T´XÔ5PØ29ð;ñ ;ô ;ˆDŒMð 	�ŠÑÔÐØŒ=ð 	"ØŒM×ÒÑ!Ô!Ð!àŒ×!Ò! $Ñ'Ô'Ð'ð ˆŒØ�Š‰
Œ
ˆ
ˆ
ˆ
r"   c                 ó   — 	 | j                              ¦   «         | _        d S # t          $ rÑ}| j        j        s‚ | j                             |¦  «         | j        �&|j        �| j         	                    |j        ¦  «         t          j        ¦   «         5 }t          j        ||¬¦  «         t          j        |                     ¦   «         ¦  «        | _        d d d ¦  «         n# 1 swxY w Y   Y d }~d S Y d }~d S d }~ww xY w)N)Úfile)r(   ÚwsgiÚSyntaxErrorr*   r`   r4   Ú	exceptionr-   ÚfilenameÚadd_extra_fileÚioÚStringIOÚ	tracebackÚprint_exceptionr   Úmake_fail_appÚgetvalue)r6   ÚeÚ	tb_strings      r    rd   zWorker.load_wsgi’   sv  € ð	EØœŸš™œˆDŒIˆIˆIøÝð 	Eð 	Eð 	EØ”8”?ð ØàŒH×Ò˜qÑ!Ô!Ð!àŒ}Ð(¨Q¬ZÐ-CØ”×,Ò,¨Q¬ZÑ8Ô8Ð8å”‘”ð E )ÝÔ)¨!°)Ð<Ñ<Ô<Ð<Ý Ô.¨y×/AÒ/AÑ/CÔ/CÑDÔD�”	ðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eð Eøøøøð	Eøøøs:   ‚" ¢
C=¬A'C8ÂAC!ÃC8Ã!C%	Ã%C8Ã(C%	Ã)C8Ã8C=c                 óð  — | j         D ]!}t          j        |t          j        ¦  «         Œ"t          j        t          j        | j        ¦  «         t          j        t          j        | j        ¦  «         t          j        t          j        | j        ¦  «         t          j        t          j        | j	        ¦  «         t          j        t          j
        | j        ¦  «         t          j        t          j        | j        ¦  «         t          j        t          j        d¦  «         t          j        t          j
        d¦  «         t          t          d¦  «        r!t          j        | j        d         ¦  «         d S d S )NFÚset_wakeup_fdrD   )ÚSIGNALSr   ÚSIG_DFLÚSIGQUITÚhandle_quitÚSIGTERMÚhandle_exitÚSIGINTÚSIGWINCHÚhandle_winchÚSIGUSR1Úhandle_usr1ÚSIGABRTÚhandle_abortÚsiginterruptÚhasattrr}   rJ   )r6   rj   s     r    r_   zWorker.init_signals¢   s  € à”ð 	-ð 	-ˆAÝŒM˜!�Vœ^Ñ,Ô,Ð,Ð,åŒ•f”n dÔ&6Ñ7Ô7Ð7ÝŒ•f”n dÔ&6Ñ7Ô7Ð7ÝŒ•f”m TÔ%5Ñ6Ô6Ð6ÝŒ•f”o tÔ'8Ñ9Ô9Ð9ÝŒ•f”n dÔ&6Ñ7Ô7Ð7ÝŒ•f”n dÔ&7Ñ8Ô8Ð8õ 	Ô�FœN¨EÑ2Ô2Ð2ÝÔ�FœN¨EÑ2Ô2Ð2å•6˜?Ñ+Ô+ð 	/ÝÔ  ¤¨1¤Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/r"   c                 ó8   — | j                              ¦   «          d S )N)r4   Úreopen_files©r6   ÚsigÚframes      r    rˆ   zWorker.handle_usr1¶   s   € ØŒ×ÒÑÔÐÐÐr"   c                 ó   — d| _         d S )NF)r3   r�   s      r    rƒ   zWorker.handle_exit¹   s   € ØˆŒ
ˆ
ˆ
r"   c                 ó˜   — d| _         | j                             | ¦  «         t          j        d¦  «         t          j        d¦  «         d S )NFrF   r   )r3   r*   rK   rL   rM   r1   rN   r�   s      r    r�   zWorker.handle_quit¼   s=   € ØˆŒ
àŒ×Ò˜DÑ!Ô!Ð!ÝŒ
�3‰ŒˆÝŒ�‰Œˆˆˆr"   c                 óp   — d| _         | j                             | ¦  «         t          j        d¦  «         d S )NFrD   )r3   r*   Úworker_abortr1   rN   r�   s      r    rŠ   zWorker.handle_abortÃ   s0   € ØˆŒ
ØŒ×Ò˜dÑ#Ô#Ð#ÝŒ�‰Œˆˆˆr"   c                 óH	  — t          j        ¦   «         }|pd}t          |t          t          t
          t          t          t          t          t          t          t          t          t          t          t           t"          f¦  «        �r d}d}t          |t          ¦  «        rdt%          |¦  «        z  }�n.t          |t          ¦  «        rdt%          |¦  «        z  }�nt          |t
          ¦  «        rdt%          |¦  «        z  }�nÜt          |t          ¦  «        rdt%          |¦  «        z  }d}�n±t          |t          ¦  «        rdt%          |¦  «        z  }d	}�n†t          |t          ¦  «        rdt%          |¦  «        z  }�n]t          |t          t          f¦  «        r-dt%          |¦  «        z  }|st'          |d
¦  «        r|j        }�nt          |t          ¦  «        rdt%          |¦  «        z  }nìt          |t           ¦  «        rd}t%          |¦  «        }d}nÃt          |t          ¦  «        rd}dt%          |¦  «        z  }d}n—t          |t          ¦  «        rdt%          |¦  «        z  }not          |t          ¦  «        rd}d}d}nSt          |t          ¦  «        rdt%          |¦  «        z  }n+t          |t"          ¦  «        rd}dt%          |¦  «        z  }d}d}	| j                             |	                     |d         t%          |¦  «        ¬¦  «        ¦  «         n˜t'          |d¦  «        r7t'          |d¦  «        r'| j                             d|j        |j        ¦  «         nKt'          |d¦  «        r!| j                             d|j        ¦  «         n| j                             d¦  «         d	}d}d}|�¢t          j        ¦   «         |z
  }
t7          ||| j        ¦  «        }|d         |d<   t%          |d         ¦  «        |d <   t;          ||| j        ¦  «        }|›d!|›�|_        t?          |¦  «        |_         | j         !                    ||||
¦  «         	 tE          j#        ||||¦  «         d S # tH          $ r | j         %                    d"¦  «         Y d S w xY w)#N)Ú éÿÿÿÿi�  zBad RequestzInvalid Request Line '%s'zInvalid Method '%s'zInvalid HTTP Version '%s'z%siõ  iô  ÚreqzExpectation Failedi¡  zRequest Header Fields Too LargezError parsing headers: '%s'i¯  z'%s'Ú	ForbiddenzRequest forbiddeni“  z%Invalid request from ip={ip}: {error}r   )ÚipÚerrorÚuriÚmethodzError handling request %s %szError handling request %sz$Error handling request (no URI read)zInternal Server Errorr—   ÚREMOTE_ADDRrD   ÚREMOTE_PORTú zFailed to send error message.)&r   ÚnowÚ
isinstancer   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r   ÚstrrŒ   r™   r4   ra   Úformatrq   rž   r�   r   r*   r   ÚstatusÚlenÚresponse_lengthÚaccessr   Úwrite_errorÚ	ExceptionÚdebug)r6   r™   ÚclientÚaddrÚexcÚrequest_startÚ
status_intÚreasonÚmesgÚmsgÚrequest_timerU   Úresps                r    Úhandle_errorzWorker.handle_errorÈ   sr  € Ý œ™œˆØÐ�xˆÝ�cÝÕ 4Ý¥Õ/@ÝÕ1ÝÕ3Ý Õ";Ý ¥/Õ3DÝð
ñ ô ñ A	ð ˆJØ"ˆFå˜#Õ1Ñ2Ô2ð '!Ø2µS¸±X´XÑ=�‘Ý˜CÕ!5Ñ6Ô6ð %!Ø,­s°3©x¬xÑ7�‘Ý˜CÕ!3Ñ4Ô4ð #!Ø2µS¸±X´XÑ=�‘Ý˜CÕ!:Ñ;Ô;ð !!Ø�c #™hœh‘�Ø �
‘
Ý˜CÕ!5Ñ6Ô6ð !Ø�c #™hœh‘�Ø �
‘
Ý˜C¥Ñ1Ô1ð !Ø�c #™hœh‘�‘Ý˜CÕ"3µ]Ð!DÑEÔEð !Ø�c #™hœh‘�Øð "�w s¨EÑ2Ô2ð "Øœ'�CùÝ˜CÕ!1Ñ2Ô2ð !Ø�c #™hœh‘��Ý˜CÕ!2Ñ3Ô3ð !Ø-�Ý˜3‘x”x�Ø �
�
Ý˜CÕ!4Ñ5Ô5ð !Ø:�Ø4µs¸3±x´xÑ?�Ø �
�
Ý˜CÕ!1Ñ2Ô2ð !Ø¥ C¡¤Ñ(��Ý˜CÕ!6Ñ7Ô7ð 	!Ø$�Ø*�Ø �
�
Ý˜CÕ!5Ñ6Ô6ð !Ø�c #™hœh‘��Ý˜C¥Ñ*Ô*ð !Ø$�Ø¥ C¡¤Ñ(�Ø �
à9ˆCØŒH×Ò˜SŸZšZ¨4°¬7½#¸c¹(¼(˜ZÑCÔCÑDÔDÐDÐDå�s˜EÑ"Ô"ð K¥w¨s°HÑ'=Ô'=ð KØ”×"Ò"Ð#AÀ3Ä:ÈsÌwÑWÔWÐWÐWÝ˜˜eÑ$Ô$ð KØ”×"Ò"Ð#>ÀÄÑHÔHÐHÐHà”×"Ò"Ð#IÑJÔJÐJØˆJØ,ˆFØˆDàˆ?Ý#œ<™>œ>¨MÑ9ˆLÝ% c¨6°4´8Ñ<Ô<ˆGØ%)¨!¤WˆG�MÑ"Ý%(¨¨a¬¡\¤\ˆG�MÑ"Ý˜C ¨¬Ñ2Ô2ˆDØ%/ Z Z°°Ð8ˆDŒKÝ#& t¡9¤9ˆDÔ ØŒH�OŠO˜D # w°Ñ=Ô=Ð=ð	<ÝÔ˜V Z°¸Ñ>Ô>Ð>Ð>Ð>øÝð 	<ð 	<ð 	<ØŒH�NŠNÐ:Ñ;Ô;Ð;Ð;Ð;Ð;ð	<øøøs   Ñ Q9 Ñ9$R!Ò R!c                 ó:   — | j                              d¦  «         d S )Nzworker: SIGWINCH ignored.)r4   r¬   )r6   r�   rO   s      r    r†   zWorker.handle_winch  s   € àŒ�ŠÐ2Ñ3Ô3Ð3Ð3Ð3r"   N)Ú__name__Ú
__module__Ú__qualname__Úsplitr~   rJ   r8   r;   r=   r@   rl   rd   r_   rˆ   rƒ   r�   rŠ   r·   r†   © r"   r    r   r      s  € € € € € ðð Ø5×;Ò;Ñ=Ô=ðñ ô €Gð €Dð"ð "ð "ð:(ð (ð (ðð ð ð$ð $ð $ð:ð :ð :ðxEð Eð Eð /ð /ð /ð( ð  ð  ðð ð ðð ð ðð ð ð
S<ð S<ð S<ðj4ð 4ð 4ð 4ð 4r"   r   )$rt   rH   r   r1   rL   rv   r   Úrandomr   Ússlr   Úgunicornr   Úgunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Úgunicorn.http.wsgir   r   Úgunicorn.reloaderr   Úgunicorn.workers.workertmpr   r   r½   r"   r    ú<module>rÅ      s¢  ðð
 
€	€	€	Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ðA4ð A4ð A4ð A4ð A4ñ A4ô A4ð A4ð A4ð A4r"   