§
    é%Âj9&  ã                   ó´   — d 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  ej        d¦  «        Z	 ej        d¦  «        Z
d„ Zd„ Zd„ Zed	k    r e¦   «          dS dS )
zæCorrelate content-free Gateway/ESP32 markers, never speech or Agent text.
Clock alignment is relative to the first common sequence, NOT one-way latency.
Normal omitted serial samples are unknown, never inferred as missing chunks.
é    N)ÚPathz\x1b\[[0-?]*[ -/]*[@-~]z\b([a-z_]+)=([^\s]+)c                 óÀ   — i }t                                | ¦  «        D ]@\  }}	 d|v rt          |¦  «        nt          |¦  «        ||<   Œ,# t          $ r |||<   Y Œ=w xY w|S )Nú.)ÚKVÚfindallÚfloatÚintÚ
ValueError)ÚlineÚresultÚkeyÚvalues       úa/home/lighthouse/esp32-dev/.cache/wifi-fallback-speech-ab-0.5.1/scripts/correlate-speech-trace.pyÚfieldsr      s{   € Ø€FÝ—j’j Ñ&Ô&ð  ð  ‰
ˆˆUð	 Ø*-°¨,¨,�% ™,œ,˜,½CÀ¹J¼JˆF�3‰KˆKøÝð 	 ð 	 ð 	 ØˆF�3‰KˆKˆKð	 øøøà€Ms   £%A	Á	AÁAc                 ó  ‡‡,‡-‡.‡/‡0‡1— g }d}|                       ¦   «         D ]�Š/d‰/vrŒ	 t          j        ‰/                     dd¦  «        d         ¦  «        }n# t          t
          f$ r |dz  }Y ŒOw xY w|                     d¦  «        ‰k    r|                     |¦  «         Œ‚d„ |D ¦   «         Š1t          d„ t          |¦  «        D ¦   «         i ¦  «        Š.d„ ‰1D ¦   «         Š,t          d„ t          ‰1¦  «        D ¦   «         i ¦  «        }|                     d	‰.                     d
¦  «        r‰.                     d¦  «        nd ¦  «        }‰.                     d¦  «        }d„ |                      ¦   «         D ¦   «         Š0t          ˆfd„t          ‰0¦  «        D ¦   «         d ¦  «        }	t          ‰0¦  «        }
|	�Gt          ˆ0fd„t          |	dz   t          ‰0¦  «        ¦  «        D ¦   «         t          ‰0¦  «        ¦  «        }
|	�
‰0|	|
…         ng }i g g }}}d Š-d}|D ]èŠ/t          ˆ/fd„dD ¦   «         ¦  «        sŒt          ‰/¦  «        }|                     d¦  «        ‰k    rŒGd‰/v r|                     |d         |¦  «         d‰/v r|                     |¦  «         d‰/v r|                     |¦  «         d‰/v r|                     d¦  «        Š-d‰/v r2|                     d¦  «        dk    o|                     d¦  «        dk    }Œé|r|d         ni }‰-�‰-n|                     d¦  «        Š-i i }}|D ]BŠ/d‰/vrd‰/vrŒt          ‰/¦  «        }‰-�|                     d¦  «        ‰-k    rŒ6d‰/v r|}d‰/v r|}ŒCt!          t#          ‰,¦  «        t#          |¦  «        z  ¦  «        }ˆ,fd „|D ¦   «         }|r|d         nd }g }t!          t#          ‰,¦  «        t#          |¦  «        z  t%          |t&          ¦  «        r,d|cxk    rd!k    rn nt#          t          |¦  «        ¦  «        nt#          ¦   «         z  ¦  «        }|D �]=}‰,                     |i ¦  «        |                     |i ¦  «        }}d }|�F|                     d"¦  «        �1|r/|d#         ||         d#         z
  |d"         ‰,|         d"         z
  z
  }|                     t)          ||                     d$¦  «        |                     d"¦  «        |                     d%¦  «        |                     d&¦  «        |                     d#¦  «        ||                     d'¦  «        |                     d(¦  «        |                     d)¦  «        ¬*¦
  «
        ¦  «         �Œ?ˆ.ˆ1fd+„} |d%d,¦  «        } |d&d-¦  «        } |d.d/¦  «        }|                     d0¦  «        } | dk    red } t%          |t&          ¦  «        rN|                     d1¦  «        |                     d2¦  «        k    r"|                     d2|¦  «        |k     r|d2         } |                     d1¦  «        }!t          d3„ |D ¦   «         ¦  «        p|                     d4¦  «        dk    }"‰-d uot          ˆ-fd5„|D ¦   «         ¦  «        }#t+          |¦  «        o|#o|" }$t+          ‰.                     d
¦  «        ¦  «        o|d uo‰.                     d¦  «        |k    }%|%o|d uo|d uo|d6k    o|d7k    o|pdd6k    }&|                     d8d¦  «        d9k    p|                     d:d¦  «        d9k    }'t+          |¦  «        o'|' o$|o"|!|k    o|                     d2¦  «        |k    o| d u }(d;\  })}*|pdd6k    s|pdd7k    rd<\  })}*n€|&r|'s| €|$rd=\  })}*nr|&rp|(rn|                     d>¦  «        dk    rU|                     d?d¦  «        dk    s6|�|                     d@|¦  «        |k     s|                     dAd¦  «        dBk    rdC\  })}*t)          dci dD|)“dE|*“dFdG“dH|“dI|“dJ|“dK|                     d8¦  «        “dL|                     d:¦  «        “dM|“dN|!“dO|                     d2¦  «        “dPt          |¦  «        “dQ| “dR|                     dS¦  «        “dT|“d(|                     d@¦  «        “dU|                     d>¦  «        “dV|r|"nd “dW|r|#nd “dX|r|nd “dY|rt          dZ„ |D ¦   «         ¦  «        nd “d[|“d\d]“d^d_“d`da“Ž}+t)          ‰|+|¬b¦  «        S )dNr   z[SPEECH_TRACE] é   Ú	speech_idc                 óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS )ÚeventÚsend©Úget©Ú.0Úrs     r   ú
<listcomp>zcorrelate.<locals>.<listcomp>(   s,   € Ð<Ð<Ð<�1 1§5¢5¨¡>¤>°VÒ#;Ð#;ˆQÐ#;Ð#;Ð#;ó    c              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )r   ÚsummaryNr   r   s     r   ú	<genexpr>zcorrelate.<locals>.<genexpr>)   s6   è è € ÐKÐK�Q¨q¯uªu°W©~¬~ÀÒ/JÐ/JˆqÐ/JÐ/JÐ/JÐ/JÐKÐKr   c                 óR   — i | ]$}|                      d ¦  «        dk    ¯|d         |“Œ%S )Úmessage_typeÚspeech_chunkÚsequencer   r   s     r   ú
<dictcomp>zcorrelate.<locals>.<dictcomp>*   s4   € ÐYÐYÐY 1°·²°~Ñ1FÔ1FÈ.Ò1XÐ1Xˆa�
Œm˜QÐ1XÐ1XÐ1Xr   c              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )r"   Ú
speech_endNr   r   s     r   r    zcorrelate.<locals>.<genexpr>+   s8   è è € ÐUÐU�q¨q¯uªu°^Ñ/DÔ/DÈÒ/TÐ/T�Ð/TÐ/TÐ/TÐ/TÐUÐUr   ÚchunksÚspeech_end_sentÚcompleted_chunksÚraw_pcm_bytesc                 óD   — g | ]}t                                d |¦  «        ‘ŒS )Ú )ÚANSIÚsub)r   r   s     r   r   zcorrelate.<locals>.<listcomp>.   s&   € ÐEÐEÐE D�T�XŠX�b˜$ÑÔÐEÐEÐEr   c              3   óÂ   •K  — | ]Y\  }}d |v rPt          |¦  «                             d¦  «        dk    ¯/t          |¦  «                             d¦  «        ‰k    ¯U|V — ŒZdS )ú[SPEECH_RX_EVENT]r   ÚstartÚidN©r   r   )r   ÚiÚlr   s      €r   r    zcorrelate.<locals>.<genexpr>0   s{   øè è € ð ^ð ^™˜˜1Ð4GÈ1Ð4LÐ4LÝ˜Q‘i”i—m’m GÑ,Ô,°Ò7Ð7½FÀ1¹I¼I¿MºMÈ$Ñ<OÔ<OÐS\Ò<\Ð<\ð Ø<\Ð<\Ð<\Ð<\ð^ð ^r   c              3   óˆ   •K  — | ]<}d ‰|         v r0t          ‰|         ¦  «                             d¦  «        dk    ¯8|V — Œ=dS )r1   r   r2   Nr4   )r   r5   Úliness     €r   r    zcorrelate.<locals>.<genexpr>4   si   øè è € ð Cð C˜1Ð>QÐUZÐ[\ÔU]Ð>]Ð>]Ý  a¤Ñ)Ô)×-Ò-¨gÑ6Ô6¸'ÒAÐAð ØAÐAÐAÐAðCð Cr   Fc              3   ó    •K  — | ]}|‰v V — Œ	d S )N© )r   Úmarkerr   s     €r   r    zcorrelate.<locals>.<genexpr>;   s?   øè è € ð  Oð  O f�6˜T�>ð  Oð  Oð  Oð  Oð  Oð  Or   )ú[SPEECH_RX]ú[SPEECH_RX_SUMMARY]r1   ú[SPEECH] startú[SPEECH] endr3   r<   Úseqr=   r1   r>   Ú
generationr?   ÚvalidÚqueuedéÿÿÿÿz[SPEECH_PLAY]z[SPEECH_QUEUE]c                 óJ   •— g | ]}‰|                               d ¦  «        ®|‘Œ S )Úsend_complete_msr   )r   Úsr(   s     €r   r   zcorrelate.<locals>.<listcomp>Y   s/   ø€ ÐQÐQÐQ�A 6¨!¤9§=¢=Ð1CÑ#DÔ#DÐ#PˆaÐ#PÐ#PÐ#Pr   iÊ  rF   Úcomplete_msÚsend_attempt_msÚwebsocket_send_msÚdevice_lock_wait_msÚqueue_depth_afterÚplayed_bytesÚpush)
r@   Úgateway_send_startÚgateway_send_completeÚgateway_send_msÚgateway_lock_wait_msÚdevice_frame_completeÚnetwork_gapÚqueue_depthrM   rN   c                 óÜ   •‡ — ˆ fd„‰D ¦   «         }t          ‰                     |¦  «        t          t          f¦  «        r|                     ‰|         ¦  «         |rt          |¦  «        nd S )Nc                 ó~   •— g | ]9}t          |                     ‰¦  «        t          t          f¦  «        ¯1|‰         ‘Œ:S r:   )Ú
isinstancer   r   r	   )r   r   r   s     €r   r   z.correlate.<locals>.maximum.<locals>.<listcomp>i   s:   ø€ ÐPÐPÐP˜Q­:°a·e²e¸C±j´jÅ5Í#À,Ñ+OÔ+OÐP�!�C”&ÐPÐPÐPr   )rX   r   r   r	   ÚappendÚmax)r   ÚfallbackÚvaluesÚgsÚsendss   `  €€r   Úmaximumzcorrelate.<locals>.maximumh   sj   øø€ ØPÐPÐPÐP %ÐPÑPÔPˆÝ�b—f’f˜XÑ&Ô&­µ¨Ñ5Ô5ð 	(Ø�MŠM˜"˜Xœ,Ñ'Ô'Ð'Ø$Ð.�s�6‰{Œ{ˆ{¨$Ð.r   Úmax_websocket_send_msÚmax_device_lock_wait_msÚdrift_from_nominal_msÚmax_drift_msÚfirst_missingÚreceivedÚacceptedc              3   óH   K  — | ]}|                      d ¦  «        dk    V — ŒdS )r   ÚendNr   )r   Úes     r   r    zcorrelate.<locals>.<genexpr>w   s1   è è € Ð;Ð;¨q�1—5’5˜‘>”> UÒ*Ð;Ð;Ð;Ð;Ð;Ð;r   Úend_seenc              3   ól   •K  — | ].}d |v o%t          |¦  «                             d¦  «        ‰k    V — Œ/dS )z[SPEECH] receive idle timeoutrA   Nr4   )r   r   rA   s     €r   r    zcorrelate.<locals>.<genexpr>x   s[   øè è € ð 5ð 5àð 	(¨4Ð/Ð`µF¸4±L´L×4DÒ4DÀ\Ñ4RÔ4RÐV`Ò4`ð5ð 5ð 5ð 5ð 5ð 5r   é–   éd   Ú
max_gap_mséú   Úmax_frame_ms)ÚDz6Insufficient evidence for A/B/C, or no measured stall.)ÚAz/Gateway send >150ms or device lock wait >100ms.)ÚBzlGateway summary normal; device frame/gap >250ms, proven incomplete prefix or end missing at receive timeout.ÚfinalÚwrite_errorsÚbytes_writtenÚmax_write_usi�Ð )ÚCzWGateway/receive normal; settled playback has write error, byte deficit or write >250ms.ÚclassificationÚreasonÚ
root_causeznot determinedÚgateway_max_send_msÚgateway_max_lock_wait_msÚgateway_max_drift_msÚdevice_max_receive_gap_msÚdevice_max_frame_msÚexpected_countÚreceived_countÚaccepted_countÚsampled_sequencesÚfirst_missing_sequenceÚplayed_countÚplayedÚexpected_bytesÚplayback_finalÚspeech_end_seenÚreceive_idle_timeoutÚspeech_end_validÚ
disconnectc              3   ó   K  — | ]}d |v V — Œ	dS )z[CLOUD] disconnectedNr:   )r   r6   s     r   r    zcorrelate.<locals>.<genexpr>–   s(   è è € Ð!NÐ!NÀ!Ð"8¸AÐ"=Ð!NÐ!NÐ!NÐ!NÐ!NÐ!Nr   Úmalformed_gateway_recordsÚnetwork_gap_definitionzZRelative receive-minus-send progression anchored at first common seq; NOT one-way latency.Úmissing_samplesz3Blank rows are unobserved samples, not packet loss.Úplayback_definitionzDSuccessful codec API bytes, not proof of DMA drain or audible sound.)r   r   Úrowsr:   )Ú
splitlinesÚjsonÚloadsÚsplitr
   Ú	TypeErrorr   rY   ÚnextÚreversedÚ	enumerateÚlenÚrangeÚanyr   Ú
setdefaultÚsortedÚsetrX   r	   ÚdictÚbool)2Úgateway_textÚserial_textr   ÚgatewayÚ	malformedÚrecordÚgendÚexpectedrˆ   r2   ÚstopÚscopedÚrxÚ	summariesÚeventsÚ	valid_endÚfÚdsÚplayÚqueueÚcommonÚanchorr“   Ú	sequencesr@   ÚgÚdÚgapr_   Úmax_sendÚmax_lockÚ	max_driftrd   re   rj   Úreceive_timeoutÚend_missing_at_timeoutÚupstream_completeÚgateway_normalÚrx_slowÚreceive_normalry   rz   r   r(   rA   r]   r   r8   r^   s2     `                                         @@@@@@r   Ú	correlaterÄ      sè  øøøøøøø€ Ø€GØ€IØ×'Ò'Ñ)Ô)ð 	#ð 	#ˆØ DÐ(Ð(Øð	Ý”Z §
¢
Ð+<¸aÑ @Ô @ÀÔ CÑDÔDˆFˆFøÝ�IÐ&ð 	ð 	ð 	Ø˜‰NˆIØˆHð	øøøð �:Š:�kÑ"Ô" iÒ/Ð/Ø�NŠN˜6Ñ"Ô"Ð"øØ<Ð<˜Ð<Ñ<Ô<€EÝ	ÐKÐK�( 7Ñ+Ô+ÐKÑKÔKÈRÑ	PÔ	P€BØYÐY¨ÐYÑYÔY€FÝÐUÐU�H U™OœOÐUÑUÔUÐWYÑZÔZ€DØ�xŠx˜ÀÇÂÐGXÑ@YÔ@YÐ"c "§&¢&Ð);Ñ"<Ô"<Ð"<Ð_cÑdÔd€HØ—V’V˜OÑ,Ô,€NØEÐE¨K×,BÒ,BÑ,DÔ,DÐEÑEÔE€Eåð ^ð ^ð ^ð ^¥	¨%Ñ 0Ô 0ð ^ñ ^ô ^Ø_cñeô e€Eåˆu‰:Œ:€DØÐÝð Cð Cð Cð C¥ e¨A¡g­s°5©z¬zÑ :Ô :ð Cñ Cô CÝDGÈÁJÄJñPô Pˆà"'Ð"3ˆU�5˜�:ÔÐ¸€FØ  B�6ˆ	€BØ€JØ€IØð Eð EˆÝð  Oð  Oð  Oð  Oð  1Nð  Oñ  Oô  Oñ  Oô  Oð 	ØÝ�4‰LŒLˆØ�5Š5�‰;Œ;˜)Ò#Ð#ØØ˜DÐ Ð à�MŠM˜!˜Eœ( AÑ&Ô&Ð&Ø  DÐ(Ð(Ø×Ò˜QÑÔÐØ $Ð&Ð&Ø�MŠM˜!ÑÔÐØ˜tÐ#Ð#ØŸš˜|Ñ,Ô,ˆJØ˜TÐ!Ð!ØŸš˜g™œ¨!Ò+ÐD°·²°h±´À1Ò0DˆIøØ#Ð	+ˆ�2Œˆ¨€BØ)Ð5��¸2¿6º6À,Ñ;OÔ;O€JØ�bˆ%€DØð 	ð 	ˆØ $Ð&Ð&Ð+;À4Ð+GÐ+GØÝ�4‰LŒLˆØÐ §¢ |Ñ!4Ô!4¸
Ò!BÐ!BØØ˜dÐ"Ð"ØˆDØ˜tÐ#Ð#ØˆEøÝ•C˜‘K”K¥# b¡'¤'Ñ)Ñ*Ô*€FØQÐQÐQÐQ˜ÐQÑQÔQ€FØ Ð*ˆV�AŒYˆY d€FØ€DÝ•s˜6‘{”{¥S¨¡W¤WÑ,Í
ÐS[Õ]`ÑHaÔHað  1GÐfgÐksÐf{Ðf{Òf{Ðf{Ðw{Òf{Ðf{Ðf{Ðf{Ðf{µµE¸(±O´OÑ0DÔ0DÐ0Dõ  BEñ  BGô  BGñ  Hñ  Iô  I€IØð 
.ñ 
.ˆØ�zŠz˜#˜rÑ"Ô" B§F¢F¨3°¡O¤Oˆ1ˆØˆØÐ !§%¢%Ð(:Ñ";Ô";Ð"GÈAÐ"GØ�mÔ$ R¨¤Z°Ô%>Ñ>ØÐ(Ô)¨&°¬.Ð9KÔ*LÑLñNˆCà�Š•D˜S°Q·U²UÐ;LÑ5MÔ5MØ/0¯uªuÐ5GÑ/HÔ/HÐZ[×Z_ÒZ_Ð`sÑZtÔZtØ./¯eªeÐ4IÑ.JÔ.JÐbc×bgÒbgÐhuÑbvÔbvØ%(°a·e²eÐ<OÑ6PÔ6PÐ_`×_dÒ_dÐesÑ_tÔ_tØŸeše F™mœmð	-ñ -ô -ñ 	.ô 	.ð 	.ñ 	.ð
/ð /ð /ð /ð /ð /ð
 ˆwÐ*Ð,CÑDÔD€HØˆwÐ,Ð.GÑHÔH€HØ�Ð/°Ñ@Ô@€IØ—F’F˜?Ñ+Ô+€MØ˜ÒÐØˆå�h¥Ñ$Ô$ð 	+¨¯ª°
Ñ);Ô);¸r¿vºvÀjÑ?QÔ?QÒ)QÐ)QÐVX×V\ÒV\Ð]gÐiqÑVrÔVrÐu}ÒV}ÐV}Ø˜zœNˆMØ�vŠv�jÑ!Ô!€HÝÐ;Ð;°FÐ;Ñ;Ô;Ñ;Ô;ÐV¸r¿vºvÀjÑ?QÔ?QÐUVÒ?V€HØ ¨Ð,ð µð 5ð 5ð 5ð 5àð5ñ 5ô 5ñ 2ô 2€Oõ
 " "™XœXÐJ¨/ÐJÀ(¸lÐÝ˜RŸVšVÐ$5Ñ6Ô6Ñ7Ô7Ð{¸HÈDÐ<PÐ{ÐUW×U[ÒU[Ð\nÑUoÔUoÐs{ÒU{ÐØ'ð Z¨H¸DÐ,@ð ZÀXÐUYÐEYð ZØ" cš/ðZØ.6¸#ªoðZØCLÀ>ÐPQÐVYÒBYð à�fŠf�\ 1Ñ%Ô%¨Ò+ÐN¨r¯vªv°nÀaÑ/HÔ/HÈ3Ò/N€GÝ˜2‘h”hð S w ;ð S°9ð SÀÈXÒAUð SØŸ&š& Ñ,Ô,°Ò8ðSØ=JÈdÐ=Rð àZÑ€N�FØˆ�A˜ÒÐ  ¨Q°#Ò 5Ð 5Ø!WÑˆ˜˜Ø	ð @˜Wð @¨Ð(AÐE[Ð(Að "UÑˆ˜˜Ø	ð @˜Nð @¨t¯xªx¸Ñ/@Ô/@ÀAÒ/EÐ/EØ�HŠH�^ QÑ'Ô'¨!Ò+Ð+°Ð0JÈtÏxÊxÐXgÐiwÑOxÔOxð  |Jò  PJð  PJØ�xŠx˜¨Ñ*Ô*¨VÒ3Ð3Ø!Ñˆ˜Ýð oð oð o . .ð o¸¸ð oÐL\ÐL\ð oØ'/ xðoØJRÈ(ðoØirÐirðoà-/¯VªV°LÑ-AÔ-AÐ-AðoàWY×W]ÒW]Ð^lÑWmÔWmÐWmðoð #+ (ðoð <D¸8ðoð UW×TZÒTZÐ[eÑTfÔTfÐTfðoõ &)¨¡W¤W Wð	oð FSÀ]ð	oð bg×ajÒajÐksÑatÔatÐatð	oð
 #1 .ðoð
 @D¿xºxÈÑ?XÔ?XÐ?Xðoð #'§(¢(¨7Ñ"3Ô"3Ð"3ðoð RXÐEaÀXÀXÐ]aøðoð <BÐ(K¨¨Àtøðoð 28Ð$A I I¸Tøðoð SYÐb�cÐ!NÐ!NÀvÐ!NÑ!NÔ!NÑNÔNÐNÐ^bøðoð .7¨Yðoð +Gð  +Gðoð $YÐ#Xðoð (nÐ'mðo€Gõ ˜)¨W¸4Ð@Ñ@Ô@Ð@s   ¨.AÁA0Á/A0c                  óÎ  — t          j        t          ¬¦  «        } |                      dt          d¬¦  «         |                      dt          d¬¦  «         |                      dd¬¦  «         |                      dt          ¬	¦  «         |                      ¦   «         }t          |j                             d
¬¦  «        |j	                             d
¬¦  «        |j
        ¦  «        }t          t          j        |d         dd¬¦  «        ¦  «         |d         r”t          j        ¦   «         }t!          j        |t%          |d         d         ¦  «        ¬¦  «        }|                     ¦   «          |                     |d         ¦  «         t          |                     ¦   «         d¬¦  «         |j        r4|j                             t          j        |dd¬¦  «        dz   ¦  «         d S d S )N)Údescriptionz	--gatewayT)ÚtypeÚrequiredz--serialz--speech-id)rÈ   z--json)rÇ   Úreplace)Úerrorsr   é   F)ÚindentÚensure_asciir“   r   )Ú
fieldnamesr-   )rh   ú
)ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr   Ú
parse_argsrÄ   r¦   Ú	read_textÚserialr   Úprintr•   ÚdumpsÚioÚStringIOÚcsvÚ
DictWriterÚlistÚwriteheaderÚ	writerowsÚgetvalueÚ
write_text)ÚparserÚargsr   ÚstreamÚwriters        r   Úmainræ   ž   s¹  € ÝÔ$µÐ9Ñ9Ô9€FØ
×Ò˜­$¸ÐÑ>Ô>Ð>Ø
×Ò˜
­¸ÐÑ=Ô=Ð=Ø
×Ò˜°ÐÑ5Ô5Ð5Ø
×Ò˜¥tÐÑ,Ô,Ð,Ø×ÒÑÔ€DÝ�t”|×-Ò-°YÐ-Ñ?Ô?ÀÄ×AVÒAVÐ^gÐAVÑAhÔAhÐjnÔjxÑyÔy€FÝ	�$Œ*�V˜IÔ&¨q¸uÐ
EÑ
EÔ
EÑFÔFÐFØˆf„~ð )Ý”‘”ˆÝ” µ4¸¸v¼ÀqÔ8IÑ3JÔ3JÐKÑKÔKˆØ×ÒÑÔÐ˜f×.Ò.¨v°f¬~Ñ>Ô>Ð>Ýˆf�oŠoÑÔ RÐ(Ñ(Ô(Ð(Ø„yð TØŒ	×Ò�TœZ¨°qÀuÐMÑMÔMÈdÑRÑSÔSÐSÐSÐSðTð Tr   Ú__main__)rÒ   rÐ   rÛ   rÙ   r•   ÚreÚpathlibr   Úcompiler.   r   r   rÄ   ræ   Ú__name__r:   r   r   ú<module>rì      sÏ   ððð ð €€€Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à€r„zÐ,Ñ-Ô-€Ø€R„ZÐ'Ñ(Ô(€ðð ð ð@Að @Að @AðFTð Tð Tð$ ˆzÒÐØ€D�F„F€F€F€Fð Ðr   