§
    gEªj=  ã                  óÜ  — d Z 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	  eej	        d¦  «        rej	         
                    d¬¦  «         n# e$ r Y nw xY wddlmZ ddlmZ dd	lmZmZmZmZmZ ej                             d e ee¦  «                             ¦   «         j        j        j        ¦  «        ¦  «         dd
lmZ ddlmZ  G d„ d¦  «        Zd„ Z e!dk    r e ¦   «          dS dS )u‡  AutoPOE2 - Multimodal Telemetry Correlator (Doc 50 / Doc 61 / Rule 2 / Rule 5).
================================================================================
Module chuyÃªn trÃ¡ch há»£p nháº¥t Ä‘a phÆ°Æ¡ng thá»©c (Multimodal Fusion):
1. Chá»¥p/Ä‘á»�c Screenshot hiá»‡n trÆ°á»�ng (.png) + phÃ¢n tÃ­ch quang há»�c (WinOCR & Color Clustering).
2. Ä�á»�c RAM snapshot thÃ´ (.json).
3. TrÃ­ch xuáº¥t tail log game Client.txt (khu vá»±c hiá»‡n táº¡i, loading screen, chat).
4. Ä�á»‘i soÃ¡t mÃ£ báº¥t biáº¿n SSoT (INV-CI-01, INV-FSM-TOWN-NO-EXPLORE, INV-KEY-*).
5. Xuáº¥t ra cáº¥u trÃºc JSON duy nháº¥t, chuáº©n má»±c cho Orchestrator vÃ  Sub-Agents.
é    )ÚannotationsNÚreconfigureúutf-8©Úencoding)Údatetime)ÚPath)ÚAnyÚDictÚListÚOptionalÚTuple)ÚImagec                  óP   — e Zd ZdZ	 	 ddd„Zdd
„Zddd„Zdd„Zdd„Z	 	 dd d„Z	dS )!ÚMultimodalTelemetryCorrelatoru\   Há»£p nháº¥t vÃ  tÆ°Æ¡ng quan dá»¯ liá»‡u Screenshot + RAM + Client.txt thÃ nh JSON chuáº©n.úJC:\Program Files (x86)\Grinding Gear Games\Path of Exile 2\logs\Client.txtÚcapturesÚclient_log_pathÚstrÚcaptures_dirc                ó"   — || _         || _        d S )N)r   r   )Úselfr   r   s      ú?C:\Projects\AutoPOE2\src\assistant_tool\telemetry_correlator.pyÚ__init__z&MultimodalTelemetryCorrelator.__init__$   s   € ð
  /ˆÔØ(ˆÔÐÐó    Úreturnú#Tuple[Optional[str], Optional[str]]c                ó<  — t          t          j        t          j                             | j        d¦  «        ¦  «        t          j        j        d¬¦  «        }d„ |D ¦   «         }|sdS |d         }t          j                             |¦  «        d         }|› d�}t          j                             |¦  «        sbt          t          j        t          j                             | j        d¦  «        ¦  «        t          j        j        d¬¦  «        }|r|d         nd	}||fS )
uT   TÃ¬m cáº·p áº£nh screenshot vÃ  RAM snapshot má»›i nháº¥t trong thÆ° má»¥c captures.z*.pngT)ÚkeyÚreversec                ó�   — g | ]C}|                      d ¦  «        °|                      d¦  «        °,|                      d¦  «        °A|‘ŒDS )z
_thumb.pngz	_view.pngz_CORRELATED.png)Úendswith)Ú.0Úfs     r   ú
<listcomp>zIMultimodalTelemetryCorrelator.get_latest_capture_pair.<locals>.<listcomp>/   sg   € ð 
ð 
ð 
ØØ—:’:˜lÑ+Ô+ð
ð —J’J˜{Ñ+Ô+ð
ð —J’JÐ0Ñ1Ô1ð	
Øð
ð 
ð 
r   ©NNr   z	_RAM.jsonz
*_RAM.jsonN)	ÚsortedÚglobÚosÚpathÚjoinr   ÚgetmtimeÚsplitextÚexists)r   Ú	png_filesÚ
valid_pngsÚ
latest_pngÚbase_no_extÚram_jsonÚall_ramss          r   Úget_latest_capture_pairz5MultimodalTelemetryCorrelator.get_latest_capture_pair,   s  € å�4œ9¥R¤W§\¢\°$Ô2CÀWÑ%MÔ%MÑNÔNÕTVÔT[ÔTdÐnrÐsÑsÔsˆ	ð
ð 
Ø ð
ñ 
ô 
ˆ
ð ð 	Ø�:Ø ”]ˆ
Ý”g×&Ò& zÑ2Ô2°1Ô5ˆØ!Ð,Ð,Ð,ˆÝŒw�~Š~˜hÑ'Ô'ð 	9Ý�dœi­¬¯ª°TÔ5FÈÑ(UÔ(UÑVÔVÕ\^Ô\cÔ\lÐvzÐ{Ñ{Ô{ˆHØ&.Ð8�x ”{�{°DˆHØ˜8Ð#Ð#r   éô  Ú	max_linesÚintúDict[str, Any]c                óN  — dddddg dœ}t           j                             | j        ¦  «        s|S 	 t	          | j        ddd¬	¦  «        5 }|                     ¦   «         | d
…         }d
d
d
¦  «         n# 1 swxY w Y   t          j        d¦  «        }t          j        d¦  «        }|D ]Ò}|                     |¦  «        }|rO| 	                    d¦  «         
                    ¦   «         |d<   t          | 	                    d¦  «        ¦  «        |d<   |                     |¦  «        }	|	rS|	 	                    d¦  «         
                    ¦   «         dvr*|	 	                    d¦  «         
                    ¦   «         |d<   ŒÓ|d                              ¦   «         }
d|
v |d<   d|
v sd|
v sd|
v o|d          |d<   |r.t          |d         ¦  «        dk    r|d         d
d…         nd|d<   d„ |dd
…         D ¦   «         |d<   n)# t          $ r}t          |¦  «        |d<   Y d
}~nd
}~ww xY w|S )uB   Ä�á»�c vÃ  trÃ­ch xuáº¥t thÃ´ng tin trá»�ng yáº¿u tá»« Client.txt.ÚUnknownFç        Ú )Úcurrent_zoneÚ
is_hideoutÚis_mapÚlast_loading_durationÚlast_log_timestampÚrecent_eventsÚrr   Úignore)r   ÚerrorsNz\[SCENE\] Set Source \[(.*?)\]z9\[LOADING SCREEN\] \((.*?)\) Duration = ([\d\.]+) secondsé   r>   é   rA   )z(null)r=   Úhideoutr?   ÚmapÚchamberÚruinsr@   éÿÿÿÿé   rB   c                óN   — g | ]"}d |v sd|v sd|v ¯|                      ¦   «         ‘Œ#S )z
Set SourceÚLOADINGÚConnect)Ústrip)r#   Úls     r   r%   zIMultimodalTelemetryCorrelator.extract_recent_game_log.<locals>.<listcomp>b   sC   € Ð$}Ð$}Ð$}°1À|ÐWXÐGXÐGXÐ\eÐijÐ\jÐ\jÐnwÐ{|Ðn|Ðn| Q§W¢W¡Y¤YÐn|Ðn|Ðn|r   iöÿÿÿrC   Úerror)r)   r*   r.   r   ÚopenÚ	readlinesÚreÚcompileÚsearchÚgrouprR   ÚfloatÚlowerÚlenÚ	Exceptionr   )r   r7   Úinfor$   ÚlinesÚzone_patternÚload_patternÚlineÚm_loadÚm_zoneÚcurrent_lowerÚes               r   Úextract_recent_game_logz5MultimodalTelemetryCorrelator.extract_recent_game_log?   s¶  € ð &ØØØ%(Ø"$Øð
ð 
ˆõ Œw�~Š~˜dÔ2Ñ3Ô3ð 	ØˆKð	#Ý�dÔ*¨C¸'È(ÐSÑSÔSð 3ÐWXØŸš™œ y j k kÔ2�ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3õ œ:Ð&GÑHÔHˆLÝœ:Ð&bÑcÔcˆLàð Cð C�Ø%×,Ò,¨TÑ2Ô2�Øð KØ+1¯<ª<¸©?¬?×+@Ò+@Ñ+BÔ+B�D˜Ñ(Ý49¸&¿,º,Àq¹/¼/Ñ4JÔ4J�DÐ0Ñ1à%×,Ò,¨TÑ2Ô2�Øð C˜fŸlšl¨1™oœo×3Ò3Ñ5Ô5¸^ÐKÐKØ+1¯<ª<¸©?¬?×+@Ò+@Ñ+BÔ+B�D˜Ñ(øà  Ô0×6Ò6Ñ8Ô8ˆMØ!*¨mÐ!;ˆD�ÑØ# }Ð4Ðn¸	À]Ð8RÐnÐV]ÐanÐVnð  KÐx|ð  ~Jô  yKð  uKˆD�‰NØð \Ý?BÀ5ÈÄ9¹~¼~ÐQSÒ?SÐ?S¨U°2¬Y°s¸°s¬^¨^ÐY[�Ð)Ñ*Ø$}Ð$}¸¸c¸d¸d¼Ð$}Ñ$}Ô$}ˆD�Ñ!Ð!øÝð 	#ð 	#ð 	#Ý ™FœFˆD�‰MˆMˆMˆMˆMˆMøøøøð	#øøøàˆs<   ±G< Á	A3Á'G< Á3A7Á7G< Á:A7Á;F G< Ç<
H"ÈHÈH"Úram_json_pathúOptional[str]c                óf  — ddddddg d¢dddddg dœ}|�rFt           j                             |¦  «        �r&	 t          |dd¬¦  «        5 }t	          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     d	i ¦  «        }|                     d
d¦  «        |d
<   |                     dd¦  «        |d<   |                     dd¦  «        |d<   |                     dd¦  «        |d<   |                     dd¦  «        |d<   |                     dd¦  «        |d<   |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        g|d<   t          |                     dg ¦  «        ¦  «        |d<   t          |                     dg ¦  «        ¦  «        |d<   |                     dg ¦  «        |d<   |d         rt          |d         ¦  «        n|                     dd¦  «        |d<   |d         dk    |d<   |d         r|d         dk    n|d
         dk    |d<   n)# t          $ r}t          |¦  «        |d<   Y d}~nd}~ww xY w	 ddl
m}  |¦   «         }|                     ¦   «         }	|	�r|	j        �r|	j        dk    r\t          |d         |	j        ¦  «        |d<   |	j        D ]6}
|
                     d ¦  «        d!k    r|d                              |
¦  «         Œ7|	j        dk    rt          |d         |	j        ¦  «        |d<   |	j        dk    s|	j        dk    rn|	j        |d
<   |	j        |d<   |	j        |d<   |	j        |d<   |	j        dk    |d<   |d         r|	j        dk    n
|	j        dk    |d<   |	j        |	j        |	j        g|d<   n# t          $ r Y nw xY w|S )"u)   PhÃ¢n tÃ­ch ná»™i dung RAM Snapshot thÃ´.r   )r<   r<   r<   F)ÚhpÚmax_hpÚesÚmax_esÚmanaÚmax_manaÚposÚaliveÚis_ciÚmonsters_countÚitems_countÚportals_countÚportalsrD   r   r   NÚplayerrl   rm   rn   ro   rp   rq   Úpos_xr<   Úpos_yÚpos_zrr   Úmonstersru   Úitemsrv   rx   rw   rG   rt   rs   rT   )ÚCoreShmBridgeÚtypeé   )r)   r*   r.   rU   ÚjsonÚloadÚgetr]   r^   r   Ú"src.assistant_tool.core_shm_bridger   Úread_telemetry_snapshotÚ	is_onlinerw   ÚmaxÚentitiesÚappendru   rm   ro   rl   rn   rz   r{   r|   )r   ri   Úvitalsr$   Údatary   rg   r   ÚbridgeÚsnapÚents              r   Úparse_ram_snapshotz0MultimodalTelemetryCorrelator.parse_ram_snapshotg   sK  € ð ˜qØ˜qØ 1Ø"�?�?ØØØØØØð
ð 
ˆð ñ 	)�RœWŸ^š^¨MÑ:Ô:ñ 	)ð)Ý˜-¨°wÐ?Ñ?Ô?ð (À1Ýœ9 Q™<œ<�Dð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð Ÿš (¨BÑ/Ô/�Ø%Ÿzšz¨$°Ñ2Ô2��t‘Ø#)§:¢:¨h¸Ñ#:Ô#:��xÑ Ø%Ÿzšz¨$°Ñ2Ô2��t‘Ø#)§:¢:¨h¸Ñ#:Ô#:��xÑ Ø!'§¢¨F°AÑ!6Ô!6��v‘Ø%+§Z¢Z°
¸AÑ%>Ô%>��zÑ"Ø!'§¢¨G°SÑ!9Ô!9¸6¿:º:ÀgÈsÑ;SÔ;SÐU[×U_ÒU_Ð`gÐilÑUmÔUmÐ n��u‘Ý+.¨t¯xªx¸
ÀBÑ/GÔ/GÑ+HÔ+H�Ð'Ñ(Ý(+¨D¯HªH°W¸bÑ,AÔ,AÑ(BÔ(B��}Ñ%Ø$(§H¢H¨Y¸Ñ$;Ô$;��yÑ!ØDJÈ9ÔDUÐ*w­#¨f°YÔ.?Ñ*@Ô*@Ð*@Ð[_×[cÒ[cÐdsÐuvÑ[wÔ[w��Ñ'à"(¨Ô"2°aÒ"7��w‘Ø7=¸g´Ð#\ 6¨$¤<°!Ò#3Ð#3ÈFÐSWÌLÐ[\ÒL\��w‘�øÝð )ð )ð )Ý"% a¡&¤&��w‘�����øøøøð)øøøð	ØHÐHÐHÐHÐHÐHØ"�]‘_”_ˆFØ×1Ò1Ñ3Ô3ˆDØñ I˜œñ IØÔ%¨Ò)Ð)Ý.1°&¸Ô2IÈ4ÔK]Ñ.^Ô.^�F˜?Ñ+Ø#œ}ð :ð :˜ØŸ7š7 6™?œ?¨aÒ/Ð/Ø" 9Ô-×4Ò4°SÑ9Ô9Ð9øØÔ&¨Ò*Ð*Ý/2°6Ð:JÔ3KÈTÔM`Ñ/aÔ/a�FÐ+Ñ,Ø”; ’?�? d¤k°A¢o oØ#'¤7�F˜4‘LØ'+¤{�F˜8Ñ$Ø#'¤7�F˜4‘LØ'+¤{�F˜8Ñ$Ø'+¤{°aÒ'7�F˜7‘OØ6<¸W´oÐ'V t¤w°¢{ {È4Ì7ÐUVÊ;�F˜7‘OØ%)¤Z°´¸T¼ZÐ$H�F˜5‘MøøÝð 	ð 	ð 	ØˆDð	øøøð ˆsO   ·H3 Á	A*ÁH3 Á*A.Á.H3 Á1A.Á2G H3 È3
IÈ=IÉIÉEN! Î!
N.Î-N.Úimg_pathc           	     óü  ‡‡‡— |ddddddddœ}|rt           j                             |¦  «        s|S 	 t          j        |¦  «        }|j        \  }}|› d|› �|d<   |dz  |dz  cŠ}t          j        |¦  «        |d	<   t          j        |¦  «        |d
<   t          j	        |‰|¬¦  «        |d<   t          j
        |‰|¬¦  «        }|r7d|d<   |d         d         |d         d         g|d<   |d         d         |d<   �nTg }	 ddl}	|	                     |¦  «        }
|
                     dg ¦  «        D ]Æ}d|                     dd¦  «                             ¦   «         v rš|                     dg ¦  «        D ]ƒ}d|                     dd¦  «                             ¦   «         v rW|d         d         |d         d         dz  z   }|d         d         |d         d         dz  z   }|                     ||f¦  «         Œ„ŒÇn# t           $ r Y nw xY w|s|                     d‰z  d|z  f¦  «         g }t#          t%          |dz  ¦  «        t%          |d z  ¦  «        d!¦  «        D ]¦Št#          t%          |dz  ¦  «        t%          |d"z  ¦  «        d!¦  «        D ]rŠt'          ˆˆˆfd#„|D ¦   «         ¦  «        rŒ |                     ‰‰f¦  «        dd!…         \  }}}|d$k    r)||d%z   k    r ||d&z   k    r|                     ‰‰f¦  «         ŒsŒ§|�rNg }|D �]}d}|D ]Û}t+          |d         |d'         z
  ¦  «        d(‰z  k     r´t+          |d         |d)         z
  ¦  «        d*|z  k     r�|d+                              |¦  «         t-          d,„ |d+         D ¦   «         ¦  «        t/          |d+         ¦  «        z  |d'<   t-          d-„ |d+         D ¦   «         ¦  «        t/          |d+         ¦  «        z  |d)<   d} nŒÜ|s&|                     |g|d         |d         d.œ¦  «         �Œd/„ |D ¦   «         }|r/t1          |d0„ ¬1¦  «        }d|d<   |d'         |d)         g|d<   d2|d<   n)# t           $ r}t3          |¦  «        |d3<   Y d}~nd}~ww xY w|S )4u;   PhÃ¢n tÃ­ch thá»‹ giÃ¡c mÃ¡y tÃ­nh trÃªn screenshot tháº­t.r;   FN)Ú
image_pathÚ
resolutionÚis_inventory_openÚis_atlas_openÚportal_detectedÚ
portal_posÚportal_labelÚmap_device_posÚxr”   g      ¤@g     €–@r•   r–   )Úscale_xÚscale_yrš   Tr—   r   rG   r˜   rH   r™   r`   ÚWAYPOINTÚtextr=   ÚwordsÚbounding_rectÚwidthÚyÚheightiÀ  iŠ  gš™™™™™©?gš™™™™™á?r�   gffffffî?c              3  óT   •K  — | ]"\  }}‰|z
  d z  ‰|z
  d z  z   d‰z  d z  k     V — Œ#dS )rH   i  N© )r#   ÚwxÚwyÚsxr›   r£   s      €€€r   ú	<genexpr>z?MultimodalTelemetryCorrelator.analyze_vision.<locals>.<genexpr>Ø   sL   øè è € ÐhÐhÑSYÐSUÐWY  B¡¨1™}°°B±¸1©}Ñ<ÀÀbÁÈQ¹ÒNÐhÐhÐhÐhÐhÐhr   é´   é   é
   ÚcxéZ   Úcyéx   Úptsc              3  ó&   K  — | ]}|d          V — ŒdS )r   Nr¦   ©r#   Úps     r   rª   z?MultimodalTelemetryCorrelator.analyze_vision.<locals>.<genexpr>å   ó&   è è € Ð-EÐ-E°q¨a°¬dÐ-EÐ-EÐ-EÐ-EÐ-EÐ-Er   c              3  ó&   K  — | ]}|d          V — ŒdS )rG   Nr¦   r´   s     r   rª   z?MultimodalTelemetryCorrelator.analyze_vision.<locals>.<genexpr>æ   r¶   r   )r²   r®   r°   c                óD   — g | ]}t          |d          ¦  «        dk    ¯|‘ŒS )r²   r¬   ©r]   )r#   Úcs     r   r%   z@MultimodalTelemetryCorrelator.analyze_vision.<locals>.<listcomp>ì   s,   € ÐHÐHÐH 1µC¸¸%¼±M´MÀRÒ4GÐ4G˜QÐ4GÐ4GÐ4Gr   c                ó,   — t          | d         ¦  «        S )Nr²   r¹   )rº   s    r   ú<lambda>z>MultimodalTelemetryCorrelator.analyze_vision.<locals>.<lambda>î   s   € ½¸A¸e¼H¹¼€ r   )r   ÚVORTEX_BLUErT   )r)   r*   r.   r   rU   ÚsizeÚcommonr•   Úis_atlas_ui_openÚfind_map_device_screen_posÚfind_portal_label_by_ocrÚwinocrÚrecognize_pil_syncr„   ÚupperrŠ   r^   Úranger8   ÚanyÚgetpixelÚabsÚsumr]   rˆ   r   )r   r‘   ÚvisionÚimgÚwÚhÚsyÚlabelsÚ
wp_centersrÃ   Úocr_resrc   Úw_infoÚbxÚbyÚ
portal_ptsrD   ÚgÚbÚclustersÚptÚmatchedrº   ÚvalidÚbestrg   r©   r›   r£   s                             @@@r   Úanalyze_visionz,MultimodalTelemetryCorrelator.analyze_vision¦   se  øøø€ ð #Ø#Ø!&Ø"Ø$ØØ Ø"ð	
ð 	
ˆð ð 	�rœwŸ~š~¨hÑ7Ô7ð 	ØˆMð>	%Ý”*˜XÑ&Ô&ˆCØ”8‰DˆAˆqØ&' : :¨! : :ˆF�<Ñ Ø˜‘Z  V¡ˆFˆB�å*0Ô*BÀ3Ñ*GÔ*GˆFÐ&Ñ'Ý&,Ô&=¸cÑ&BÔ&BˆF�?Ñ#Ý'-Ô'HÈÐVXÐbdÐ'eÑ'eÔ'eˆFÐ#Ñ$åÔ4°SÀ"ÈbÐQÑQÔQˆFØð 1?Ø,0�Ð(Ñ)Ø(.¨q¬	°!¬°f¸Q´iÀ´lÐ'C��|Ñ$Ø)/°¬°1¬��~Ñ&Ñ&à�
ðØ!�M�M�MØ$×7Ò7¸Ñ<Ô<�GØ '§¢¨G°RÑ 8Ô 8ð @ð @˜Ø%¨¯ª°&¸"Ñ)=Ô)=×)CÒ)CÑ)EÔ)EÐEÐEØ*.¯(ª(°7¸BÑ*?Ô*?ð @ð @ Ø#-°·²¸FÀBÑ1GÔ1G×1MÒ1MÑ1OÔ1OÐ#OÐ#OØ)/°Ô)@ÀÔ)EÈÈÔH_Ð`gÔHhÐklÑHlÑ)l BØ)/°Ô)@ÀÔ)EÈÈÔH_Ð`hÔHiÐlmÑHmÑ)m BØ$.×$5Ò$5°r¸2°hÑ$?Ô$?Ð$?øøð@øõ !ð ð ð Ø�Dðøøøà!ð <Ø×%Ò% s¨R¡x°°r±Ð&:Ñ;Ô;Ð;à�
Ý�s 1 t¡8™}œ}­c°!°d±(©m¬m¸QÑ?Ô?ð 6ð 6�AÝ"¥3 q¨4¡x¡=¤=µ#°a¸$±h±-´-ÀÑCÔCð 6ð 6˜ÝÐhÐhÐhÐhÐhÐhÐ]gÐhÑhÔhÑhÔhð %Ø$Ø"%§,¢,°°1¨vÑ"6Ô"6°r¸°rÔ":™˜˜1˜aØ˜sš7˜7 q¨1¨r©6¢z z°a¸!¸b¹&²j°jØ&×-Ò-¨q°!¨fÑ5Ô5Ð5øð6ð ñ ?Ø!�HØ(ð 
Uñ 
U˜Ø"'˜Ø!)ð &ð &˜AÝ" 2 a¤5¨1¨T¬7¡?Ñ3Ô3°b¸2±gÒ=Ð=Å#ÀbÈÄeÈaÐPTÌgÁoÑBVÔBVÐY\Ð_aÑYaÒBaÐBaØ ! %¤§¢°Ñ 3Ô 3Ð 3Ý*-Ð-EÐ-E¸A¸e¼HÐ-EÑ-EÔ-EÑ*EÔ*EÍÈQÈuÌXÉÌÑ*V  $¡Ý*-Ð-EÐ-E¸A¸e¼HÐ-EÑ-EÔ-EÑ*EÔ*EÍÈQÈuÌXÉÌÑ*V  $¡Ø*. Ø % øØ&ð UØ$ŸOšO°R°DÀÀ1ÄÈRÐPQÌUÐ,SÐ,SÑTÔTÐTùàHÐH¨ÐHÑHÔH�EØð ?Ý" 5Ð.EÐ.EÐFÑFÔF˜Ø48˜Ð0Ñ1Ø04°T´
¸DÀ¼JÐ/G˜˜|Ñ,Ø1>˜˜~Ñ.øøÝð 	%ð 	%ð 	%Ý! !™fœfˆF�7‰OˆOˆOˆOˆOˆOøøøøð	%øøøàˆs>   ³CQ ÄC6G8 Ç7Q Ç8
HÈQ ÈHÈIQ Ñ
Q9ÑQ4Ñ4Q9NÚram_pathc                ó,  — |r|s|                       ¦   «         \  }}|p|}|p|}|                      ¦   «         }|                      |¦  «        }|                      |¦  «        }|                     dd¦  «        dk    �rY|                     dd¦  «        dk    �r>|�r;t
          j                             |¦  «        �r	 ddlm	}  |¦   «         }	t          j        |¦  «        }
|	                     |
¦  «        }|rµ|j        r®|j        dk    s|j        dk    r˜|j        |d<   |j        |d<   |j        |d<   |j        |d<   |j        |d<   |j        |d<   |j        |d	<   |j        |d
<   |j        |d<   |j        |d<   |j        dk    |d<   |d         r|j        dk    n
|j        dk    |d<   d|d<   n)# t0          $ r}t3          |¦  «        |d<   Y d}~nd}~ww xY w|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|r|dk    r|dk    rdnd}n|dk    r|dk    rdnd}nd}||                     d¦  «        rdnddddœ}d}d}|                     d¦  «        rd}d|                     d ¦  «        › d!�}n¿|                     d¦  «        rª|                     d"¦  «        p|                     d#d¦  «        dk    }|rAd$}|                     d#d¦  «        dk    rd%nd&}|                     d'¦  «        pd(}d)|› d*|› d+�}n8|                     d,¦  «        rd-}d.}n|                     d/¦  «        rd}d0}nd}d1}t5          j        ¦   «                              d2¦  «        ||||||d3œd4œS )5u/   Táº¡o bÃ¡o cÃ¡o tá»•ng há»£p JSON toÃ n diá»‡n.rm   r   rn   )ÚOpticalHPSensorrl   ro   ÚwardÚmax_wardrp   rq   ÚspiritÚ
max_spiritrG   rt   rs   ÚOPTICAL_WINOCRÚvitals_sourceÚoptical_fusion_errorNFÚPASSEDÚFAILEDÚPENDING_TELEMETRYr?   ÚNOT_IN_HIDEOUTÚ	COMPLIANT)z	INV-CI-01zINV-FSM-TOWN-NO-EXPLOREzINV-INPUT-ABS-MOUSEzINV-KEY-NO-F-FOR-INTERACTu-   Máº·c Ä‘á»‹nh tá»« Ä‘áº§u quy trÃ¬nh Stage 1.r@   é   u   Ä�ang á»Ÿ trong map 'r>   u%   ': Tiáº¿p tá»¥c Stage 5 In-Map Clear.r—   rw   é   ÚRAMu   Quang há»�c (OCR/Vision)r˜   u   Gáº§n Map Deviceu/   á»ž Hideout vÃ  Ä‘Ã£ phÃ¡t hiá»‡n Portal má»Ÿ (u    táº¡i u3   ): Bá»� qua Stage 1-3, nháº£y tháº³ng vÃ o Stage 4!r–   r�   uR   Giao diá»‡n Atlas Ä‘ang má»Ÿ: Tiáº¿n hÃ nh Stage 3 chá»�n node vÃ  náº¡p waystone.r•   u:   TÃºi Ä‘á»“ Ä‘ang má»Ÿ: HoÃ n táº¥t Stage 1 quÃ©t waystone.u9   á»ž Hideout vÃ  chÆ°a má»Ÿ UI: Báº¯t Ä‘áº§u tá»« Stage 1.z%Y-%m-%d %H:%M:%S)Úsuggested_stageÚreason)Ú	timestampÚzonery   rË   Ú
invariantsÚrecommendation)r5   rh   r�   rÞ   r„   r)   r*   r.   Ú$src.assistant_tool.optical_hp_sensorrá   r   rU   Ú_detect_via_winocrÚis_detectedrm   Ú
max_shieldÚ
current_hpÚcurrent_shieldÚcurrent_wardrã   Úcurrent_manarq   Úcurrent_spiritrå   r^   r   r   ÚnowÚstrftime)r   r‘   rß   Ú
latest_imgÚ
latest_ramÚlog_dataÚram_dataÚvision_datará   ÚsensorÚraw_imgÚvrg   rt   Úes_valÚhp_valÚ
max_hp_valÚ	ci_statusrõ   rñ   rò   Ú
has_portalÚ	src_labelÚpos_infos                           r   Ú	correlatez'MultimodalTelemetryCorrelator.correlateö   s}  € ð ð 	.˜xð 	.Ø%)×%AÒ%AÑ%CÔ%CÑ"ˆJ˜
ØÐ- :ˆHØÐ- :ˆHà×/Ò/Ñ1Ô1ˆØ×*Ò*¨8Ñ4Ô4ˆØ×)Ò)¨(Ñ3Ô3ˆð �<Š<˜ !Ñ$Ô$¨Ò)Ñ)¨h¯lªl¸4ÀÑ.CÔ.CÀqÒ.HÑ.HÈXÑ.HÕZ\ÔZa×ZhÒZhÐiqÑZrÔZrÑ.Hð:ØPÐPÐPÐPÐPÐPØ(˜Ñ*Ô*�Ýœ* XÑ.Ô.�Ø×-Ò-¨gÑ6Ô6�Øð A˜œð A¨A¬H°qªL¨L¸A¼LÈ1Ò<LÐ<LØ%&¤\�H˜T‘NØ)*¬�H˜XÑ&Ø%&Ô%5�H˜T‘NØ)*¬�H˜XÑ&Ø'(¤~�H˜VÑ$Ø+,¬:�H˜ZÑ(Ø'(¤~�H˜VÑ$Ø+,¬:�H˜ZÑ(Ø)*Ô)9�H˜XÑ&Ø-.¬\�H˜\Ñ*Ø)*¬°Qª�H˜WÑ%ØAIÈ'ÔARÐ)h¨Ô)9¸AÒ)=Ð)=ÐXYÔXdÐghÒXh�H˜WÑ%Ø0@�H˜_Ñ-øøÝð :ð :ð :Ý36°q±6´6�Ð/Ñ0Ð0Ð0Ð0Ð0Ð0øøøøð:øøøð —’˜W eÑ,Ô,ˆØ—’˜d AÑ&Ô&ˆØ—’˜d AÑ&Ô&ˆØ—\’\ (¨AÑ.Ô.ˆ
àð 	,Ø%+¨a¢Z Z°JÀ!²O°O˜˜È(ˆIˆIØ˜!Š^ˆ^Ø$*¨Q¢J J˜˜°HˆIˆIà+ˆIð #Ø3;·<²<ÀÑ3MÔ3MÐ'c x xÐScØ#.Ø)4ð	
ð 
ˆ
ð ˆØ@ˆØ�<Š<˜Ñ!Ô!ð 	UØˆOØp¨X¯\ª\¸.Ñ-IÔ-IÐpÐpÐpˆFˆFØ�\Š\˜,Ñ'Ô'ð 	UØ$ŸšÐ):Ñ;Ô;Ðc¸x¿|º|ÈOÐ]^Ñ?_Ô?_ÐbcÒ?cˆJØð UØ"#�Ø%-§\¢\°/À1Ñ%EÔ%EÈÒ%IÐ%I˜E˜EÐOi�	Ø&Ÿ?š?¨<Ñ8Ô8ÐNÐ<N�ð [È9ð  [ð  [Ð]eð  [ð  [ð  [��Ø—’ Ñ1Ô1ð UØ"#�Øm��Ø—’Ð!4Ñ5Ô5ð UØ"#�ØU��à"#�ØT�õ "œ™œ×0Ò0Ð1DÑEÔEØØØ!Ø$à#2Ø ðð ð

ð 

ð 
	
s   Â<C0F- Æ-
GÆ7GÇG)r   r   )r   r   r   r   )r   r   )r6   )r7   r8   r   r9   )ri   rj   r   r9   )r‘   rj   r   r9   r&   )r‘   rj   rß   rj   r   r9   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r5   rh   r�   rÞ   r  r¦   r   r   r   r   !   sÀ   € € € € € ØfÐfð  mØ&ð)ð )ð )ð )ð )ð$ð $ð $ð $ð&&ð &ð &ð &ð &ðP=ð =ð =ð =ð~Nð Nð Nð Nðd #'Ø"&ðZ
ð Z
ð Z
ð Z
ð Z
ð Z
ð Z
r   r   c                 ó’   — t          ¦   «         } |                      ¦   «         }t          t          j        |dd¬¦  «        ¦  «         d S )NrH   F)ÚindentÚensure_ascii)r   r  Úprintr‚   Údumps)Ú
correlatorÚreports     r   Úmainr  S  sC   € Ý.Ñ0Ô0€JØ×!Ò!Ñ#Ô#€FÝ	�$Œ*�V A°EÐ
:Ñ
:Ô
:Ñ;Ô;Ð;Ð;Ð;r   Ú__main__)"r  Ú
__future__r   r(   r‚   r)   rW   ÚsysÚhasattrÚstdoutr   r^   r   Úpathlibr	   Útypingr
   r   r   r   r   r*   Úinsertr   Ú__file__ÚresolveÚparentÚPILr   Ú
src.commonr¿   r   r  r  r¦   r   r   ú<module>r+     s¸  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
ð	Ø€wˆsŒz˜=Ñ)Ô)ð 1ØŒ
×Ò¨ÐÑ0Ô0Ð0øøØð 	ð 	ð 	Ø€Dð	øøøà Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à „‡‚��3�3�t�t˜H‘~”~×-Ò-Ñ/Ô/Ô6Ô=ÔDÑEÔEÑ FÔ FÐ Fà Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðo
ð o
ð o
ð o
ð o
ñ o
ô o
ð o
ðd	<ð <ð <ð ˆzÒÐØ€D�F„F€F€F€Fð Ðs   ž,A ÁAÁA