§
    …ßjý  ã                   óä  — d dl Z d dlZd dlmZ d dlmZ d dlZ	 d dlZd dlmZ	  e	ej
        ¦  «         e	d¦  «        k     r ed¦  «        ‚n# e$ r  ed¦  «        ‚w xY wd dlmZ d dlmZ d d	lmZmZmZmZ d dlZd d
lmZ d dlmZ d dlmZ dej
        ›dej
        ›�Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        Z  G d„ dej!        ¦  «        Z" G d„ de¦  «        Z#dS )é    N)Údatetime)Úpartial)Úparsez24.10.1z/gevent worker requires gevent 24.10.1 or higher)ÚPool)ÚStreamServer)ÚhubÚmonkeyÚsocketÚpywsgi)Úbase_environ)Ússl_context)ÚAsyncWorkerzgevent/z
 gunicorn/c                   ój   ‡ — e Zd ZdZdZd„ Zˆ fd„Zd„ Zd„ Zˆ fd„Z	ˆ fd„Z
ˆ fd„Zˆ fd	„Zˆ fd
„Zˆ xZS )ÚGeventWorkerNc           	      óò   — t          j        ¦   «          g }| j        D ]R}|                     t	          j        |j        t          j        |j                             ¦   «         ¬¦  «        ¦  «         ŒS|| _        d S )N)Úfileno)	r	   Ú	patch_allÚsocketsÚappendr
   ÚFAMILYÚSOCK_STREAMÚsockÚdetach)Úselfr   Úss      úK/var/www/html/venv/lib/python3.11/site-packages/gunicorn/workers/ggevent.pyÚpatchzGeventWorker.patch%   s�   € ÝÔÑÔÐð ˆØ”ð 	Bð 	BˆAØ�NŠN�6œ=¨¬µ6Ô3EØ01´·²±´ðAñ Aô Añ Bô Bð Bð BàˆŒˆˆó    c                 óâ   •— t          ¦   «                              ¦   «          | j        t          j        ¦   «         k    r1| j                             d| ¦  «         t          j        d¦  «         d S d S )Nz!Parent changed, shutting down: %sr   )	ÚsuperÚnotifyÚppidÚosÚgetppidÚlogÚinfoÚsysÚexit©r   Ú	__class__s    €r   r!   zGeventWorker.notify/   sZ   ø€ Ý‰Œ�ŠÑÔÐØŒ9�œ
™œÒ$Ð$ØŒH�MŠMÐ=¸tÑDÔDÐDÝŒH�Q‰KŒKˆKˆKˆKð %Ð$r   c                 ó@   — t          j        | j        j        d¦  «        S )NF)ÚgeventÚTimeoutÚcfgÚ	keepalive)r   s    r   Útimeout_ctxzGeventWorker.timeout_ctx5   s   € ÝŒ~˜dœhÔ0°%Ñ8Ô8Ð8r   c           
      óæ  — g }i }| j         j        rdt          | j         ¦  «        i}| j        D ]ì}|                     d¦  «         t          | j        ¦  «        }| j        �Ut          | j         ¦  «        }| 	                    dt          dœ¦  «          | j        |f| j        || j        | j        |dœ|¤Ž}n<t          | j        |¦  «        }t!          |f||dœ|¤Ž}| j         j        dk    rd|_        |                     ¦   «          |                     |¦  «         Œí| j        r/|                      ¦   «          t/          j        d¦  «         | j        °/	 |D ]}|                     ¦   «          Œt5          j        ¦   «         }t5          j        ¦   «         |z
  | j         j        k    rƒd}	|D ].}|j                             ¦   «         |j        j        k    r|	dz  }	Œ/|	sd S |                      ¦   «          t/          j        d¦  «         t5          j        ¦   «         |z
  | j         j        k    °ƒ| j                             d	| j         ¦  «         |D ]}| !                    d¬
¦  «         Œd S # tD          $ r Y d S w xY w)Nr   é   T)zwsgi.multithreadÚSERVER_SOFTWARE)ÚapplicationÚspawnr%   Úhandler_classÚenviron)Úhandler5   g      ð?r   z Worker graceful timeout (pid:%s))Útimeout)#r.   Úis_sslr   r   Úsetblockingr   Úworker_connectionsÚserver_classr   ÚupdateÚVERSIONÚwsgir%   Úwsgi_handlerr   r8   r   ÚworkersÚ
max_acceptÚstartr   Úaliver!   r,   ÚsleepÚcloseÚtimeÚgraceful_timeoutÚpoolÚ
free_countÚsizeÚwarningÚpidÚstopÚ	Exception)
r   ÚserversÚssl_argsr   rJ   r7   ÚserverÚhfunÚtsÚ	acceptings
             r   ÚrunzGeventWorker.run8   sº  € ØˆØˆàŒ8Œ?ð 	>Ø%¥{°4´8Ñ'<Ô'<Ð=ˆHà”ð 	#ð 	#ˆAØ�MŠM˜!ÑÔÐÝ˜Ô/Ñ0Ô0ˆDØÔ Ð,Ý& t¤xÑ0Ô0�Ø—’Ø(,Ý'.ð ð  ñ ô ð ð +˜Ô*Øð Ø#'¤9°D¸d¼hØ"&Ô"3¸Wð ð  ð ð ð  ��õ
 ˜tœ{¨AÑ.Ô.�Ý% aÐM°¸DÐMÐMÀHÐMÐM�Ø”8Ô# aÒ'Ð'Ø()�FÔ%à�LŠL‰NŒNˆNØ�NŠN˜6Ñ"Ô"Ð"Ð"àŒjð 	Ø�KŠK‰MŒMˆMÝŒL˜ÑÔÐð Œjð 	ð	à!ð ð �Ø—’‘”��õ ”‘”ˆBÝ”)‘+”+ Ñ" d¤hÔ&?Ò?Ð?Ø�	Ø%ð 'ð '�FØ”{×-Ò-Ñ/Ô/°6´;Ô3CÒCÐCØ! Q™˜	øð !ð Ø�Fà—’‘”�Ý”˜SÑ!Ô!Ð!õ ”)‘+”+ Ñ" d¤hÔ&?Ò?Ð?ð ŒH×ÒÐ?ÀÄÑJÔJÐJØ!ð 'ð '�Ø—’ A�Ñ&Ô&Ð&Ð&ð'ð 'øåð 	ð 	ð 	ØˆDˆDð	øøøs   ÅBI" ÇBI" É"
I0É/I0c                 óx   •— |                      d¦  «         t          ¦   «                              |||¦  «         d S )Nr2   )r;   r    r8   )r   ÚlistenerÚclientÚaddrr*   s       €r   r8   zGeventWorker.handlet   s9   ø€ ð 	×Ò˜1ÑÔÐÝ‰Œ�Š�x ¨Ñ.Ô.Ð.Ð.Ð.r   c                 ó–   •— 	 t          ¦   «                              ||||¦  «         d S # t          j        $ r Y d S t          $ r Y d S w xY w©N)r    Úhandle_requestr,   ÚGreenletExitÚ
SystemExit)r   Úlistener_nameÚreqr   r[   r*   s        €r   r^   zGeventWorker.handle_requestz   sj   ø€ ð	Ý‰GŒG×"Ò" =°#°t¸TÑBÔBÐBÐBÐBøÝÔ"ð 	ð 	ð 	ØˆDˆDÝð 	ð 	ð 	ØˆDˆDð	øøøs   ƒ$) ©A»	AÁAc                 óV   •— t          j        t          ¦   «         j        ||¦  «         d S r]   )r,   r5   r    Úhandle_quit©r   ÚsigÚframer*   s      €r   rd   zGeventWorker.handle_quit‚   ó&   ø€ õ 	Œ•U‘W”WÔ(¨#¨uÑ5Ô5Ð5Ð5Ð5r   c                 óV   •— t          j        t          ¦   «         j        ||¦  «         d S r]   )r,   r5   r    Úhandle_usr1re   s      €r   rj   zGeventWorker.handle_usr1‡   rh   r   c                 ó–   •— |                       ¦   «          t          j        ¦   «          t          ¦   «                              ¦   «          d S r]   )r   r   Úreinitr    Úinit_processr)   s    €r   rm   zGeventWorker.init_processŒ   s7   ø€ Ø�
Š
‰ŒˆÝŒ
‰ŒˆÝ‰Œ×ÒÑÔÐÐÐr   )Ú__name__Ú
__module__Ú__qualname__r=   rA   r   r!   r0   rW   r8   r^   rd   rj   rm   Ú__classcell__©r*   s   @r   r   r       sí   ø€ € € € € à€LØ€Lðð ð ðð ð ð ð ð9ð 9ð 9ð:ð :ð :ðx/ð /ð /ð /ð /ðð ð ð ð ð6ð 6ð 6ð 6ð 6ð
6ð 6ð 6ð 6ð 6ð
ð ð ð ð ð ð ð ð r   r   c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚGeventResponseNc                 ó0   — || _         || _        || _        d S r]   )ÚstatusÚheadersÚsent)r   rv   rw   Úclengths       r   Ú__init__zGeventResponse.__init__˜   s   € ØˆŒØˆŒØˆŒ	ˆ	ˆ	r   )rn   ro   rp   rv   rw   rx   rz   © r   r   rt   rt   ’   s2   € € € € € à€FØ€GØ€Dðð ð ð ð r   rt   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )ÚPyWSGIHandlerc                 óÜ  — t          j        | j        ¦  «        }t          j        | j        ¦  «        }||z
  }t	          | di ¦  «        }t          | j        t          ¦  «        r| j                             ¦   «         n| j        }t          ||| j
        ¦  «        }t          | d¦  «        r| j                             ¦   «         }ng }| j        j                             ||| j        |¦  «         d S )NÚresponse_headersrw   )r   ÚfromtimestampÚ
time_startÚtime_finishÚgetattrÚ
isinstancerv   ÚbytesÚdecodert   Úresponse_lengthÚhasattrrw   ÚitemsrS   r%   Úaccessr7   )r   rD   ÚfinishÚresponse_timeÚresp_headersrv   ÚrespÚreq_headerss           r   Úlog_requestzPyWSGIHandler.log_request    sÕ   € ÝÔ& t¤Ñ7Ô7ˆÝÔ'¨Ô(8Ñ9Ô9ˆØ ™ˆÝ˜tÐ%7¸Ñ<Ô<ˆõ *4°D´KÅÑ)GÔ)GÐX�”×#Ò#Ñ%Ô%Ð%ÈTÌ[ˆÝ˜f l°DÔ4HÑIÔIˆÝ�4˜Ñ#Ô#ð 	Øœ,×,Ò,Ñ.Ô.ˆKˆKàˆKØŒŒ×Ò˜t [°$´,ÀÑNÔNÐNÐNÐNr   c                 óp   •— t          ¦   «                              ¦   «         }| j        |d<   | j        |d<   |S )Nzgunicorn.sockÚRAW_URI)r    Úget_environr
   Úpath)r   Úenvr*   s     €r   r“   zPyWSGIHandler.get_environ°   s4   ø€ Ý‰gŒg×!Ò!Ñ#Ô#ˆØ#œ{ˆˆOÑØœˆˆI‰Øˆ
r   )rn   ro   rp   r�   r“   rq   rr   s   @r   r}   r}   ž   sJ   ø€ € € € € ðOð Oð Oð ð ð ð ð ð ð ð ð r   r}   c                   ó   — e Zd ZdS )ÚPyWSGIServerN)rn   ro   rp   r{   r   r   r—   r—   ·   s   € € € € € Ø€Dr   r—   c                   ó   — e Zd ZdZeZeZdS )ÚGeventPyWSGIWorkerz&The Gevent StreamServer based workers.N)rn   ro   rp   Ú__doc__r—   r=   r}   rA   r{   r   r   r™   r™   »   s   € € € € € Ø,Ð,Ø€LØ €L€L€Lr   r™   )$r#   r'   r   Ú	functoolsr   rH   r,   Úpackaging.versionr   Úparse_versionÚ__version__ÚRuntimeErrorÚImportErrorÚgevent.poolr   Úgevent.serverr   r   r	   r
   r   ÚgunicornÚgunicorn.http.wsgir   Úgunicorn.sockr   Úgunicorn.workers.base_asyncr   r?   r   rt   ÚWSGIHandlerr}   Ú
WSGIServerr—   r™   r{   r   r   ú<module>r©      sb  ðð
 
€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€ðNØ€M€M€Mð 9Ð8Ð8Ð8Ð8Ð8Ø€}�VÔ'Ñ(Ô(¨=¨=¸Ñ+CÔ+CÒCÐCØˆlÐLÑMÔMÐMð Døð	 ð Jð Jð JØ
ˆ,ÐHÑ
IÔ
IÐIðJøøøð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à €€€Ø +Ð +Ð +Ð +Ð +Ð +Ø %Ð %Ð %Ð %Ð %Ð %Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à%+Ô%7Ð%7Ð%7¸Ô9MÐ9MÐ
N€ðoð oð oð oð o�;ñ oô oð oðd	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ðð ð ð ð �FÔ&ñ ô ð ð2	ð 	ð 	ð 	ð 	�6Ô$ñ 	ô 	ð 	ð!ð !ð !ð !ð !˜ñ !ô !ð !ð !ð !s   šA ÁA