§
    �Äjÿ$  ã            	       ó  — d Z ddlZddlmc 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mZmZmZ ddlmZ ddlmZ  ee
j        d¦  «        re
j                             dd¬	¦  «          ee
j        d¦  «        re
j                             dd¬	¦  «         d
ZdZg d¢Zddededeeef         fd„Zddedeeef         fd„Zddedeeef         fd„Zdeeef         fd„Z d„ Z!e"dk    r ej#         e!¦   «         ¦  «         dS dS )a‰  Aggressive Concurrency & Stress Harness for FastMCP Mem0 Service.

Adversarial Verification for Milestone 3 Challenger:
- 50 Rapid Sequential Queries (p50, p95, p99 latency measurement)
- 30 Concurrent Parallel SSE Sessions (burst traffic)
- Mixed Load (read queries, status probes, edge cases)
- Continuous Process Health Monitoring (verifying PID stability, zero socket drops, zero locking)
é    N)ÚAnyÚDictÚList)ÚClientSession)Ú
sse_clientÚreconfigurezutf-8Úreplace)ÚencodingÚerrorszhttp://127.0.0.1:8765/sseÚ	developer)zFreeExile combatzFeral NPC dialogue HUDzSavage Infinite Atlaszdeveloper preferred languagezpreferred backend languagezVoLamWeb cloud budgetz0 VND Google CloudúDSCons rulezfrontend themezbackend architecturezAEC pricing normszCAD takeoff geometryzdatabase precisionztesting workflowzMCP tools protocolÚqueryÚ
session_idÚreturnc              ƒ   óN  K  — t          j        ¦   «         }	 t          j        d¦  «        4 ƒd{V —† t	          t
          ¦  «        4 ƒd{V —†	 \  }}t          ||¦  «        4 ƒd{V —†	 }|                     ¦   «         ƒ d{V —† |                     d| t          ddœ¬¦  «        ƒ d{V —†}t          j        ¦   «         |z
  }|j
        d         j        }t          j        |¦  «        }	|	                     di ¦  «                             d	g ¦  «        }
|
r)t          |
d                              d
d¦  «        ¦  «        nd}d|| |t!          |
¦  «        |ddœcddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS # t"          $ r7}t          j        ¦   «         |z
  }d|| |ddt%          |¦  «        dœcY d}~S d}~ww xY w)z>Execute a single search query over a dedicated SSE connection.g      .@NÚmem0_searché   )r   Úuser_idÚlimit©Ú	argumentsr   ÚmemoriesÚresultsÚscoreç        T)Úsuccessr   r   ÚelapsedÚ
hits_countÚ
top1_scoreÚerrorF)ÚtimeÚperf_counterÚasyncioÚtimeoutr   ÚMEM0_SSE_URLr   Ú
initializeÚ	call_toolÚUSER_IDÚcontentÚtextÚjsonÚloadsÚgetÚfloatÚlenÚ	ExceptionÚstr)r   r   Út0ÚreadÚwriteÚsessionÚresr   ÚrawÚdataÚhitsr   Úes                ú=C:\Projects\DSCons\tests\test_mem0_high_concurrency_stress.pyÚsingle_searchr<   /   sx  è è € å	Ô	Ñ	Ô	€Bð#
Ý”? 4Ñ(Ô(ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	å�<Ñ(Ô(ðð ð ð ð ð ð ð Ù,9¨T°5Ý˜d EÑ*Ô*ðð ð ð ð ð ð ð à.5à×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø#×-Ò-Ø!Ø(-½'ÈAÐNÐNð .ñ ô ð ð ð ð ð ð �õ Ô+Ñ-Ô-°Ñ2�Ø”k !”nÔ)�Ý”z #‘”�Ø—x’x 
¨BÑ/Ô/×3Ò3°I¸rÑBÔB�ØAEÐN�U 4¨¤7§;¢;¨w¸Ñ#<Ô#<Ñ=Ô=Ð=È3�
à#Ø",Ø"Ø&Ý"% d¡)¤)Ø",Ø!ðð ðð ð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	øõ0 ð 

ð 

ð 

ÝÔ#Ñ%Ô%¨Ñ*ˆàØ$ØØØØÝ˜‘V”Vð
ð 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð

øøøs•   —G# ±GÁF,Á(C*F	ÅF,Å$GÅ6G# Æ	
FÆF,ÆFÆF,ÆGÆ,
F6	Æ6GÆ9F6	Æ:GÆ=G# Ç
GÇG# ÇGÇG# Ç#
H$Ç-,HÈH$ÈH$é2   Úcountc              ƒ   ó˜  K  — t          d| › d�¦  «         g }g }t          j        ¦   «         }t          | ¦  «        D ]t}t          |t          t          ¦  «        z           }t          ||¬¦  «        ƒ d{V —†}|d         r|                     |d         ¦  «         Œ_|                     |¦  «         Œut          j        ¦   «         |z
  }|rt          j	        |¦  «        nd}t          |¦  «        dk    rt          j
        |d¬	¦  «        d
         nt          |d¬¦  «        }	t          |¦  «        dk    rt          j
        |d¬	¦  «        d         nt          |d¬¦  «        }
|rt          j        |¦  «        nd}| t          |¦  «        t          |¦  «        ||dk    r| |z  nd|dz  |	dz  |
dz  |dz  |dœ
}t          d|d›d|d         d›d�¦  «         t          d|d         d›d|d         d›d|d         d›d�¦  «         t          dt          |¦  «        › d| › d t          |¦  «        | z  dz  d›d!t          |¦  «        › �¦  «         |S )"zFExecute rapid sequential queries to test connection churn and latency.z-
--- [Phase 1] Rapid Sequential Stress Test (z iterations) ---©r   Nr   r   r   é   )Úné   )Údefaultéd   éb   r   éè  )
Útotal_requestsÚsuccessful_requestsÚfailed_requestsÚtotal_duration_secÚthroughput_rpsÚlatency_p50_msÚlatency_p95_msÚlatency_p99_msÚlatency_avg_msr   úTotal time: ú.2fzs | Throughput: rL   ú req/súLatency: Avg=rP   ú.1fzms, p50=rM   zms, p95=rN   ÚmsúSuccess rate: ú/ú (ú%) | Errors: )Úprintr!   r"   ÚrangeÚBENCHMARK_QUERIESr/   r<   ÚappendÚ
statisticsÚmedianÚ	quantilesÚmaxÚmean)r>   Ú	latenciesr   Út_startÚiÚqr6   Ú
total_timeÚp50Úp95Úp99Úavg_latÚreports                r;   Úrun_rapid_sequentialrn   X   sÚ  è è € å	Ð
R¸5Ð
RÐ
RÐ
RÑSÔSÐSØ€IØ€FÝÔÑ!Ô!€Gå�5‰\Œ\ð ð ˆÝ˜a¥#Õ&7Ñ"8Ô"8Ñ8Ô9ˆÝ! !°Ð2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ˆØˆyŒ>ð 	Ø×Ò˜S œ^Ñ,Ô,Ð,Ð,à�MŠM˜#ÑÔÐÐåÔ"Ñ$Ô$ wÑ.€JØ*3Ð
<�*Ô
˜IÑ
&Ô
&Ð
&¸€CÝ7:¸9±~´~ÈÒ7KÐ7K�*Ô
˜y¨BÐ
/Ñ
/Ô
/°Ô
3Ð
3ÕQTÐU^ÐhkÐQlÑQlÔQl€CÝ8;¸I¹¼È#Ò8MÐ8M�*Ô
˜y¨CÐ
0Ñ
0Ô
0°Ô
4Ð
4ÕSVÐW`ÐjmÐSnÑSnÔSn€CØ,5Ð>�jŒo˜iÑ(Ô(Ð(¸3€Gð  Ý" 9™~œ~Ý˜v™;œ;Ø(Ø0:¸Q²°˜% *Ñ,Ð,ÀCØ ™*Ø ™*Ø ™*Ø! D™.Øðð €Fõ 
Ð
]˜Ð
]Ð
]Ð
]¸Ð@PÔ9QÐ
]Ð
]Ð
]Ð
]Ñ^Ô^Ð^Ý	ð  G˜&Ð!1Ô2ð  Gð  Gð  GÀÐGWÔ@Xð  Gð  Gð  GÐflÐm}Ôf~ð  Gð  Gð  Gð  Gñ  Hô  Hð  HÝ	Ð
m�3˜y™>œ>Ð
mÐ
m¨EÐ
mÐ
mµS¸±^´^ÀEÑ5IÈ#Ñ5MÐ
mÐ
mÐ
mÕ`cÐdjÑ`kÔ`kÐ
mÐ
mÑnÔnÐnØ€Mó    é   Úconcurrencyc              ƒ   óÂ  K  — t          d| › d�¦  «         g }t          | ¦  «        D ]H}t          |t          t          ¦  «        z           }|                     t          ||¬¦  «        ¦  «         ŒIt          j        ¦   «         }t          j	        |Ž ƒ d{V —†}t          j        ¦   «         |z
  }d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }	|	rt          j        |	¦  «        nd}
|	rt          |	¦  «        nd}|	rt          |	¦  «        nd}| | t          |¦  «        t          |¦  «        ||d	k    r| |z  nd|
d
z  |d
z  |d
z  |dœ
}t          d|d›d|d         d›d�¦  «         t          d|d         d›d|d         d›d|d         d›d�¦  «         t          dt          |¦  «        › d| › dt          |¦  «        | z  dz  d›dt          |¦  «        › �¦  «         |S )z>Execute burst concurrent queries across parallel SSE sessions.z-
--- [Phase 2] Concurrent Burst Stress Test (z parallel sessions) ---r@   Nc                 ó"   — g | ]}|d          ¯
|‘ŒS ©r   © ©Ú.0Úrs     r;   ú
<listcomp>z(run_concurrent_burst.<locals>.<listcomp>Œ   s!   € Ð5Ð5Ð5˜¨¨)¬Ð5�!Ð5Ð5Ð5ro   c                 ó"   — g | ]}|d          °
|‘ŒS rt   ru   rv   s     r;   ry   z(run_concurrent_burst.<locals>.<listcomp>�   s!   € Ð5Ð5Ð5�A¨¨)¬Ð5ˆaÐ5Ð5Ð5ro   c                 ó   — g | ]
}|d          ‘ŒS )r   ru   rv   s     r;   ry   z(run_concurrent_burst.<locals>.<listcomp>Ž   s   € Ð2Ð2Ð2 !��9”Ð2Ð2Ð2ro   r   r   rG   )
rq   rH   rI   rJ   rK   rL   rP   Úlatency_min_msÚlatency_max_msr   rQ   rR   zs | Concurrent Throughput: rL   rS   rT   rP   rU   zms, Min=r|   zms, Max=r}   rV   rW   rX   rY   rE   rZ   )r[   r\   r]   r/   r^   r<   r!   r"   r#   Úgatherr_   rc   rb   Úmin)rq   Útasksrf   rg   re   r   rh   Ú
successfulÚfailedrd   rl   Úmax_latÚmin_latrm   s                 r;   Úrun_concurrent_burstr…   €   s}  è è € å	Ð
_¸;Ð
_Ð
_Ð
_Ñ`Ô`Ð`Ø€EÝ�;ÑÔð 5ð 5ˆÝ˜a¥#Õ&7Ñ"8Ô"8Ñ8Ô9ˆØ�Š•] 1°Ð3Ñ3Ô3Ñ4Ô4Ð4Ð4åÔÑ!Ô!€GÝ”N EÐ*Ð*Ð*Ð*Ð*Ð*Ð*€GÝÔ"Ñ$Ô$ wÑ.€Jà5Ð5˜WÐ5Ñ5Ô5€JØ5Ð5˜Ð5Ñ5Ô5€FØ2Ð2 zÐ2Ñ2Ô2€Ià,5Ð>�jŒo˜iÑ(Ô(Ð(¸3€GØ )Ð2�c�)‰nŒnˆn¨s€GØ )Ð2�c�)‰nŒnˆn¨s€Gð #Ø%Ý" :™œÝ˜v™;œ;Ø(Ø6@À1²n°n˜+¨
Ñ2Ð2È#Ø! D™.Ø! D™.Ø! D™.Øðð €Fõ 
Ð
h˜Ð
hÐ
hÐ
hÀFÐK[ÔD\Ð
hÐ
hÐ
hÐ
hÑiÔiÐiÝ	ð  G˜&Ð!1Ô2ð  Gð  Gð  GÀÐGWÔ@Xð  Gð  Gð  GÐflÐm}Ôf~ð  Gð  Gð  Gð  Gñ  Hô  Hð  HÝ	Ð
{�3˜z™?œ?Ð
{Ð
{¨[Ð
{Ð
{½CÀ
¹O¼OÈKÑ<WÐX[Ñ<[Ð
{Ð
{Ð
{ÕnqÐrxÑnyÔnyÐ
{Ð
{Ñ|Ô|Ð|Ø€Mro   c            
   ƒ   ó   ‡K  — t          d¦  «         dt          fd„Šd„ t          d¦  «        D ¦   «         } ˆfd„t          d¦  «        D ¦   «         }t          j        ¦   «         }t          j        | |z   dd	iŽƒ d
{V —†}t          j        ¦   «         |z
  }d„ |D ¦   «         }t          dt          |¦  «        › d|d›dt          |¦  «        › d�¦  «         t          |¦  «        |t          |¦  «        d„ |D ¦   «         dœS )zJExecute mixed workload: rapid searches, status requests, and edge queries.zE
--- [Phase 3] Mixed Stress Workload (Search + Status + Boundary) ---rf   c              “   ól  K  — t          j        ¦   «         }t          t          ¦  «        4 ƒd {V —†	 \  }}t	          ||¦  «        4 ƒd {V —†	 }|                     ¦   «         ƒ d {V —† |                     di ¬¦  «        ƒ d {V —†}t          j        ¦   «         |z
  }t          j        |j	        d         j
        ¦  «        }d|                     d¦  «        dk    |dœcd d d ¦  «        ƒd {V —† cd d d ¦  «        ƒd {V —† S # 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NÚmem0_statusr   r   ÚstatusÚonline)Útyper   r   )r!   r"   r   r%   r   r&   r'   r+   r,   r)   r*   r-   )rf   r2   r3   r4   r5   r6   r   r8   s           r;   Ústatus_checkz/run_mixed_stress_workload.<locals>.status_checkª   sÞ  è è € ÝÔÑ Ô ˆå•|Ñ$Ô$ð	eð 	eð 	eð 	eð 	eð 	eð 	eð 	eÙ(5¨¨uÝ˜$ Ñ&Ô&ð	eð 	eð 	eð 	eð 	eð 	eð 	eð 	eà*1à×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×)Ò)¨-À2Ð)ÑFÔFÐFÐFÐFÐFÐFÐFˆCÝÔ'Ñ)Ô)¨BÑ.ˆGÝ”:˜cœk¨!œnÔ1Ñ2Ô2ˆDØ$°·²¸(Ñ1CÔ1CÀxÒ1OÐ\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ð 	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ð 	eð 	eð 	eð 	eð 	eð 	eð 	eð 	eð 	eøøøð 	eð 	eð 	eð 	eð 	eð 	es6   ±D#ÁBC?ÃD#Ã?
D		Ä	D#ÄD		ÄD#Ä#
D-Ä0D-c           	      óv   — g | ]6}t          t          |t          t          ¦  «        z           d |z   ¬¦  «        ‘Œ7S )rE   r@   )r<   r]   r/   )rw   rf   s     r;   ry   z-run_mixed_stress_workload.<locals>.<listcomp>¶   sA   € ÐvÐvÐvÐgh•MÕ"3°A½Õ<MÑ8NÔ8NÑ4NÔ"OÐ\_Ð`aÑ\aÐbÑbÔbÐvÐvÐvro   é   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS ru   ru   )rw   rf   rŒ   s     €r;   ry   z-run_mixed_stress_workload.<locals>.<listcomp>·   s!   ø€ Ð6Ð6Ð6¨�L�L ‘O”OÐ6Ð6Ð6ro   é   Úreturn_exceptionsTNc                 ó’   — g | ]D}t          |t          ¦  «        s+t          |t          ¦  «        ¯,|                     d d¦  «        °B|‘ŒES )r   F)Ú
isinstancer0   Údictr-   rv   s     r;   ry   z-run_mixed_stress_workload.<locals>.<listcomp>½   sP   € ÐzÐzÐz�A­
°1µiÑ(@Ô(@ÐzÅZÐPQÕSWÑEXÔEXÐzÐab×afÒafÐgpÐrwÑaxÔaxÐzˆaÐzÐzÐzro   z
Completed z mixed operations in rR   zs with z errors.c                 ó,   — g | ]}t          |¦  «        ‘ŒS ru   )r1   )rw   r:   s     r;   ry   z-run_mixed_stress_workload.<locals>.<listcomp>Ã   s   € Ð*Ð*Ð*˜a•3�q‘6”6Ð*Ð*Ð*ro   )Útotal_operationsÚtotal_time_secÚerror_countr   )r[   Úintr\   r!   r"   r#   r~   r/   )Úsearch_tasksÚstatus_tasksre   Úall_resultsrh   r   rŒ   s         @r;   Úrun_mixed_stress_workloadr�   §   sK  øè è € å	Ð
RÑSÔSÐSð
e�cð 
eð 
eð 
eð 
eð wÐvÕlqÐrtÑluÔluÐvÑvÔv€LØ6Ð6Ð6Ð6­U°1©X¬XÐ6Ñ6Ô6€LåÔÑ!Ô!€GÝœ¨¸Ñ)DÐ^ÐY]Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^€KÝÔ"Ñ$Ô$ wÑ.€JàzÐz˜ÐzÑzÔz€FÝ	Ð
j•s˜;Ñ'Ô'Ð
jÐ
j¸jÐ
jÐ
jÐ
jÕUXÐY_ÑU`ÔU`Ð
jÐ
jÐ
jÑkÔkÐkå Ñ,Ô,Ø$Ý˜6‘{”{Ø*Ð* 6Ð*Ñ*Ô*ð	ð ð ro   c            	   ƒ   óz  K  — t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          dd¬¦  «        ƒ d {V —†} | d         }|sXt          j        d	| d
         › �¦  «        dz   dt          j        |¦  «        iz  }t          t          j        |¦  «        ¦  «        ‚d }t          d¦  «         t          d¬¦  «        ƒ d {V —†}t          d¬¦  «        ƒ d {V —†}t          ¦   «         ƒ d {V —†}t          d¦  «         t          t          ¦  «        4 ƒd {V —†	 \  }}t          ||¦  «        4 ƒd {V —†	 }|                     ¦   «         ƒ d {V —† |                     di ¬¦  «        ƒ d {V —†}	t          j        |	j        d         j        ¦  «        }
t          dt          j        |
d¬¦  «        › �¦  «         d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   |d         |d         z   |d         z   }t          d¦  «         |dk    r)|
                     d¦  «        dk    rt          d¦  «         nt          d|› d �¦  «         t          d¦  «         t+          j        |dk    rdnd!¦  «         d S )"NzF======================================================================z9   MEM0 FASTMCP SERVICE CONCURRENCY & STRESS TEST HARNESSz&   Endpoint: http://127.0.0.1:8765/ssez
[Pre-test Health Check]r   éÿÿÿÿr@   r   zInitial check failed: r    z
>assert %(py1)sÚpy1z5Service connection healthy. Starting stress phases...r=   )r>   rp   )rq   z
[Post-test Final Health Check]rˆ   r   r   zFinal Status: é   )ÚindentrJ   r˜   zG
======================================================================r‰   rŠ   zW STRESS TEST VERDICT: [PASS] Zero socket drops, zero locking errors, 100% success rate!z) STRESS TEST VERDICT: [FAIL] Encountered z
 failures.é   )r[   r<   Ú
@pytest_arÚ_format_assertmsgÚ	_safereprÚAssertionErrorÚ_format_explanationrn   r…   r�   r   r%   r   r&   r'   r+   r,   r)   r*   Údumpsr-   ÚsysÚexit)Ú
pre_statusÚ@py_assert0Ú@py_format2Ú
seq_reportÚburst_reportÚmixed_reportr3   r4   r5   r6   Úpost_statusÚtotal_failuress               r;   Úmainr´   Ç   sk  è è € Ý	ˆ(�O„O€OÝ	Ð
EÑFÔFÐFÝ	Ð
2Ñ3Ô3Ð3Ý	ˆ(�O„O€Oõ 
Ð
%Ñ&Ô&Ð&Ý$ ]¸rÐBÑBÔBÐBÐBÐBÐBÐBÐB€JØ�iÔ ÐPÐ ÐPÕPÔPÐ"P¸:ÀgÔ;NÐ"PÐ"PÑPÔPÐPÑPÐPÕPÔPÐ ÑPÔPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÝ	Ð
AÑBÔBÐBõ ,°"Ð5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5€Jõ .¸"Ð=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=€Lõ 3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4€Lõ 
Ð
,Ñ-Ô-Ð-å•<Ñ Ô ðDð Dð Dð Dð Dð Dð Dð DÙ$1 T¨5Ý�d˜EÑ"Ô"ðDð Dð Dð Dð Dð Dð Dð Dà&-à× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø×%Ò% m¸rÐ%ÑBÔBÐBÐBÐBÐBÐBÐBˆÝ”j ¤¨Q¤Ô!4Ñ5Ô5ˆÝÐB�tœz¨+¸aÐ@Ñ@Ô@ÐBÐBÑCÔCÐCðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð Dð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð  Ð 1Ô2°\ÐBSÔ5TÑTÐWcÐdqÔWrÑr€NÝ	ˆ/ÑÔÐØ˜ÒÐ˜{Ÿš¨xÑ8Ô8¸HÒDÐDÝÐhÑiÔiÐiÐiåÐT¸.ÐTÐTÐTÑUÔUÐUÝ	ˆ(�O„O€Oå„H�. AÒ%Ð%ˆQˆQ¨1Ñ-Ô-Ð-Ð-Ð-s7   ÅHÅBG1ÇHÇ1
G;	Ç;HÇ>G;	Ç?HÈ
HÈ!HÚ__main__)r   )r=   )rp   )$Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriter¤   r#   r+   r_   rª   r!   Útypingr   r   r   Úmcp.client.sessionr   Úmcp.client.sser   ÚhasattrÚstdoutr   Ústderrr%   r(   r]   r1   r™   r<   rn   r…   r�   r´   Ú__name__Úrunru   ro   r;   ú<module>rÄ      s  ððð ð € € € € € € € € € € € € €€€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %à
€7ˆ3Œ:�}Ñ%Ô%ð ?Ø„J×Ò G°IÐÑ>Ô>Ð>Ø
€7ˆ3Œ:�}Ñ%Ô%ð ?Ø„J×Ò G°IÐÑ>Ô>Ð>à*€Ø
€ðð ð Ð ð&&
ð &
˜sð &
°ð &
¸DÀÀcÀ¼Nð &
ð &
ð &
ð &
ðR%ð % cð %°4¸¸S¸´>ð %ð %ð %ð %ðP$ð $¨Cð $¸¸cÀ3¸h¼ð $ð $ð $ð $ðN¨¨c°3¨h¬ð ð ð ð ð@(.ð (.ð (.ðV ˆzÒÐØ€G„K��‘”ÑÔÐÐÐð Ðro   