Ë
    Ü_Ëi[ð  ã                  óÎ  — d dl mZ 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Zd dl	Z	d dl
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ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$ d d
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS erLd dlmTZT d dlUmVZV d dlWmXZX d dlmYZY d dlZm[Z[m\Z\ d dl]m^Z^m_Z_m`Z` d dlambZbmcZc d dldmeZe d dlLmfZf d d lgmhZhmiZi d d!ljmkZk d"Zl G d#„ d$«      Zm G d%„ d&e-«      Zn G d'„ d(«      Zo G d)„ d*«      Zp G d+„ d,«      Zqy)-é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚAsyncGeneratorÚMappingÚMutableMappingÚNoReturnÚOptionalÚSequenceÚUnion)ÚDEFAULT_CODEC_OPTIONS)Ú_csotÚhelpers_shared)Ú_validate_session_write_concern)Ú_handle_reauth)Úcommand)ÚMAX_BSON_SIZEÚMAX_MESSAGE_SIZEÚMAX_WIRE_VERSIONÚMAX_WRITE_BATCH_SIZEÚORDERED_TYPES)	ÚAutoReconnectÚConfigurationErrorÚDocumentTooLargeÚExecutionTimeoutÚInvalidOperationÚNotPrimaryErrorÚOperationFailureÚPyMongoErrorÚWaitQueueTimeoutError)ÚHelloÚHelloCompat)Ú_get_timeout_detailsÚformat_timeout_details)Ú_async_cond_waitÚ_async_create_conditionÚ_async_create_lock)Ú_CONNECTION_LOGGERÚ_ConnectionStatusMessageÚ
_debug_logÚ _verbose_connection_error_reason)ÚConnectionCheckOutFailedReasonÚConnectionClosedReason)ÚAsyncNetworkingInterfaceÚasync_receive_messageÚasync_sendall)ÚPoolOptions)Ú	SSLErrorsÚ_CancellationContextÚ_configured_protocol_interfaceÚ_raise_connection_failure)ÚReadPreference)Ú_add_to_command)ÚSERVER_TYPE)ÚSocketChecker)ÚCodecOptions)ÚObjectId)Ú_AuthContext)ÚAsyncClientSession)ÚAsyncMongoClientÚ_MongoClientErrorHandler)ÚSnappyContextÚZlibContextÚZstdContext)Ú_OpMsgÚ_OpReply)ÚReadConcern)Ú_ServerMode)Ú_AddressÚ_CollationIn)ÚWriteConcernFc                  óà  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d$d„Zd%d„Z	 	 	 	 	 	 d&d„Zd'd„Zd'd„Zd'd„Z	d(d„Z
d)d	„Z	 	 	 	 	 	 d*d
„Zd(d„Zeej                   eddddddddddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d„«       Zd,d„Zd-d„Zd.d„Zd/d„Z	 	 	 	 	 	 	 	 d0d„Zd1d2d„Z	 	 	 	 	 	 d3d„Zd4d„Zd'd„Zd5d„Z	 	 	 	 	 	 	 	 d6d„Zd7d„Zd'd„Zd8d„Z d9d„Z!d:d„Z"d;d „Z#d;d!„Z$d<d"„Z%d=d#„Z&y)>ÚAsyncConnectiona  Store a connection with some metadata.

    :param conn: a raw connection object
    :param pool: a Pool instance
    :param address: the server's (host, port)
    :param id: the id of this socket in it's pool
    :param is_sdam: SDAM connections do not call hello on creation
    c                ó
  — t        j                  |«      | _        || _        || _        || _        || _        d| _        t        j                  «       | _
        d| _        d| _        t        | _        t        | _        t"        | _        t&        | _        d| _        d| _        d| _        d| _        |j2                  j4                  | _        |j8                  | _        |j:                  | _        |j2                  j<                  | _        d | _         tC        «       | _"        d | _#        d | _$        d | _%        |jL                  | _'        | jN                  jQ                  «       | _)        d| _*        tW        «       | _,        |j2                  | _        d| _-        d | _.        d | _/        d| _0        d| _1        d| _2        | j2                  jf                  | _4        d| _5        |jl                  | _6        t        j                  «       | _7        d | _8        y )NFg        )9ÚweakrefÚrefÚpool_refÚconnÚaddressÚidÚis_sdamÚclosedÚtimeÚ	monotonicÚlast_checkin_timeÚperformed_handshakeÚis_writabler   Úmax_wire_versionr   Úmax_bson_sizer   Úmax_message_sizer   Úmax_write_batch_sizeÚsupports_sessionsÚhello_okÚ	is_mongosÚop_msg_enabledÚoptsÚ_event_listenersÚ	listenersÚenabled_for_cmapÚenabled_for_loggingÚ_compression_settingsÚcompression_settingsÚcompression_contextr9   Úsocket_checkerÚoidc_token_gen_idÚnegotiated_mechsÚauth_ctxÚgenÚpool_genÚget_overallÚ
generationÚreadyr3   Úcancel_contextÚmore_to_comeÚ
service_idÚserver_connection_idÚ
pinned_txnÚpinned_cursorÚactiveÚsocket_timeoutÚlast_timeoutÚconnect_rttÚ
_client_idÚcreation_timeÚ_cluster_time)ÚselfrP   ÚpoolrQ   rR   rS   s         ú\/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/asynchronous/pool.pyÚ__init__zAsyncConnection.__init__y   s¥  € ô  Ÿ™ DÓ)ˆŒØˆŒ	ØˆŒØˆŒØˆŒØˆŒÜ!%§¡Ó!1ˆÔØ#(ˆÔ Ø!&ˆÔÜ 0ˆÔÜ*ˆÔÜ 0ˆÔÜ$8ˆÔ!Ø!&ˆÔØ#ˆŒØˆŒØ#ˆÔØŸ™×3Ñ3ˆŒØ $× 5Ñ 5ˆÔØ#'×#;Ñ#;ˆÔ Ø$(§I¡I×$CÑ$CˆÔ!ØY]ˆÔ Ü-:«_ˆÔØ04ˆÔà59ˆÔØ04ˆŒð Ÿ™ˆŒØŸ-™-×3Ñ3Ó5ˆŒØˆŒ
Ü4HÓ4JˆÔØ—I‘IˆŒ	Ø"'ˆÔà.2ˆŒØ37ˆÔ!ð  ˆŒØ"ˆÔØˆŒØ ŸI™I×4Ñ4ˆÔØˆÔØŸ/™/ˆŒÜ!Ÿ^™^Ó-ˆÔà!ˆÕó    c                ó|   — || j                   k(  ry|| _         | j                  j                  j                  |«       y)z?Cache last timeout to avoid duplicate calls to conn.settimeout.N)r{   rP   Úget_connÚ
settimeout)r€   Útimeouts     r‚   Úset_conn_timeoutz AsyncConnection.set_conn_timeout´   s3   € à�d×'Ñ'Ò'ØØ#ˆÔØ�	‰	×Ñ×%Ñ% gÕ.r„   c                óÈ  — t        j                  «       }|€2| j                  s%| j                  | j                  j
                  «       y t        j                  «       }|€| j                  }||z
  }|dk  rIt        | j                  «      }t        |«      }d|d›d|d›d|› �}t        |dd|ddœ| j                  «      ‚|�t        |dz  «      |d	<   | j                  |«       |S )
Nr   z5operation would exceed time limit, remaining timeout:z.5fz <= network round trip time:ú é2   ©ÚokÚerrmsgÚcodeéè  Ú	maxTimeMS)r   Ú	remainingrt   r‰   rb   rz   Úget_rttr|   r#   r$   r   rZ   Úint)	r€   ÚclientÚcmdrˆ   ÚrttÚmax_time_msÚtimeout_detailsÚ	formattedr�   s	            r‚   Úapply_timeoutzAsyncConnection.apply_timeout»   sÿ   € ô —/‘/Ó#ˆØˆ?à×$Ò$Ø×%Ñ% d§i¡i×&>Ñ&>Ô?Øä�m‰m‹oˆØˆ;Ø×"Ñ"ˆCØ ‘mˆØ˜Š?Ü2°4·9±9Ó=ˆOÜ.¨Ó?ˆIàLÈWÐUXÈMÐYuÐvyÐz}Ðu~Ð~ð  AJð  @Kð  LˆFÜ"ØØØ F°BÑ7Ø×%Ñ%ó	ð ð ˆ?Ü" ;°Ñ#5Ó6ˆC�ÑØ×Ñ˜gÔ&Øˆr„   c                ó.   — d| _         | j                  rJ ‚y ©NT)rw   rx   ©r€   s    r‚   Úpin_txnzAsyncConnection.pin_txnÚ   s   € ØˆŒØ×%Ò%Ð%Ð%Ð%r„   c                ó.   — d| _         | j                  rJ ‚y rž   )rx   rw   rŸ   s    r‚   Ú
pin_cursorzAsyncConnection.pin_cursorÞ   s   € Ø!ˆÔØ—?’?Ð"Ð"�?r„   c              ƒ  óº   K  — | j                  «       }|r|j                  | «      ƒ d {  –—†  y | j                  t        j                  «      ƒ d {  –—†  y 7 Œ-7 Œ­w©N)rO   ÚcheckinÚ
close_connr-   ÚSTALE)r€   r�   s     r‚   ÚunpinzAsyncConnection.unpinâ   sH   è ø€ Ø�}‰}‹ˆÙØ—,‘,˜tÓ$×$Ñ$à—/‘/Ô"8×">Ñ">Ó?×?Ñ?ð %øà?ús!   ‚'A©Aª'AÁAÁAÁAc                óÌ   — | j                   j                  s"| j                  s| j                   j                  rd| _        t
        j                  diS t
        j                  dddiS )NTé   ÚhelloOk)rb   Ú
server_apir_   Úload_balancedra   r"   ÚCMDÚ
LEGACY_CMDrŸ   s    r‚   Ú	hello_cmdzAsyncConnection.hello_cmdé   sO   € ð �9‰9×Ò 4§=¢=°D·I±I×4KÒ4KØ"&ˆDÔÜ—O‘O QÐ'Ð'ä×*Ñ*¨A¨y¸$Ð?Ð?r„   c              ƒ  óB   K  — | j                  d d «      ƒ d {  –—† S 7 Œ­wr¤   )Ú_hellorŸ   s    r‚   ÚhellozAsyncConnection.helloò   s   è ø€ Ø—[‘[  tÓ,×,Ð,Ð,ús   ‚˜™c              ƒ  ó"  K  — | j                  «       }| j                   }d}|rad| _        | j                  j                  |d<   | j                  r| j                  j
                  |d<   | j                  j                  rbd|d<   n\|�Z||d<   |€J ‚t        |dz  «      |d<   d}| j                  j                  r(| j                  | j                  j                  |z   «       | j                  j                  }|r€|j                  d	k(  r+|j                  r|j                  d
z   |j                  z   |d<   ddlm} |j                   j#                  || j$                  «      }|r|j'                  «       }	|	�|	|d<   nd }|rt)        j*                  «       }
| j-                  d|d|¬«      ƒ d {  –—† }|rt)        j*                  «       
z
  | _        t1        ||¬«      }|j2                  | _        |j4                  | _        |j6                  | _        |j8                  | _        |j:                  | _        |j<                  d uxr |j>                  | _         |j<                  | _        |jB                  | _!        |jD                  tF        jH                  tF        jJ                  tF        jL                  tF        jN                  tF        jP                  fv | _)        |jD                  tF        jT                  k(  | _+        |jD                  tF        jX                  k(  | _-        |r8| j                  r,| j                  j]                  |j
                  «      }|| _/        d| _0        |jb                  | _2        |r|jf                  | _4        |r(|jk                  |«       |jm                  «       r|| _7        | j                  j                  rR|jp                  sts        d«      ‚|jp                  | _8        | jt                  jw                  | jp                  «      | _<        |S 7 �Œc­w)NFTr–   ÚcompressionÚloadBalancedÚtopologyVersionr‘   ÚmaxAwaitTimeMSÚDEFAULTú.ÚsaslSupportedMechsr   ©ÚauthÚspeculativeAuthenticateÚadmin)Úpublish_eventsÚexhaust_allowed)Ú	awaitablez`Driver attempted to initialize in load balancing mode, but the server does not support this mode)=r°   rX   rb   Úmetadatarh   Úcompressorsr­   r•   Úconnect_timeoutr‰   Ú_credentialsÚ	mechanismÚusernameÚsourceÚpymongo.asynchronousr½   r<   Úfrom_credentialsrQ   Úspeculate_commandrU   rV   r   r|   r!   rY   rZ   r[   r\   r]   Úlogical_session_timeout_minutesÚis_readabler^   r_   Úserver_typer8   Ú	RSPrimaryÚRSSecondaryÚ	RSArbiterÚRSOtherÚRSGhostÚis_replÚ
StandaloneÚis_standaloneÚMongosr`   Úget_compression_contextri   ra   Úconnection_idrv   Úsasl_supported_mechsrl   Úparse_responseÚspeculate_succeededrm   ru   r   ro   Úgetrq   )r€   Útopology_versionÚheartbeat_frequencyr—   Úperforming_handshakerÂ   Úcredsr½   rm   Úspeculative_authenticateÚstartÚdocr³   Úctxs                 r‚   r²   zAsyncConnection._helloõ   s…  è ø€ ð
 �n‰nÓˆØ#'×#;Ñ#;Ð;ÐØˆ	ÙØ'+ˆDÔ$Ø ŸI™I×.Ñ.ˆC�‰MØ×(Ò(Ø%)×%>Ñ%>×%JÑ%J��MÑ"Ø�y‰y×&Ò&Ø&*��NÒ#ØÐ)Ø%5ˆCÐ!Ñ"Ø&Ð2Ð2Ð2Ü$'Ð(;¸dÑ(BÓ$CˆCÐ Ñ!ØˆIà�y‰y×(Ò(Ø×%Ñ% d§i¡i×&?Ñ&?ÐBUÑ&UÔVà—	‘	×&Ñ&ˆÙØ�‰ )Ò+°·²Ø,1¯L©L¸3Ñ,>ÀÇÁÑ,O�Ð(Ñ)Ý1à×(Ñ(×9Ñ9¸%ÀÇÁÓNˆHÙØ+3×+EÑ+EÓ+GÐ(Ø+Ð7Ø5M�CÐ1Ò2àˆHáÜ—N‘NÓ$ˆEØ—L‘L ¨#¸eÐU^�LÓ_×_ˆÙÜ#Ÿ~™~Ó/°%Ñ7ˆDÔÜ�c YÔ/ˆØ ×,Ñ,ˆÔØ %× 6Ñ 6ˆÔØ"×0Ñ0ˆÔØ %× 6Ñ 6ˆÔØ$)×$>Ñ$>ˆÔ!à×1Ñ1¸Ð=ÒSÀ%×BSÑBSð 	Ôð ?D×>cÑ>cˆÔ,ØŸ™ˆŒØ×(Ñ(Ü×!Ñ!Ü×#Ñ#Ü×!Ñ!Ü×ÑÜ×Ñð-
ð 
ˆŒð #×.Ñ.´+×2HÑ2HÑHˆÔØ×*Ñ*¬k×.@Ñ.@Ñ@ˆŒÙ D×$=Ò$=Ø×+Ñ+×CÑCÀE×DUÑDUÓVˆCØ'*ˆDÔ$à"ˆÔØ$)×$7Ñ$7ˆÔ!ÙØ$)×$>Ñ$>ˆDÔ!ÙØ×#Ñ# EÔ*Ø×+Ñ+Ô-Ø (�”Ø�9‰9×"Ò"Ø×#Ò#Ü(ðAóð ð $×.Ñ.ˆDŒOØ"Ÿm™m×/Ñ/°·±Ó@ˆDŒOØˆðW `ûs   ‚F'PÆ)PÆ*I#Pc              ƒ  óÐ   K  — | j                  d «      ƒ d {  –—† }|j                  | _        |j                  «       }|d   }t        j                  || j
                  «       |S 7 ŒL­w©Nr   )Úreceive_messagert   Úunpack_responser   Ú_check_command_responserZ   )r€   ÚreplyÚunpacked_docsÚresponse_docs       r‚   Ú_next_replyzAsyncConnection._next_replyJ  s`   è ø€ Ø×*Ñ*¨4Ó0×0ˆØ!×.Ñ.ˆÔØ×-Ñ-Ó/ˆØ$ QÑ'ˆÜ×.Ñ.¨|¸T×=RÑ=RÔSØÐð 1ús   ‚A&—A$˜AA&TNFc              ƒ  óî  K  — | j                  ||«       t        ||«      }t        |t        «      st	        |«      }|�|j
                  s|
�t        d«      ‚| j                  |«       |r|j                  |||| «       | j                  |||«       |r| j                  nd}t        |xr |j
                   «      }| j                  r| j                  |«       	 t        | ||| j                  ||||||| j                   || j"                  ||	|
| j$                  | j                  ||||¬«      ƒ d{  –—† S 7 Œ# t&        t(        f$ r ‚ t*        $ r$}| j-                  |«      ƒ d{  –—†7   Y d}~yd}~ww xY w­w)a·  Execute a command or raise an error.

        :param dbname: name of the database on which to run the command
        :param spec: a command document as a dict, SON, or mapping object
        :param read_preference: a read preference
        :param codec_options: a CodecOptions instance
        :param check: raise OperationFailure if there are errors
        :param allowable_errors: errors to ignore if `check` is True
        :param read_concern: The read concern for this command.
        :param write_concern: The write concern for this command.
        :param parse_write_concern_error: Whether to parse the
            ``writeConcernError`` field in the command response.
        :param collation: The collation for this command.
        :param session: optional AsyncClientSession instance.
        :param client: optional AsyncMongoClient for gossipping $clusterTime.
        :param retryable_write: True if this command is a retryable write.
        :param publish_events: Should we publish events for this command?
        :param user_fields: Response fields that should be decoded
            using the TypeDecoders from codec_options, passed to
            bson._decode_all_selective.
        Nz3Collation is unsupported for unacknowledged writes.)Úparse_write_concern_errorÚ	collationÚcompression_ctxÚ
use_op_msgÚunacknowledgedÚuser_fieldsrÁ   Úwrite_concern)Úvalidate_sessionr   Ú
isinstancer   ÚdictÚacknowledgedr   Úadd_server_apiÚ	_apply_toÚsend_cluster_timerd   Úboolra   Ú_raise_if_not_writabler   r`   rQ   r[   ri   r   r   ÚBaseExceptionr5   )r€   ÚdbnameÚspecÚread_preferenceÚcodec_optionsÚcheckÚallowable_errorsÚread_concernr÷   rñ   rò   Úsessionr–   Úretryable_writerÀ   rö   rÁ   rd   rõ   Úerrors                       r‚   r   zAsyncConnection.commandR  sy  è ø€ ðR 	×Ñ˜f gÔ.Ü1°'¸=ÓIˆô ˜$¤Ô.Ü˜“:ˆDàÐ%¨×)CÒ)CÀyÐGXÜ$Ð%ZÓ[Ð[à×Ñ˜DÔ!ÙØ×Ñ˜d O°_ÀdÔKØ×Ñ˜t W¨fÔ5Ù&4�D—N’N¸$ˆ	Ü˜mÒN°M×4NÑ4NÐ0NÓOˆØ×ÒØ×'Ñ'¨Ô7ð	8Ü ØØØØ—‘ØØØØØØ Ø—‘ØØ×"Ñ"ØØ*CØ#Ø $× 8Ñ 8Ø×.Ñ.Ø-Ø'Ø /Ø+ô-÷ ð ð ùô0 !¤/Ð2ò 	Øäò 	8Ø×0Ñ0°Ó7×7Ö7ûð	8üsO   ‚CE5ÃAD6 Ä/D4Ä0D6 Ä3E5Ä4D6 Ä6E2ÅE-Å"E%Å#E-Å(E5Å-E2Å2E5c              ƒ  ó,  K  — | j                   �)|| j                   kD  rt        d|| j                   fz  «      ‚	 t        | j                  j                  |«      ƒ d{  –—†  y7 Œ# t
        $ r$}| j                  |«      ƒ d{  –—†7   Y d}~yd}~ww xY w­w)z}Send a raw BSON message or raise ConnectionFailure.

        If a network exception is raised, the socket is closed.
        NzfBSON document too large (%d bytes) - the connected server supports BSON document sizes up to %d bytes.)r[   r   r0   rP   r†   r  r5   )r€   ÚmessageÚmax_doc_sizer  s       r‚   Úsend_messagezAsyncConnection.send_message¬  sŠ   è ø€ ð
 ×ÑÐ)¨l¸T×=OÑ=OÒ.OÜ"ð?ØBNÐPT×PbÑPbÐAcñdóð ð
	8Ü §	¡	× 2Ñ 2°GÓ<×<Ò<ùäò 	8Ø×0Ñ0°Ó7×7Ö7ûð	8üsL   ‚6B¹#A$ ÁA"ÁA$ Á!BÁ"A$ Á$	BÁ-BÂBÂBÂBÂBÂBc              ƒ  ó®   K  — 	 t        | || j                  «      ƒ d{  –—† S 7 Œ# t        $ r$}| j                  |«      ƒ d{  –—†7   Y d}~yd}~ww xY w­w)zzReceive a raw BSON message or raise ConnectionFailure.

        If any exception is raised, the socket is closed.
        N)r/   r\   r  r5   )r€   Ú
request_idr  s      r‚   ré   zAsyncConnection.receive_message½  sI   è ø€ ð
	8Ü.¨t°ZÀ×AVÑAVÓW×WÐWÐWùäò 	8Ø×0Ñ0°Ó7×7Ö7ûð	8üsB   ‚A„% ž#Ÿ% ¢A£% ¥	A®AÁAÁAÁAÁAÁAc                óB   — |r| j                   st        dddddœ«      ‚yy)z^Raise NotPrimaryError on unacknowledged write if this socket is not
        writable.
        znot primaryr   i{'  r�   N)rY   r   )r€   rõ   s     r‚   r   z&AsyncConnection._raise_if_not_writableÈ  s+   € ñ  $×"2Ò"2ä! -¸À]Ð\aÑ1bÓcÐcð #3ˆ>r„   c              ƒ  óf   K  — | j                  d«       | j                  ||«      ƒ d{  –—†  y7 Œ­w)zÐSend unack OP_MSG.

        Can raise ConnectionFailure or InvalidDocument.

        :param msg: bytes, an OP_MSG message.
        :param max_doc_size: size in bytes of the largest document in `msg`.
        TN)r   r  )r€   Úmsgr  s      r‚   Úunack_writezAsyncConnection.unack_writeÐ  s,   è ø€ ð 	×#Ñ# DÔ)Ø×Ñ  \Ó2×2Ò2ús   ‚'1©/ª1c              ƒ  óÞ   K  — | j                  |d«      ƒ d{  –—†  | j                  |«      ƒ d{  –—† }|j                  |«      }t        j                  || j
                  «       |S 7 ŒP7 Œ9­w)zÐSend "insert" etc. command, returning response as a dict.

        Can raise ConnectionFailure or OperationFailure.

        :param request_id: an int.
        :param msg: bytes, the command message.
        r   N)r  ré   Úcommand_responser   rë   rZ   )r€   r  r  r  rì   Úresults         r‚   Úwrite_commandzAsyncConnection.write_commandÛ  sg   è ø€ ð ×Ñ  QÓ'×'Ð'Ø×*Ñ*¨:Ó6×6ˆØ×'Ñ'¨Ó6ˆô 	×.Ñ.¨v°t×7LÑ7LÔMØˆð 	(øØ6ús   ‚A-˜A)™A-±A+²8A-Á+A-c           	   ƒ  óÄ  K  — |r| j                   rd| _        d| _        | j                  �s1| j                  j                  }|r"ddlm} |j                  || |¬«      ƒ d{  –—†  d| _        t        j                  «       | j                  z
  }| j                  r?| j                  €J ‚| j                  j                  | j                  | j                  |«       | j                   rwt#        j$                  t&        j(                  «      rSt+        t"        t,        j.                  | j0                  | j                  d   | j                  d   | j                  |¬«       yyyy7 Œü­w)	zhAuthenticate to the server if needed.

        Can raise ConnectionFailure or OperationFailure.
        NFr   r¼   )ÚreauthenticateTrª   ©r  ÚclientIdÚ
serverHostÚ
serverPortÚdriverConnectionIdÚ
durationMS)rX   rm   rr   rb   rÆ   rÊ   r½   ÚauthenticaterU   rV   r~   re   rd   Úpublish_connection_readyrQ   rR   rf   r(   ÚisEnabledForÚloggingÚDEBUGr*   r)   Ú
CONN_READYr}   )r€   r  râ   r½   Údurations        r‚   r"  zAsyncConnection.authenticateí  s  è ø€ ñ Ø×'Ò'à $�”ØˆDŒJØ�z‹zØ—I‘I×*Ñ*ˆEÙÝ5à×'Ñ'¨¨tÀNÐ'ÓS×SÐSØˆDŒJÜ—~‘~Ó'¨$×*<Ñ*<Ñ<ˆHØ×$Ò$Ø—~‘~Ð1Ð1Ð1Ø—‘×7Ñ7¸¿¹ÀdÇgÁgÈxÔXØ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×?Ñ?Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'+§w¡wØ'öð -[Ð'ð ð
 Tús   ‚AE Á!EÁ"C=E c                ó<   — |r|j                   |urt        d«      ‚yy)zƒValidate this session before use with client.

        Raises error if the client is not the one that created the session.
        z>Can only use session with the AsyncMongoClient that started itN)Ú_clientr   )r€   r–   r	  s      r‚   rø   z AsyncConnection.validate_session  s-   € ñ Ø�‰ fÑ,Ü&ØTóð ð -ð r„   c              ƒ  ó  K  — | j                   ry| j                  «       ƒ d{  –—†  |rÙ| j                  r?| j                  €J ‚| j                  j	                  | j
                  | j                  |«       | j                  r�t        j                  t        j                  «      r]t        t        t        j                  | j                  | j
                  d   | j
                  d   | j                  t!        |«      |¬«       yyyy7 Œà­w)z$Close this connection with a reason.Nr   rª   ©r  r  r  r  r   Úreasonr  )rT   Ú_close_connre   rd   Úpublish_connection_closedrQ   rR   rf   r(   r$  r%  r&  r*   r)   ÚCONN_CLOSEDr}   r+   )r€   r-  s     r‚   r¦   zAsyncConnection.close_conn  sÎ   è ø€ à�;Š;ØØ×ÑÓ × Ð ÙØ×$Ò$Ø—~‘~Ð1Ð1Ð1Ø—‘×8Ñ8¸¿¹ÀtÇwÁwÐPVÔWØ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'+§w¡wÜ;¸FÓCØ ö	ð -[Ð'ð	 ð 	!ús   ‚!D£D¤C!Dc              ƒ  óÐ   K  — | j                   ryd| _         | j                  j                  «        	 | j                  j	                  «       ƒ d{  –—†  y7 Œ# t
        $ r Y yw xY w­w)zClose this connection.NT)rT   rs   ÚcancelrP   ÚcloseÚ	ExceptionrŸ   s    r‚   r.  zAsyncConnection._close_conn1  sS   è ø€ à�;Š;ØØˆŒØ×Ñ×"Ñ"Ô$ð	Ø—)‘)—/‘/Ó#×#Ò#ùÜò 	Ùð	üs:   ‚/A&²A ÁAÁA ÁA&ÁA Á	A#Á A&Á"A#Á#A&c                ó    — t         r/| j                  j                  | j                  j                  «      S | j                  j                  «       S )z?Return True if we know socket has been closed, False otherwise.)Ú_IS_SYNCrj   Úsocket_closedrP   r†   Ú
is_closingrŸ   s    r‚   Úconn_closedzAsyncConnection.conn_closed>  s9   € åØ×&Ñ&×4Ñ4°T·Y±Y×5GÑ5GÓHÐHà—9‘9×'Ñ'Ó)Ð)r„   c                ó.   — |r|j                  ||«       yy)zAdd $clusterTime.N)Ú_send_cluster_time)r€   r   r	  r–   s       r‚   rþ   z!AsyncConnection.send_cluster_timeE  s   € ñ Ø×%Ñ% g¨wÕ7ð r„   c                ór   — | j                   j                  r!t        || j                   j                  «       yy)zAdd server_api parameters.N)rb   r¬   r7   )r€   r   s     r‚   rü   zAsyncConnection.add_server_apiO  s(   € à�9‰9×ÒÜ˜G T§Y¡Y×%9Ñ%9Õ:ð  r„   c                ó6   — t        j                  «       | _        y r¤   ©rU   rV   rW   rŸ   s    r‚   Úupdate_last_checkin_timez(AsyncConnection.update_last_checkin_timeT  s   € Ü!%§¡Ó!1ˆÕr„   c                ó   — || _         y r¤   )rY   )r€   rY   s     r‚   Úupdate_is_writablez"AsyncConnection.update_is_writableW  s
   € Ø&ˆÕr„   c                óD   — t        j                  «       | j                  z
  S )z9Seconds since this socket was last checked into its pool.r>  rŸ   s    r‚   Úidle_time_secondsz!AsyncConnection.idle_time_secondsZ  s   € ä�~‰~Ó $×"8Ñ"8Ñ8Ð8r„   c              ƒ  ó  K  — | j                   rd }nt        j                  }| j                  |«      ƒ d {  –—†  t	        |t
        t        gt        ¢­«      r.t        | j                  «      }t        | j                  ||¬«       y ‚ 7 ŒP­w)N©rš   )rr   r-   ÚERRORr¦   rù   ÚIOErrorÚOSErrorr2   r#   rb   r5   rQ   )r€   r  r-  Údetailss       r‚   r5   z)AsyncConnection._raise_connection_failure^  sk   è ø€ ð  �:Š:Ø‰Fä+×1Ñ1ˆFØ�o‰o˜fÓ%×%Ð%ä�eœg¤wÐ;´Ñ;Ô<Ü*¨4¯9©9Ó5ˆGÜ% d§l¡l°EÈ7ÖSàð 	&ús   ‚4B	¶B·AB	c                ó4   — | j                   |j                   k(  S r¤   )rP   ©r€   Úothers     r‚   Ú__eq__zAsyncConnection.__eq__z  s   € Ø�y‰y˜EŸJ™JÑ&Ð&r„   c                ó   — | |k(   S r¤   © rK  s     r‚   Ú__ne__zAsyncConnection.__ne__}  s   € Ø˜5‘=Ð Ð r„   c                ó,   — t        | j                  «      S r¤   )ÚhashrP   rŸ   s    r‚   Ú__hash__zAsyncConnection.__hash__€  s   € Ü�D—I‘I‹Ðr„   c                ó„   — dj                  t        | j                  «      | j                  xr dxs dt	        | «      «      S )NzAsyncConnection({}){} at {}z CLOSEDÚ )ÚformatÚreprrP   rT   rR   rŸ   s    r‚   Ú__repr__zAsyncConnection.__repr__ƒ  s8   € Ø,×3Ñ3Ü�—‘‹OØ�K‰KÒ%˜IÒ+¨Üˆt‹Hó
ð 	
r„   )
rP   r.   r�   ÚPoolrQ   ztuple[str, int]rR   r•   rS   rÿ   )rˆ   úOptional[float]ÚreturnÚNone)r–   zAsyncMongoClient[Any]r—   z"Optional[MutableMapping[str, Any]]r[  rZ  ©r[  r\  )r[  údict[str, Any])r[  úHello[dict[str, Any]])rß   zOptional[Any]rà   úOptional[int]r[  r_  )"r  Ústrr  úMutableMapping[str, Any]r  rF   r  úCodecOptions[Mapping[str, Any]]r  rÿ   r  z#Optional[Sequence[Union[str, int]]]r  zOptional[ReadConcern]r÷   zOptional[WriteConcern]rñ   rÿ   rò   zOptional[_CollationIn]r	  úOptional[AsyncClientSession]r–   úOptional[AsyncMongoClient[Any]]r
  rÿ   rÀ   rÿ   rö   zOptional[Mapping[str, Any]]rÁ   rÿ   r[  r^  )r  Úbytesr  r•   r[  r\  )r  r`  r[  zUnion[_OpReply, _OpMsg])rõ   rÿ   r[  r\  )r  rf  r  r•   r[  r\  )r  r•   r  rf  r  rc  r[  r^  )F)r  rÿ   r[  r\  )r–   re  r	  rd  r[  r\  )r-  zOptional[str]r[  r\  ©r[  rÿ   )r   rb  r	  rd  r–   re  r[  r\  )r   rb  r[  r\  )rY   rÿ   r[  r\  )r[  Úfloat)r  r  r[  r	   )rL  r   r[  rÿ   ©r[  r•   )r[  ra  )'Ú__name__Ú
__module__Ú__qualname__Ú__doc__rƒ   r‰   rœ   r    r¢   r¨   r°   r³   r²   rï   r   r6   ÚPRIMARYr   r   r  ré   r   r  r  r"  rø   r¦   r.  r9  rþ   rü   r?  rA  rC  r5   rM  rP  rS  rX  rO  r„   r‚   rK   rK   o   sk  „ ñð9"à&ð9"ð ð9"ð !ð	9"ð
 ð9"ð ó9"óv/ðØ+ðØ2Tðà	óó>&ó#ó@ó@ó-ðSà'ðSð +ðSð 
ó	Sójð ð
 (6×'=Ñ'=Ø9NØØ@DØ.2Ø04Ø*/Ø,0Ø04Ø26Ø %Ø#Ø37Ø %ð#W8àðW8ð 'ðW8ð %ð	W8ð
 7ðW8ð ðW8ð >ðW8ð ,ðW8ð .ðW8ð $(ðW8ð *ðW8ð .ðW8ð 0ðW8ð ðW8ð ðW8ð  1ð!W8ð" ð#W8ð$ 
ò%W8ó ðW8ór8ó"	8ódó	3ðØðØ$)ðØ:Yðà	óô$ ðDØ5ðØ@\ðà	óóó*ó*ð8à)ð8ð .ð8ð 0ð	8ð
 
ó8ó;ó
2ó'ó9óó8'ó!óô
r„   rK   c                  ó   — e Zd ZdZy)Ú_PoolClosedErrorzZInternal error raised when a thread tries to get a connection from a
    closed pool.
    N)rj  rk  rl  rm  rO  r„   r‚   rp  rp  ‹  s   „ òr„   rp  c                  ó4   — e Zd Zdd„Zdd„Zd	d„Zd
d„Zdd„Zy)Ú_PoolGenerationc                óN   — t        j                  t        «      | _        d| _        y rè   )ÚcollectionsÚdefaultdictr•   Ú_generationsÚ_generationrŸ   s    r‚   rƒ   z_PoolGeneration.__init__’  s   € ä1<×1HÑ1HÌÓ1MˆÔàˆÕr„   c                ó<   — |€| j                   S | j                  |   S )z,Get the generation for the given service_id.©rw  rv  ©r€   ru   s     r‚   rÞ   z_PoolGeneration.get˜  s%   € àÐØ×#Ñ#Ð#Ø× Ñ  Ñ,Ð,r„   c                ó   — | j                   S )z"Get the Pool's overall generation.)rw  rŸ   s    r‚   rp   z_PoolGeneration.get_overallž  s   € à×ÑÐr„   c                ó²   — | xj                   dz  c_         |€)| j                  D ]  }| j                  |xx   dz  cc<   Œ y| j                  |xx   dz  cc<   y)z2Increment the generation for the given service_id.rª   Nry  rz  s     r‚   Úincz_PoolGeneration.inc¢  s\   € à×Ò˜AÑÕØÐØ"×/Ñ/ò 3�
Ø×!Ñ! *Ó-°Ñ2Ô-ñ3ð ×Ñ˜jÓ)¨QÑ.Ô)r„   c                ó*   — || j                  |«      k7  S )z?Return if the given generation for a given service_id is stale.)rÞ   ©r€   rn   ru   s      r‚   Ústalez_PoolGeneration.stale«  s   € à�d—h‘h˜zÓ*Ñ*Ð*r„   Nr]  )ru   úOptional[ObjectId]r[  r•   ri  )ru   r�  r[  r\  ©rn   r•   ru   r�  r[  rÿ   )rj  rk  rl  rƒ   rÞ   rp   r}  r€  rO  r„   r‚   rr  rr  ‘  s   „ óó-ó ó/ô+r„   rr  c                  ó   — e Zd ZdZdZdZy)Ú	PoolStaterª   é   é   N)rj  rk  rl  ÚPAUSEDÚREADYÚCLOSEDrO  r„   r‚   r„  r„  °  s   „ Ø€FØ€EØ�Fr„   r„  c                  ó  — e Zd Z	 	 d	 	 	 	 	 	 	 dd„Zdd„Zedd„«       Z	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 d	 	 	 	 	 dd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd d„Zej                   	 d	 	 	 d!d„«       Zd"d„Z	 d	 	 	 	 	 d#d„Zd$d„Zd%d„Zd&d„Zdd„Zy)'rY  Nc                óè  — |j                   rt        j                  | _        nt        j                  | _        d| _        t        j                  «       | _        t        «       | _
        t        «       | _        t        | j                  «      | _        d| _        d| _        d| _        t%        «       | _        t)        j*                  «       | _        || _        || _        || _        | j2                   xr: | j0                  j4                  duxr  | j0                  j4                  j6                  | _        | j2                   | _        t        | j                  «      | _        d| _        | j0                  j>                  | _        | j>                  stA        d«      | _        t        | j                  «      | _        | j0                  jB                  | _"        d| _#        || _$        | j6                  r\| j0                  j4                  €J ‚| j0                  j4                  jK                  | j.                  | j0                  jL                  «       | j8                  r~tO        jP                  tR        jT                  «      r[tW        tN        ftX        jZ                  | jH                  | j.                  d   | j.                  d   dœ| j0                  jL                  ¤Ž d| _.        t        «       | _/        d| _0        d| _1        y)z´
        :param address: a (hostname, port) tuple
        :param options: a PoolOptions instance
        :param is_sdam: whether to call hello for each new AsyncConnection
        rª   r   NÚinf©r  r  r  r  )2Úpause_enabledr„  r‡  Ústaterˆ  Ú_check_interval_secondsrt  ÚdequeÚconnsÚsetÚactive_contextsr'   Úlockr&   Ú_max_connecting_condÚactive_socketsÚnext_connection_idrY   rr  rn   ÚosÚgetpidÚpidrQ   rb   rS   rc   re   rf   Ú	size_condÚrequestsÚmax_pool_sizerh  Úmax_connectingÚ_max_connectingÚ_pendingr}   Úpublish_pool_createdÚnon_default_optionsr(   r$  r%  r&  r*   r)   ÚPOOL_CREATEDÚoperation_countÚ_Pool__pinned_socketsÚncursorsÚntxns)r€   rQ   ÚoptionsrS   Ú	client_ids        r‚   rƒ   zPool.__init__·  sI  € ð × Ò Ü"×)Ñ)ˆD�Jä"Ÿ™ˆDŒJð ()ˆÔ$ô :E×9JÑ9JÓ9LˆŒ
Ü:=»%ˆÔÜ&Ó(ˆŒ	Ü$;¸D¿I¹IÓ$FˆÔ!ØˆÔà"#ˆÔà+/ˆÔô
 #Ó$ˆŒÜ—9‘9“;ˆŒØˆŒØˆŒ	ØˆŒð —‘Ðò <Ø—	‘	×*Ñ*°$Ð6ò<à—	‘	×*Ñ*×;Ñ;ð 	Ôð
 (,§|¡|Ð#3ˆÔ ô
 1°·±Ó;ˆŒØˆŒØ!ŸY™Y×4Ñ4ˆÔØ×!Ò!Ü!& u£ˆDÔô %<¸D¿I¹IÓ$FˆÔ!Ø#Ÿy™y×7Ñ7ˆÔØˆŒØ#ˆŒØ× Ò Ø—9‘9×-Ñ-Ð9Ð9Ð9Ø�I‰I×&Ñ&×;Ñ;Ø—‘˜dŸi™i×;Ñ;ôð ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"ðä0×=Ñ=ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?ñð —)‘)×/Ñ/òð %&ˆÔô 7:³eˆÔØˆŒØˆ�
r„   c           	   ƒ  ó~  K  — | j                   4 ƒd {  –—†  | j                  t        j                  k7  rÝt        j                  | _        | j                  rG| j
                  j                  €J ‚| j
                  j                  j                  | j                  «       | j                  rit        j                  t        j                  «      rFt        t        t        j                   | j"                  | j                  d   | j                  d   ¬«       d d d «      ƒd {  –—†  y 7 �Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr   rª   r�  )r•  r�  r„  rˆ  re   rb   rc   Úpublish_pool_readyrQ   rf   r(   r$  r%  r&  r*   r)   Ú
POOL_READYr}   rŸ   s    r‚   rr   z
Pool.ready  sá   è ø€ à—9‘9÷ 	ñ 	Ø�z‰zœYŸ_™_Ò,Ü&Ÿ_™_�”
Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×AÑAÀ$Ç,Á,ÔOØ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× CÑ CØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?õ÷	÷ 	ñ 	ùð 	ø÷ 	÷ 	ñ 	üsE   ‚D=“D#”D=—C;D(ÄD=ÄD&ÄD=Ä&D=Ä(D:Ä.D1Ä/D:Ä6D=c                ó<   — | j                   t        j                  k(  S r¤   )r�  r„  r‰  rŸ   s    r‚   rT   zPool.closed  s   € à�z‰zœY×-Ñ-Ñ-Ð-r„   c              ƒ  óF	  K  — | j                   }| j                  4 ƒd {  –—†  | j                  r	 d d d «      ƒd {  –—†  y | j                  j                  r:|r8| j                  j
                  s"| j                   t        j                  c}| _         | j                  j                  |«       t        j                  «       }| j                  |k7  r|| _        d| _        d| _        |€'| j                  t!        j"                  «       c}| _        ntt!        j"                  «       }t!        j"                  «       }	| j                  D ]4  }
|
j$                  |k(  r|j'                  |
«       Œ$|	j'                  |
«       Œ6 |}|	| _        |rt        j(                  | _         | j*                  j-                  «        | j                  j-                  «        |r!| j.                  D ]  }|j1                  «        Œ d d d «      ƒd {  –—†  | j                  j2                  }|�r t4        sIt7        j8                  D �
cg c]!  }
|
j;                  t<        j>                  «      ‘Œ# c}
ddiŽƒ d {  –—†  n.D ])  }
|
j;                  t<        j>                  «      ƒ d {  –—†  Œ+ | j@                  r|€J ‚|jC                  | jD                  «       | jF                  rktI        jJ                  tL        jN                  «      rGtQ        tH        tR        j>                  | jT                  | jD                  d   | jD                  d   ¬«       y y y |t        j                  k7  r¤| j@                  r"|€J ‚|jW                  | jD                  ||¬«       | jF                  rjtI        jJ                  tL        jN                  «      rGtQ        tH        tR        jX                  | jT                  | jD                  d   | jD                  d   |¬«       t4        sIt7        j8                  D �
cg c]!  }
|
j;                  t<        jZ                  «      ‘Œ# c}
ddiŽƒ d {  –—†  y D ])  }
|
j;                  t<        jZ                  «      ƒ d {  –—†  Œ+ y 7 �ŒO7 �Œ57 �Œy# 1 ƒd {  –—†7  sw Y   �ŒŠxY wc c}
w 7 �Œ07 �Œc c}
w 7 Œc7 Œ8­w)Nr   Úreturn_exceptionsTrª   r�  )ru   Úinterrupt_connections)r  r  r  r  Ú	serviceId).r�  rœ  rT   rb   rŽ  r­   r„  r‡  rn   r}  r™  rš  r›  r—  r¥  r’  rt  r‘  ru   Úappendr‰  r–  Ú
notify_allr”  r2  rc   r6  ÚasyncioÚgatherr¦   r-   ÚPOOL_CLOSEDre   Úpublish_pool_closedrQ   rf   r(   r$  r%  r&  r*   r)   r}   Úpublish_pool_clearedÚPOOL_CLEAREDr§   )r€   r3  Úpauseru   r±  Ú	old_stateÚnewpidÚsocketsÚdiscardÚkeeprP   Úcontextrd   s                r‚   Ú_resetzPool._reset"  sÚ  è ø€ ð —J‘Jˆ	Ø—>‘>÷  	%ñ  	%Ø�{Š{Ø÷ 	%÷  	%ð  	%ð �y‰y×&Ò&©5¸¿¹×9PÒ9PØ(,¯
©
´I×4DÑ4DÐ%�	˜4œ:Ø�H‰H�L‰L˜Ô$Ü—Y‘Y“[ˆFØ�x‰x˜6Ò!Ø!�”Ø&'�Ô#Ø'(�Ô$ØÐ!Ø&*§j¡j´+×2CÑ2CÓ2EÐ#�˜�ä-8×->Ñ->Ó-@�Ü*5×*;Ñ*;Ó*=�Ø ŸJ™Jò *�DØ—‘¨*Ò4ØŸ™ tÕ,àŸ™ DÕ)ð	*ð
 "�Ø!�”
áÜ&×-Ñ-�”
à×%Ñ%×0Ñ0Ô2Ø�N‰N×%Ñ%Ô'á$Ø#×3Ñ3ò %�GØ—N‘NÕ$ð%÷? 	%÷  	%ðD —I‘I×.Ñ.ˆ	ò ÝÜ—n‘nØV]Ö^Èd�d—o‘oÔ&<×&HÑ&HÕIÒ^ðà&*ñ÷ ñ ð
 $ò N�DØŸ/™/Ô*@×*LÑ*LÓM×MÑMðNà×$Ò$Ø Ð,Ð,Ð,Ø×-Ñ-¨d¯l©lÔ;Ø×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™öð -[Ð'ð œI×,Ñ,Ò,Ø×(Ò(Ø$Ð0Ð0Ð0Ø×2Ñ2ØŸ™Ø#-Ø.Cð 3ô ð
 ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× EÑ EØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø",õõ Ü—n‘nØPWÖXÈ�d—o‘oÔ&<×&BÑ&BÕCÒXðà&*ñ÷ ñ ð
 $ò H�DØŸ/™/Ô*@×*FÑ*FÓG×GÑGñHðe 	%ùð  	%ùð  	%ù÷  	%÷  	%ò  	%üòR _ðùð Nûò@ Yðøð Hús»   ‚R!ŸQ. R!£Q7±R!¼Q1½R!ÁF.Q7Ç0R!Ç;Q4Ç<6R!È2&RÉ
R!É"RÉ#,R!ÊRÊE9R!Ð	&RÐ/
R!Ð9RÐ:,R!Ñ&RÑ'R!Ñ1R!Ñ4R!Ñ7R
Ñ=R Ñ>R
ÒR!ÒR!ÒR!ÒR!c              ƒ  óî   K  — || _         | j                  4 ƒd{  –—†  | j                  D ]  }|j                  | j                   «       Œ ddd«      ƒd{  –—†  y7 ŒA7 Œ# 1 ƒd{  –—†7  sw Y   yxY w­w)zXUpdates the is_writable attribute on all sockets currently in the
        Pool.
        N)rY   r•  r’  rA  )r€   rY   Ú_sockets      r‚   rA  zPool.update_is_writable  sm   è ø€ ð 'ˆÔØ—9‘9÷ 	=ñ 	=ØŸ:™:ò =�Ø×*Ñ*¨4×+;Ñ+;Õ<ð=÷	=÷ 	=ñ 	=øð 	=ø÷ 	=÷ 	=ñ 	=üsD   ‚A5šA›A5ž-A ÁA5ÁAÁA5ÁA5Á A2Á&A)Á'A2Á.A5c              ƒ  óH   K  — | j                  d||¬«      ƒ d {  –—†  y 7 Œ­w)NF)r3  ru   r±  ©rÂ  )r€   ru   r±  s      r‚   Úresetz
Pool.resetˆ  s+   è ø€ ð �k‰kØ JÐF[ð ó 
÷ 	
ò 	
ús   ‚"š ›"c              ƒ  óF   K  — | j                  dd¬«      ƒ d {  –—†  y 7 Œ­w)NF)r3  r»  rÆ  rŸ   s    r‚   Úreset_without_pausezPool.reset_without_pause�  s   è ø€ Ø�k‰k ¨UˆkÓ3×3Ò3ús   ‚!™š!c              ƒ  óD   K  — | j                  d¬«      ƒ d {  –—†  y 7 Œ­w)NT)r3  rÆ  rŸ   s    r‚   r3  z
Pool.close’  s   è ø€ Ø�k‰k ˆkÓ%×%Ò%ús   ‚ ˜™ c                ó:   — | j                   j                  ||«      S r¤   )rn   r€  r  s      r‚   Ústale_generationzPool.stale_generation•  s   € Ø�x‰x�~‰~˜c :Ó.Ð.r„   c           	   ƒ  ó¸  K  — | j                   4 ƒd{  –—†  | j                  t        j                  k7  r	 ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  | j                  j
                  ��Ng }| j                   4 ƒd{  –—†  | j                  rž| j                  d   j                  «       | j                  j
                  kD  rj|j                  | j                  j                  «       «       | j                  r5| j                  d   j                  «       | j                  j
                  kD  rŒjddd«      ƒd{  –—†  t        sIt        j                  |D �cg c]!  }|j                  t        j                  «      ‘Œ# c}ddiŽƒ d{  –—†  n.|D ])  }|j                  t        j                  «      ƒ d{  –—†  Œ+ 	 | j                   4 ƒd{  –—†  t#        | j                  «      | j$                  z   | j                  j&                  k\  r	 ddd«      ƒd{  –—†  y| j(                  | j                  j&                  k\  r	 ddd«      ƒd{  –—†  y| xj(                  dz  c_        ddd«      ƒd{  –—†  d}	 | j*                  4 ƒd{  –—†  | j,                  | j.                  k\  r¼	 ddd«      ƒd{  –—†  |rT| j*                  4 ƒd{  –—†  | xj,                  dz  c_        | j*                  j1                  «        ddd«      ƒd{  –—†  | j                   4 ƒd{  –—†  | xj(                  dz  c_        | j                   j1                  «        ddd«      ƒd{  –—†  y| xj,                  dz  c_        d}ddd«      ƒd{  –—†  | j3                  «       ƒ d{  –—† }d}| j                   4 ƒd{  –—†  | j4                  j7                  «       |k7  rd}|s@| j                  j9                  |«       | j:                  j=                  |j>                  «       ddd«      ƒd{  –—†  |rÓ|j                  t        j@                  «      ƒ d{  –—†  	 |rT| j*                  4 ƒd{  –—†  | xj,                  dz  c_        | j*                  j1                  «        ddd«      ƒd{  –—†  | j                   4 ƒd{  –—†  | xj(                  dz  c_        | j                   j1                  «        ddd«      ƒd{  –—†  y	 |rT| j*                  4 ƒd{  –—†  | xj,                  dz  c_        | j*                  j1                  «        ddd«      ƒd{  –—†  | j                   4 ƒd{  –—†  | xj(                  dz  c_        | j                   j1                  «        ddd«      ƒd{  –—†  �Œð7 �Œš7 �Œo7 �Œa# 1 ƒd{  –—†7  sw Y   �ŒrxY w7 �ŒL7 �Œ•# 1 ƒd{  –—†7  sw Y   �Œ¦xY wc c}w 7 �Œe7 �Œ;7 �Œ&7 �Œß7 �Œ­7 �ŒŠ# 1 ƒd{  –—†7  sw Y   �Œ›xY w7 �Œ‹7 �Œd7 �ŒP7 �Œ# 1 ƒd{  –—†7  sw Y   �Œ%xY w7 �Œ7 �ŒÜ# 1 ƒd{  –—†7  sw Y   yxY w7 �ŒÌ# 1 ƒd{  –—†7  sw Y   �ŒÝxY w7 �ŒÍ7 �Œ¹7 �ŒK# 1 ƒd{  –—†7  sw Y   �Œ\xY w7 �Œ;7 �Œ&7 �Œê# 1 ƒd{  –—†7  sw Y   �ŒûxY w7 �Œî7 �Œ²# 1 ƒd{  –—†7  sw Y   yxY w7 �Œ±7 �Œu# 1 ƒd{  –—†7  sw Y   �Œ†xY w7 �Œy7 �Œ=# 1 ƒd{  –—†7  sw Y   �ŒNxY w# |rl| j*                  4 ƒd{  –—†7   | xj,                  dz  c_        | j*                  j1                  «        ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY w| j                   4 ƒd{  –—†7   | xj(                  dz  c_        | j                   j1                  «        ddd«      ƒd{  –—†7   w # 1 ƒd{  –—†7  sw Y   w xY wxY w­w)zôRemoves stale sockets then adds new ones if pool is too small and
        has not been reset. The `reference_generation` argument specifies the
        `generation` at the point in time this operation was requested on the
        pool.
        Néÿÿÿÿr°  Trª   F)!r•  r�  r„  rˆ  rb   Úmax_idle_time_secondsr’  rC  r³  Úpopr6  rµ  r¶  r¦   r-   ÚIDLErœ  Úlenr—  Úmin_pool_sizer�  r–  r¡  r   ÚnotifyÚconnectrn   rp   Ú
appendleftr”  r¿  rs   r§   )r€   Úreference_generationÚclose_connsrP   Úincrementedr¦   s         r‚   Úremove_stale_socketszPool.remove_stale_sockets˜  sz  è ø€ ð —9‘9÷ 	ñ 	Ø�z‰zœYŸ_™_Ò,Ø÷	÷ 	÷ 	÷ 	ð 	ð �9‰9×*Ñ*Ñ6ØˆKØ—y‘y÷ 9ñ 9à—J’JØŸ
™
 2™×8Ñ8Ó:¸T¿Y¹Y×=\Ñ=\Ò\à×&Ñ& t§z¡z§~¡~Ó'7Ô8ð —J’JØŸ
™
 2™×8Ñ8Ó:¸T¿Y¹Y×=\Ñ=\Ó\÷9÷ 9õ Ü—n‘nØOZÖ[Àt�d—o‘oÔ&<×&AÑ&AÕBÒ[ðà&*ñ÷ ñ ð
 (ò G�DØŸ/™/Ô*@×*EÑ*EÓF×FÑFðGð Ø—~‘~÷ #ñ #ä�t—z‘z“? T×%8Ñ%8Ñ8¸D¿I¹I×<SÑ<SÒSØ÷#÷ #ð #ð —=‘= D§I¡I×$;Ñ$;Ò;Ø÷#÷ #ð #ð —’ Ñ"•÷#÷ #ð  ˆKð,Ø×4Ñ4÷ 'ñ 'ð —}‘}¨×(<Ñ(<Ò<Ø÷	'÷ 'ñ* à#×8Ñ8÷ ;ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;÷ ;ð  Ÿ>™>÷ ,ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,÷ ,ð ,ð- —M’M QÑ&•MØ"&�K÷'÷ 'ð "Ÿ\™\›^×+�Ø"�
ØŸ9™9÷ Jñ Jð —x‘x×+Ñ+Ó-Ð1EÒEØ%)˜
Ù%ØŸ
™
×-Ñ-¨dÔ3Ø×,Ñ,×4Ñ4°T×5HÑ5HÔI÷J÷ Jñ ØŸ/™/Ô*@×*FÑ*FÓG×GÐGØáà#×8Ñ8÷ ;ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;÷ ;ð  Ÿ>™>÷ ,ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,÷ ,ð ,ð ñ à#×8Ñ8÷ ;ñ ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;÷ ;ð  Ÿ>™>÷ ,ñ ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,÷ ,ñK ð+	ùð 	ùð 	ù÷ 	÷ 	ò 	úð9ùð 9ù÷ 9÷ 9ò 9üò \ðùð Gùð#ùð #ùð #ùð #ù÷ #÷ #ò #úð'ùð 'ùð.;ùð ;ù÷ ;÷ ;ò ;úð,ùð ,ù÷ ,÷ ,ñ ,úð7'ù÷ '÷ 'ò 'úð ,ùðJùð Jù÷ J÷ Jò Júð Hùð
;ùð ;ù÷ ;÷ ;ò ;úð,ùð ,ù÷ ,÷ ,ñ ,úð	;ùð ;ù÷ ;÷ ;ò ;úð,ùð ,ù÷ ,÷ ,ò ,ûñ à#×8Ñ8÷ ;ò ;ØŸš¨Ñ*�Ø×1Ñ1×8Ñ8Ô:÷;÷ ;÷ ;÷ ;ó ;úð  Ÿ>™>÷ ,ò ,Ø—M’M QÑ&•MØ—N‘N×)Ñ)Ô+÷,÷ ,÷ ,÷ ,ó ,ÿsA  ‚_“V-”_—V6¶_ÁV0Á_ÁV3Á-_Â WÂ_ÂB*WÄ/_Ä:WÄ;_Å&W(Å>
_ÆW-Æ	,_Æ5W0Æ6_ÇW3Ç_Ç;W?È_ÈW6È_È$W?É_ÉW9É_ÉW?É'_É2W<É3_É:[< Ê
XÊ[< ÊYÊ)[< Ê4XÊ5[< Ê9_ËXË_Ë0X!Ë?_Ì
XÌ_ÌX7Ì _Ì#0X=Í_ÍX:Í_Í$YÍ;[< ÎYÎ[< ÎY+Î[< Î5Y.Î6[< Î9A"Y4Ð[< Ð&Y1Ð'([< ÑZ
Ñ[< Ñ_Ñ'ZÑ(_Ñ+0ZÒ_Ò&ZÒ'_Ò;Z)Ò<_Ò?0Z/Ó/_Ó:Z,Ó;_Ô_Ô[Ô_Ô0[
Õ_Õ[Õ_Õ'[ Õ(_Õ+0[&Ö_Ö&[#Ö'_Ö0_Ö3_Ö6W	Ö<V?Ö=W	×	_×_×W%×W×W%× _×0_×3_×6_×9_×<_×?XØXØXØ_Ø[< Ø[< Ø_Ø_Ø!X4Ø'X*Ø(X4Ø/	_Ø:_Ø=YÙYÙYÙ_Ù[< ÙY(ÙYÙY(Ù#	[< Ù.[< Ù1[< Ù4ZÙ:Y=Ù;ZÚ	[< Ú_Ú_ÚZ&ÚZÚZ&Ú!	_Ú,_Ú/[Ú5Z8Ú6[Ú=_Û_Û
[Û[Û[Û	_Û#_Û&[9Û,[/Û-[9Û4_Û<_Ü\
Ü_Ü0]Ý_Ý]Ý_Ý](Ý]Ý](Ý$_Ý;]>
Ý<_Þ 0_Þ0_Þ;^>Þ<_ß_ß_ß	_ß_ß_c              ƒ  ó
  K  — | j                   4 ƒd{  –—†  | j                  }| xj                  dz  c_        t        «       }| j                  j	                  |«       ddd«      ƒd{  –—†  | j
                  j                  }| j                  r |€J ‚|j                  | j                  «       | j                  rjt        j                  t        j                  «      rGt        t        t         j"                  | j$                  | j                  d   | j                  d   ¬«       	 t'        | j                  | j
                  «      ƒ d{  –—† }tC        || | j                  | jD                  «      }| j                   4 ƒd{  –—†  | j                  j	                  |jF                  «       | j                  j+                  «       ddd«      ƒd{  –—†  jH                  r|jF                  jK                  «        	 | jD                  s)|jM                  «       ƒ d{  –—†  |jN                  | _'        |r|jQ                  |d¬«       |jS                  «       ƒ d{  –—†  |r7|jV                  jX                  j[                  |j\                  «      ƒ d{  –—†  |S 7 �Œˆ7 �Œ5# 1 ƒd{  –—†7  sw Y   �ŒFxY w7 �Œm# t(        $ �r€}| j                   4 ƒd{  –—†7   | j                  j+                  «       ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY w| j                  r/|€J ‚|j-                  | j                  t.        j0                  «       | j                  r‘t        j                  t        j                  «      rnt        t        t         j2                  | j$                  | j                  d   | j                  d   t5        t.        j0                  «      t.        j0                  ¬«       t7        |t8        t:        gt<        ¢­«      r-t?        | j
                  «      }tA        | j                  ||¬«       ‚ d}~ww xY w7 �ŒÅ7 �Œx# 1 ƒd{  –—†7  sw Y   �Œ‰xY w7 �ŒF7 �Œ# t(        $ rŒ | j                   4 ƒd{  –—†7   | j                  j+                  |jF                  «       ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY w|jU                  t.        j0                  «      ƒ d{  –—†7   ‚ w xY w7 �Œm­w)	zâConnect to Mongo and return a new AsyncConnection.

        Can raise ConnectionFailure.

        Note that the pool does not keep a reference to the socket -- you
        must call checkin() when you're done with it.
        Nrª   r   ©r  r  r  r  r   r,  rE  F)Úcompleted_handshake)/r•  r˜  r3   r”  Úaddrb   rc   re   Úpublish_connection_createdrQ   rf   r(   r$  r%  r&  r*   r)   ÚCONN_CREATEDr}   r4   r  r¿  r/  r-   rF  r0  r+   rù   rG  rH  r2   r#   r5   rK   rS   rs   Ú	cancelledr2  r³   rY   Úcontribute_socketr"  r¦   r–   Ú	_topologyÚreceive_cluster_timer   )	r€   ÚhandlerÚconn_idÚtmp_contextrd   Únetworking_interfacer  rI  rP   s	            r‚   rÕ  zPool.connectÝ  sô  è ø€ ð —9‘9÷ 	2ñ 	2Ø×-Ñ-ˆGØ×#Ò# qÑ(Õ#ä.Ó0ˆKØ× Ñ ×$Ñ$ [Ô1÷	2÷ 	2ð —I‘I×.Ñ.ˆ	Ø× Ò ØÐ(Ð(Ð(Ø×0Ñ0°·±¸wÔGØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×=Ñ=ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#*õð	Ü)GÈÏÉÐVZ×V_ÑV_Ó)`×#`Ð ô6 Ð3°T¸4¿<¹<ÈÐRV×R^ÑR^Ó_ˆØ—9‘9÷ 	6ñ 	6Ø× Ñ ×$Ñ$ T×%8Ñ%8Ô9Ø× Ñ ×(Ñ(¨Ô5÷	6÷ 	6ð × Ò Ø×Ñ×&Ñ&Ô(ð	Ø—<’<Ø—j‘j“l×"Ð"Ø#'×#3Ñ#3�Ô ÙØ×)Ñ)¨$ÀEÐ)ÔJà×#Ñ#Ó%×%Ð%ñ Ø—.‘.×*Ñ*×?Ñ?À×@RÑ@RÓS×SÐSàˆðS	2ùð 	2ù÷ 	2÷ 	2ò 	2úð, $aúäó 	Ø—y‘y÷ :ò :Ø×$Ñ$×,Ñ,¨[Ô9÷:÷ :÷ :÷ :ó :úà×$Ò$Ø Ð,Ð,Ð,Ø×3Ñ3Ø—L‘L 'Ô+A×+GÑ+Gôð ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×@Ñ@Ø!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø'.Ü;Ô<R×<XÑ<XÓYÜ0×6Ñ6õ	ô ˜%¤'¬7Ð!?´YÑ!?Ô@Ü.¨t¯y©yÓ9�Ü)¨$¯,©,¸ÈwÕWàûð/	úð4	6ùð 	6ù÷ 	6÷ 	6ò 	6úð #ùð
 &úäò 	Ø—y‘y÷ Bò BØ×$Ñ$×,Ñ,¨T×-@Ñ-@ÔA÷B÷ B÷ B÷ Bó Búà—/‘/Ô"8×">Ñ">Ó?×?Ñ?Øð		úð TûsŒ  ‚T“J”T—AJ!ÁTÁ)JÁ*B<TÄ'#J: Å
J7ÅJ: Å3TÆQÆTÆAQÇTÇQ
Ç*TÇ>Q) ÈQ#È=Q) ÉQ&ÉQ) É 4TÊTÊTÊTÊ!J4Ê'J*Ê(J4Ê/TÊ7J: Ê:
QËP?ËKËP?ËLË5P?Ì LÌP?ÌL	ÌLÌL	ÌD*P?Ð?QÑTÑ
TÑQ ÑQÑQ ÑTÑ#Q) Ñ&Q) Ñ)S>ÒRÒS>Ò&R?Ò-S>Ò8R;Ò9S>Ò?S	ÓSÓS	Ó)S>Ó6S9Ó7S>Ó>Tc           	    óœ  K  — | j                   j                  }t        j                  «       }| j                  r|€J ‚|j                  | j                  «       | j                  rit        j                  t        j                  «      rFt        t        t        j                  | j                  | j                  d   | j                  d   ¬«       | j!                  ||¬«      ƒ d{  –—† }t        j                  «       |z
  }| j                  r+|€J ‚|j#                  | j                  |j$                  |«       | j                  rut        j                  t        j                  «      rRt        t        t        j&                  | j                  | j                  d   | j                  d   |j$                  |¬«       	 | j(                  4 ƒd{  –—†  | j*                  j-                  |j.                  «       ddd«      ƒd{  –—†  |­–— |j2                  rV| j(                  4 ƒd{  –—†  | j@                  j-                  |«       | xjB                  dz  c_!        ddd«      ƒd{  –—†  y|j4                  rV| j(                  4 ƒd{  –—†  | j@                  j-                  |«       | xjD                  dz  c_"        ddd«      ƒd{  –—†  y|j<                  r| j?                  |«      ƒ d{  –—†  yy7 �Œ7 �Œ-7 Œú# 1 ƒd{  –—†7  sw Y   �ŒxY w# t0        $ ry |j2                  xs |j4                  }|r3t7        j8                  «       \  }}}	|j;                  ||«      ƒ d{  –—†7   |s&|j<                  r| j?                  |«      ƒ d{  –—†7   ‚ w xY w7 �Œr7 �Œ5# 1 ƒd{  –—†7  sw Y   yxY w7 �Œ+7 Œí# 1 ƒd{  –—†7  sw Y   yxY w7 ŒÞ­w)a  Get a connection from the pool. Use with a "with" statement.

        Returns a :class:`AsyncConnection` object wrapping a connected
        :class:`socket.socket`.

        This method should always be used in a with-statement::

            with pool.get_conn() as connection:
                connection.send_message(msg)
                data = connection.receive_message(op_code, request_id)

        Can raise ConnectionFailure or OperationFailure.

        :param handler: A _MongoClientErrorHandler.
        Nr   rª   r�  ©rå  r  )#rb   rc   rU   rV   re   Ú$publish_connection_check_out_startedrQ   rf   r(   r$  r%  r&  r*   r)   ÚCHECKOUT_STARTEDr}   Ú	_get_connÚpublish_connection_checked_outrR   ÚCHECKOUT_SUCCEEDEDr•  r”  rÞ  rs   r  rw   rx   ÚsysÚexc_infoÚhandlery   r¥   r¦  r¨  r§  )
r€   rå  rd   Úcheckout_started_timerP   r(  ÚpinnedÚexc_typeÚexc_valÚ_s
             r‚   ÚcheckoutzPool.checkout0  s  è ø€ ð& —I‘I×.Ñ.ˆ	Ü $§¡Ó 0ÐØ× Ò ØÐ(Ð(Ð(Ø×:Ñ:¸4¿<¹<ÔHØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×AÑAØŸ™ØŸ<™<¨™?ØŸ<™<¨™?õð —^‘^Ð$9À7�^ÓK×Kˆä—>‘>Ó#Ð&;Ñ;ˆØ× Ò ØÐ(Ð(Ð(Ø×4Ñ4°T·\±\À4Ç7Á7ÈHÔUØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×CÑCØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#'§7¡7Ø#õð	Ø—y‘y÷ >ñ >Ø×$Ñ$×(Ñ(¨×)<Ñ)<Ô=÷>÷ >à‹Jð  �?Š?Ø—y‘y÷  ñ  Ø×%Ñ%×)Ñ)¨$Ô/Ø—
’
˜a‘•
÷ ÷  ð  ð ×ÒØ—y‘y÷ #ñ #Ø×%Ñ%×)Ñ)¨$Ô/Ø—’ Ñ"•÷#÷ #ð #ð �[Š[Ø—,‘,˜tÓ$×$Ñ$ð ðW Lùð">ùð >ø÷ >÷ >ò >ûô ò 	ð
 —_‘_Ò:¨×(:Ñ(:ˆFÙô (+§|¡|£~Ñ$�˜' 1Ø—n‘n X¨wÓ7×7Ñ7Ù˜dŸkškØ—l‘l 4Ó(×(Ñ(Øð	úð ùð  ù÷  ÷  ñ  úð#ùð #ø÷ #÷ #ñ #úð %ús  ‚C!OÃ#K2Ã$COÆ8L ÇK5Ç	L Ç&K:Ç2L Ç=K8Ç>	L ÈOÈ#NÈ$OÈ'1NÉOÉ#NÉ$!OÊN0ÊOÊ	1N5Ê:OËN3Ë%OË+O
Ë,OË5L Ë8L Ë:LÌ LÌLÌL ÌANÍ"M%Í#'NÎ
NÎNÎOÎOÎN-Î!N$Î"N-Î)OÎ3OÎ5OÎ;N>Î<OÏOc           
     ó´  — | j                   t        j                  k7  �r:|�r t        j                  «       |z
  }| j
                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        j                  |«       | j                  rzt        j                  t        j                   «      rWt#        t        t$        j&                  | j(                  | j                  d   | j                  d   dt        j                  |¬«       t+        | j                  «      }t-        | j                  t/        d«      |¬«       y y )Nr   rª   ú<An error occurred while trying to establish a new connection©r  r  r  r  r-  r  r!  zconnection pool pausedrE  )r�  r„  rˆ  rU   rV   re   rb   rc   Ú#publish_connection_check_out_failedrQ   r,   Ú
CONN_ERRORrf   r(   r$  r%  r&  r*   r)   ÚCHECKOUT_FAILEDr}   r#   r5   r   )r€   ró  Ú
emit_eventr(  rI  s        r‚   Ú_raise_if_not_readyzPool._raise_if_not_ready  s   € Ø�:‰:œŸ™Ó(ÚÜŸ>™>Ó+Ð.CÑC�Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×RÑRØŸ™Ô&D×&OÑ&OÐQYôð ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× HÑ HØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø]Ü<×GÑGØ#+õ	ô +¨4¯9©9Ó5ˆGÜ%Ø—‘œmÐ,DÓEÐW^öð+ )r„   c              ƒ  ó,  K  — | j                   t        j                  «       k7  r| j                  «       ƒ d{  –—†  | j                  �rt        j                  «       |z
  }| j                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        j                  |«       | j                  rzt        j                   t"        j$                  «      rWt'        t        t(        j*                  | j,                  | j                  d   | j                  d   dt        j                  |¬«       t/        d«      ‚| j0                  4 ƒd{  –—†  | xj2                  dz  c_        ddd«      ƒd{  –—†  t5        j6                  «       rt5        j8                  «       }nD| j                  j:                  r,t        j                  «       | j                  j:                  z   }nd}| j<                  4 ƒd{  –—†  | j?                  |d¬«       | j@                  | jB                  k  sª|r|t        j                  «       z
  nd}tE        | j<                  |«      ƒ d{  –—† sD| j@                  | jB                  k  r| j<                  jG                  «        | jI                  |«       | j?                  |d¬«       | j@                  | jB                  k  sŒª| xj@                  dz  c_         ddd«      ƒd{  –—†  d}d	}d	}	 | j0                  4 ƒd{  –—†  | xjJ                  dz  c_%        d}ddd«      ƒd{  –—†  |�€Î| jL                  4 ƒd{  –—†  | j?                  |d	¬«       | jN                  sÝ| jP                  | jR                  k  sÄ|r|t        j                  «       z
  nd}tE        | jL                  |«      ƒ d{  –—† sR| jN                  s| jP                  | jR                  k  r| jL                  jG                  «        d}| jI                  |«       | j?                  |d	¬«       | jN                  s| jP                  | jR                  k  sŒÄ	 | jN                  jU                  «       }ddd«      ƒd{  –—†  |r| jY                  |«      ƒ d{  –—† rsd}�Œ^	 | j[                  |¬
«      ƒ d{  –—† }| jL                  4 ƒd{  –—†  | xjP                  dz  c_(        | jL                  jG                  «        ddd«      ƒd{  –—†  |€�ŒÎd|_3        |S 7 �Œñ7 �ŒÇ7 �Œ¥# 1 ƒd{  –—†7  sw Y   �Œ¶xY w7 �Œ<7 �ŒÚ7 �ŒG# 1 ƒd{  –—†7  sw Y   �ŒXxY w7 �ŒD7 �Œ # 1 ƒd{  –—†7  sw Y   �Œ1xY w7 �Œ!7 �Œ³# tV        $ r | xjP                  dz  c_(        Y �Œ,w xY w7 �Œ%# 1 ƒd{  –—†7  sw Y   �Œ6xY w7 �Œ#7 �Œ7 Œô7 Œ·# 1 ƒd{  –—†7  sw Y   ŒÇxY w# | jL                  4 ƒd{  –—†7   | xjP                  dz  c_(        | jL                  jG                  «        ddd«      ƒd{  –—†7   w # 1 ƒd{  –—†7  sw Y   w xY wxY w# t\        $ �r² |r(|j_                  t`        jb                  «      ƒ d{  –—†7   | j<                  4 ƒd{  –—†7   | xj@                  dz  c_         |r| xjJ                  dz  c_%        | j<                  jG                  «        ddd«      ƒd{  –—†7   n# 1 ƒd{  –—†7  sw Y   nxY w|�s t        j                  «       |z
  }| j                  rW| j                  j                  €J ‚| j                  j                  j                  | j                  t        jd                  |«       | j                  rzt        j                   t"        j$                  «      rWt'        t        t(        j*                  | j,                  | j                  d   | j                  d   dt        jd                  |¬«       ‚ w xY w­w)z=Get or create a AsyncConnection. Can raise ConnectionFailure.Nr   rª   zConnection pool was closedrû  z?Attempted to check out a connection from closed connection poolT)rÿ  Frê  rú  )4r›  r™  rš  rÉ  rT   rU   rV   re   rb   rc   rü  rQ   r,   r·  rf   r(   r$  r%  r&  r*   r)   rþ  r}   rp  r•  r¥  r   Úget_timeoutÚget_deadlineÚwait_queue_timeoutrœ  r   r�  rž  r%   rÔ  Ú_raise_wait_queue_timeoutr—  r–  r’  r¡  r   ÚpopleftÚ
IndexErrorÚ	_perishedrÕ  r  r¦   r-   rF  rý  ry   )	r€   ró  rå  r(  Údeadlinerˆ   rP   rÙ  Úemitted_events	            r‚   rí  zPool._get_conn™  s‡  è ø€ ð �8‰8”r—y‘y“{Ò"Ø×*Ñ*Ó,×,Ð,à�;‹;Ü—~‘~Ó'Ð*?Ñ?ˆHØ×$Ò$Ø—y‘y×1Ñ1Ð=Ð=Ð=Ø—	‘	×*Ñ*×NÑNØ—L‘LÔ"@×"LÑ"LÈhôð ×'Ò'Ô,>×,KÑ,KÌGÏMÉMÔ,ZÜÜ&Ü4×DÑDØ!Ÿ_™_Ø#Ÿ|™|¨A™Ø#Ÿ|™|¨A™Ø7Ü8×DÑDØ'õ	ô #ØQóð ð —9‘9÷ 	&ñ 	&Ø× Ò  AÑ%Õ ÷	&÷ 	&ô ×ÑÔÜ×)Ñ)Ó+‰HØ�Y‰Y×)Ò)Ü—~‘~Ó'¨$¯)©)×*FÑ*FÑF‰HàˆHà—>‘>÷ 	ñ 	Ø×$Ñ$Ð%:ÀtÐ$ÔLØ—}‘} t×'9Ñ'9Ò9Ù9A˜(¤T§^¡^Ó%5Ò5Àt�Ü-¨d¯n©n¸gÓF×FÐFð —}‘} t×'9Ñ'9Ò9ØŸ™×-Ñ-Ô/Ø×2Ñ2Ð3HÔIØ×(Ñ(Ð)>È4Ð(ÔPð —}‘} t×'9Ñ'9Ó9ð �MŠM˜QÑ�M÷	÷ 	ð ˆØˆØˆð@	Ø—y‘y÷ #ñ #Ø×#Ò# qÑ(Õ#Ø"�÷#÷ #ð ‘,ð  ×4Ñ4÷ +ñ +Ø×,Ñ,Ð-BÈuÐ,ÔUØ#Ÿzšz¨T¯]©]¸T×=QÑ=QÒ-QÙAI (¬T¯^©^Ó-=Ò"=Èt˜Ü%5°d×6OÑ6OÐQXÓ%Y×YÐYð  $Ÿzšz¨T¯]©]¸T×=QÑ=QÒ-QØ $× 9Ñ 9× @Ñ @Ô BØ,0˜MØ ×:Ñ:Ð;PÔQØ×0Ñ0Ð1FÐSXÐ0ÔYð  $Ÿzšz¨T¯]©]¸T×=QÑ=QÓ-Qð+Ø#Ÿz™z×1Ñ1Ó3˜÷+÷ +ñ" Ø!Ÿ^™^¨DÓ1×1Ð1Ø#˜Ù ð?Ø%)§\¡\¸' \Ó%B×B˜à#'×#<Ñ#<÷ ?ñ ?Ø ŸMšM¨QÑ.�MØ ×5Ñ5×<Ñ<Ô>÷?÷ ?ð9 ’,ð| ˆŒØˆðo -ùð0	&ùð 	&ù÷ 	&÷ 	&ò 	&úð	ùð Gùð		ù÷ 	÷ 	ò 	úð$#ùð #ù÷ #÷ #ò #úð+ùð  Zúô &ò +ØŸš¨Ñ*Ÿ˜ð+úð+ù÷ +÷ +ò +úð$ 2ùð
  Cùð?øð ?ø÷ ?÷ ?ñ ?û 4×#<Ñ#<÷ ?ò ?Ø ŸMšM¨QÑ.�MØ ×5Ñ5×<Ñ<Ô>÷?÷ ?÷ ?÷ ?ó ?þô ó 	Ùà—o‘oÔ&<×&BÑ&BÓC×CÑCØ—~‘~÷ (ò (Ø—’ Ñ"•ÙØ×'Ò'¨1Ñ,Õ'Ø—‘×%Ñ%Ô'÷	(÷ (÷ (÷ (ó (úò !ÜŸ>™>Ó+Ð.CÑC�Ø×(Ò(ØŸ9™9×5Ñ5ÐAÐAÐAØ—I‘I×.Ñ.×RÑRØŸ™Ô&D×&OÑ&OÐQYôð ×+Ò+Ô0B×0OÑ0OÔPW×P]ÑP]Ô0^ÜÜ*Ü 8× HÑ HØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø]Ü<×GÑGØ#+õ	ð ð9	üs�  ‚5`·T(¸D,`Å$T+Å%`Å(T1Å>`Æ	T.Æ
B`ÈUÈ`ÈA!UÉ0U
É1A4UË&UË;`ÌUÌ
`ÌY Ì"U&Ì#Y Ì&U,Ì>Y Í	U)Í
Y Í!VÍ"Y Í%A-V0ÏVÏBV0Ñ#VÑ=Y ÒV-Ò	Y Ò#WÒ$Y Ò-W% ÓW	ÓW% ÓY ÓWÓY Ó0WÔY ÔWÔY Ô
`Ô+`Ô.`Ô1UÔ7T:Ô8UÔ?	`Õ
UÕ`ÕU#ÕUÕU#Õ`Õ&Y Õ)Y Õ,U?Õ2U5Õ3U?Õ:	Y ÖV0ÖV*Ö&V0Ö)V*Ö*V0Ö-Y Ö0WÖ6V9Ö7WÖ>	Y ×	W% ×Y ×Y ×W"×W×W"×Y ×%Y×6W9
×7Y×;0X=Ø+YØ6X9Ø7YØ=YÙYÙYÙYÙY Ù.`ÚZÚ`ÚZÚ`ÚA[7Û%`Û0[3Û1`Û7\		Û=\ Û>\		ÜD`à`c              ƒ  ón	  K  — |j                   }|j                  }d|_        d|_         d|_        | j                  j	                  |«       | j
                  j                  }| j                  4 ƒd{  –—†  | j                  j	                  |j                  «       ddd«      ƒd{  –—†  | j                  r*|€J ‚|j                  | j                  |j                  «       | j                  rtt        j                   t"        j$                  «      rQt'        t        t(        j*                  | j,                  | j                  d   | j                  d   |j                  ¬«       | j.                  t1        j2                  «       k7  r| j5                  «       ƒ d{  –—†  �n| j6                  r)|j9                  t:        j<                  «      ƒ d{  –—†  �nÝ|j6                  rï| j                  r9|€J ‚|j?                  | j                  |j                  t:        j@                  «       | j                  �rt        j                   t"        j$                  «      �r[t'        t        t(        jB                  | j,                  | j                  d   | j                  d   |j                  tE        t:        j@                  «      t:        j@                  ¬«       nâd}| j                  4 ƒd{  –—†  | jG                  |jH                  |jJ                  «      rd}ni|jM                  «        |jO                  tQ        | jR                  «      «       | jT                  jW                  |«       | jX                  j[                  «        ddd«      ƒd{  –—†  |r'|j9                  t:        j\                  «      ƒ d{  –—†  | j^                  4 ƒd{  –—†  |r| xj`                  dz  c_0        n|r| xjb                  dz  c_1        | xjd                  dz  c_2        | xjf                  dz  c_3        | xjh                  dz  c_4        | j^                  j[                  «        ddd«      ƒd{  –—†  y7 �Œë7 �Œ¹# 1 ƒd{  –—†7  sw Y   �ŒÊxY w7 �Œã7 �Œ±7 �Œ 7 �Œ# 1 ƒd{  –—†7  sw Y   �ŒxY w7 Œð7 ŒÝ7 ŒG# 1 ƒd{  –—†7  sw Y   yxY w­w)z†Return the connection to the pool, or if it's closed discard it.

        :param conn: The connection to check into the pool.
        FNr   rª   rÜ  r,  T)5rw   rx   ry   r¦  r¿  rb   rc   r•  r”  rs   re   Úpublish_connection_checked_inrQ   rR   rf   r(   r$  r%  r&  r*   r)   Ú	CHECKEDINr}   r›  r™  rš  rÉ  rT   r¦   r-   r·  r/  rF  r0  r+   rÌ  rq   ru   r?  rA  rÿ   rY   r’  rÖ  r–  rÔ  r§   rœ  r¨  r§  r�  r—  r¥  )r€   rP   ÚtxnÚcursorrd   r¦   s         r‚   r¥   zPool.checkin  s‘  è ø€ ð
 �o‰oˆØ×#Ñ#ˆØˆŒØˆŒØ"ˆÔØ×Ñ×%Ñ% dÔ+Ø—I‘I×.Ñ.ˆ	Ø—9‘9÷ 	>ñ 	>Ø× Ñ ×(Ñ(¨×)<Ñ)<Ô=÷	>÷ 	>à× Ò ØÐ(Ð(Ð(Ø×3Ñ3°D·L±LÀ$Ç'Á'ÔJØ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×:Ñ:ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø#'§7¡7õð �8‰8”r—y‘y“{Ò"Ø×*Ñ*Ó,×,Ò,à�{Š{Ø—o‘oÔ&<×&HÑ&HÓI×IÒIØ—’à×(Ò(Ø$Ð0Ð0Ð0Ø×7Ñ7ØŸ™ d§g¡gÔ/E×/KÑ/Kôð ×+Ó+Ô0B×0OÑ0OÔPW×P]ÑP]Õ0^ÜÜ*Ü 8× DÑ DØ!%§¡Ø#'§<¡<°¡?Ø#'§<¡<°¡?Ø+/¯7©7Ü?Ô@V×@\Ñ@\Ó]Ü4×:Ñ:ö	ð #�
ØŸ9™9÷ 
;ñ 
;ð ×,Ñ,¨T¯_©_¸d¿o¹oÔNØ%)™
à×5Ñ5Ô7Ø×/Ñ/´°T×5EÑ5EÓ0FÔGØŸ
™
×-Ñ-¨dÔ3à×1Ñ1×8Ñ8Ô:÷
;÷ 
;ñ ØŸ/™/Ô*@×*FÑ*FÓG×GÐGà—>‘>÷ 	$ñ 	$ÙØ—
’
˜a‘–
ÙØ—’ Ñ"•Ø�MŠM˜QÑ�MØ×Ò 1Ñ$ÕØ× Ò  AÑ%Õ Ø�N‰N×!Ñ!Ô#÷	$÷ 	$ð 	$ðk	>ùð 	>ù÷ 	>÷ 	>ò 	>úð -ùð Jùð*
;ùð 
;ù÷ 
;÷ 
;ò 
;úð Høð	$øð 	$ø÷ 	$÷ 	$ñ 	$üs  ‚A/R5Á1QÁ2R5Á5&Q"ÂR5Â&QÂ'C.R5ÆQ8Æ4R5Ç
Q;ÇDR5ËQ>ËR5Ë"BRÍ5R5Î RÎ(R5Î)RÎ*R5Î>RÎ?R5ÏB	R ÑR5ÑRÑR5ÑR5Ñ"Q5Ñ(Q+Ñ)Q5Ñ0	R5Ñ;R5Ñ>R5ÒR5ÒRÒ
RÒRÒ	R5ÒR5ÒR5Ò R2Ò&R)Ò'R2Ò.R5c              ƒ  óF  K  — |j                  «       }| j                  j                  �A|| j                  j                  kD  r(|j                  t        j
                  «      ƒ d{  –—†  y| j                  �V| j                  dk(  s|| j                  kD  r8|j                  «       r(|j                  t        j                  «      ƒ d{  –—†  y| j                  |j                  |j                  «      r(|j                  t        j                  «      ƒ d{  –—†  yy7 Œ¶7 ŒV7 Œ
­w)a©  Return True and close the connection if it is "perished".

        This side-effecty function checks if this socket has been idle for
        for longer than the max idle time, or if the socket has been closed by
        some external network error, or if the socket's generation is outdated.

        Checking sockets lets us avoid seeing *some*
        :class:`~pymongo.errors.AutoReconnect` exceptions on server
        hiccups, etc. We only check if the socket was closed by an external
        error if it has been > 1 second since the socket was checked into the
        pool, to keep performance reasonable - we can't avoid AutoReconnects
        completely anyway.
        NTr   F)rC  rb   rÏ  r¦   r-   rÑ  r�  r9  rF  rÌ  rq   ru   r§   )r€   rP   rC  s      r‚   r  zPool._perishede  sñ   è ø€ ð !×2Ñ2Ó4Ðð �I‰I×+Ñ+Ð7Ø! D§I¡I×$CÑ$CÒCà—/‘/Ô"8×"=Ñ"=Ó>×>Ð>Øà×'Ñ'Ð3Ø×(Ñ(¨AÒ-Ð1BÀT×EaÑEaÒ1aà×ÑÔ!Ø—o‘oÔ&<×&BÑ&BÓC×CÐCØà× Ñ  §¡°$·/±/ÔBØ—/‘/Ô"8×">Ñ">Ó?×?Ð?Øàð ?øð Døð @ús8   ‚A"D!Á$DÁ%A!D!ÃDÃAD!ÄDÄD!ÄD!ÄD!c           
     ó„  — | j                   j                  }t        j                  «       |z
  }| j                  r/|€J ‚|j                  | j                  t        j                  |«       | j                  rzt        j                  t        j                  «      rWt        t        t        j                   | j"                  | j                  d   | j                  d   dt        j                  |¬«       t%        j&                  «       xs | j                   j(                  }| j                   j*                  rl| j,                  | j.                  z
  | j0                  z
  }t3        dj5                  | j                   j6                  | j.                  | j0                  ||«      «      ‚t3        d| j                   j6                  › d|› �«      ‚)Nr   rª   zBWait queue timeout elapsed without a connection becoming availablerû  zÌTimeout waiting for connection from the connection pool. maxPoolSize: {}, connections in use by cursors: {}, connections in use by transactions: {}, connections in use by other operations: {}, timeout: {}zMTimed out while checking out a connection from connection pool. maxPoolSize: z, timeout: )rb   rc   rU   rV   re   rü  rQ   r,   ÚTIMEOUTrf   r(   r$  r%  r&  r*   r)   rþ  r}   r   r  r  r­   r—  r§  r¨  r    rV  rž  )r€   ró  rd   r(  rˆ   Ú	other_opss         r‚   r  zPool._raise_wait_queue_timeout‰  sm  € Ø—I‘I×.Ñ.ˆ	Ü—>‘>Ó#Ð&;Ñ;ˆØ× Ò ØÐ(Ð(Ð(Ø×9Ñ9Ø—‘Ô<×DÑDÀhôð ×#Ò#Ô(:×(GÑ(GÌÏÉÔ(VÜÜ"Ü0×@Ñ@ØŸ™ØŸ<™<¨™?ØŸ<™<¨™?Ø[Ü4×<Ñ<Ø#õ	ô ×#Ñ#Ó%ÒE¨¯©×)EÑ)EˆØ�9‰9×"Ò"Ø×+Ñ+¨d¯m©mÑ;¸d¿j¹jÑHˆIÜ'ð7÷ 8>±vØ—I‘I×+Ñ+Ø—M‘MØ—J‘JØØó8ó	ð ô $ðØ ŸI™I×3Ñ3Ð4°KÀ¸yðJó
ð 	
r„   c                óV   — t         r#| j                  D ]  }|j                  d «       Œ y y r¤   )r6  r’  r¦   )r€   rP   s     r‚   Ú__del__zPool.__del__°  s+   € õ ØŸ
™
ò &�Ø—‘ Õ%ñ&ð r„   )FN)rQ   rG   r©  r1   rS   rÿ   rª  r�  r]  rg  )TNF)
r3  rÿ   r»  rÿ   ru   r�  r±  rÿ   r[  r\  )rY   zOptional[bool]r[  r\  )NF)ru   r�  r±  rÿ   r[  r\  r‚  )r×  r•   r[  r\  r¤   )rå  ú"Optional[_MongoClientErrorHandler]r[  rK   )rå  r  r[  z%AsyncGenerator[AsyncConnection, None])ró  rh  rÿ  rÿ   r[  r\  )ró  rh  rå  r  r[  rK   )rP   rK   r[  r\  )rP   rK   r[  rÿ   )ró  rh  r[  r	   )rj  rk  rl  rƒ   rr   ÚpropertyrT   rÂ  rA  rÇ  rÉ  r3  rÌ  rÚ  rÕ  Ú
contextlibÚasynccontextmanagerrø  r   rí  r¥   r  r  r  rO  r„   r‚   rY  rY  ¶  s_  „ ð
 Ø(,ðTàðTð ðTð ð	Tð
 &óTólð" ò.ó ð.ð Ø)-Ø&+ð[Hàð[Hð ð[Hð 'ð	[Hð
  $ð[Hð 
ó[Hóz=ð TYð
Ø,ð
ØLPð
à	ó
ó4ó&ó/óC,ôJQðf ×#Ñ#à<@ðL%Ø9ðL%à	.òL%ó $ðL%ó\ð6 [_ðØ%*ðØ5Wðà	óóBI$óV"óH%
ôN&r„   rY  )rÚ
__future__r   rµ  rt  r  r%  r™  rð  rU   rM   Útypingr   r   r   r   r   r	   r
   r   r   Úbsonr   Úpymongor   r   Ú#pymongo.asynchronous.client_sessionr   Úpymongo.asynchronous.helpersr   Úpymongo.asynchronous.networkr   Úpymongo.commonr   r   r   r   r   Úpymongo.errorsr   r   r   r   r   r   r   r   r    Úpymongo.hellor!   r"   Úpymongo.helpers_sharedr#   r$   Úpymongo.lockr%   r&   r'   Úpymongo.loggerr(   r)   r*   r+   Úpymongo.monitoringr,   r-   Úpymongo.network_layerr.   r/   r0   Úpymongo.pool_optionsr1   Úpymongo.pool_sharedr2   r3   r4   r5   Úpymongo.read_preferencesr6   Úpymongo.server_apir7   Úpymongo.server_typer8   Úpymongo.socket_checkerr9   r:   Úbson.objectidr;   Úpymongo.asynchronous.authr<   r=   Ú!pymongo.asynchronous.mongo_clientr>   r?   Úpymongo.compression_supportr@   rA   rB   Úpymongo.messagerC   rD   Úpymongo.read_concernrE   rF   Úpymongo.typingsrG   rH   Úpymongo.write_concernrI   r6  rK   rp  rr  r„  rY  rO  r„   r‚   ú<module>r7     s  ðõ #ã Û Û Û Û 	Û 
Û Û ÷
÷ 
õ 
õ 'ß )Ý OÝ 7Ý 0÷õ ÷
÷ 
õ 
÷ -ß O÷ñ ÷
ó ÷÷ aÑ `Ý ,÷ó õ 4Ý .Ý +Ý 0áÝ!Ý&Ý6ÝFß\÷ñ ÷
 1Ý0Ý4ß6Ý2ð €÷Y
ñ Y
ôx�|ô ÷+ñ +÷>ñ ÷@&ò @&r„   