§
    ‘å®jD%  ã                  óÌ   — d Z ddlmZ ddlmZmZ ddlZddlZddlm	Z	m
Z
mZmZmZmZ ddlZe G d„ d¦  «        ¦   «         Ze G d„ d	¦  «        ¦   «         Z G d
„ d¦  «        ZdS )u½  AutoPOE2 - SIMD Zero-Day Signature Scanner & Player XYZ Bridge (Doc 69 Â§3.4).
=============================================================================
Module cáº§u ná»‘i vÃ  giáº£ láº­p quÃ©t vi sai nhá»‹ phÃ¢n tÄƒng tá»‘c SIMD / Vectorized:
- á»¨ng dá»¥ng táº­p lá»‡nh SIMD (AVX2 / SSE4.2 qua C++ native hoáº·c NumPy vectorized uint8):
  - Ä�á»‹nh vá»‹ 8 Static Roots cá»§a POE2 Client trong thá»�i gian < 3.0ms.
  - QuÃ©t vi sai cá»­a sá»• bá»™ nhá»› Player 16MB Ä‘á»ƒ tÃ¬m kiáº¿m tá»�a Ä‘á»™ XYZ Ä‘á»™ng (Float Range Filter)
    trong thá»�i gian < 1.5ms.
- Loáº¡i bá»� triá»‡t Ä‘á»ƒ neo tÄ©nh cÅ© 0x290 / 0x540 (INV-MEM-DYNAMIC-XYZ).
- TÆ°Æ¡ng thÃ­ch 100% vá»›i Zero-Day Patch War Protocol (AGENTS.md Â§2).

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Python 3.11 Cold Path Tier 2.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p, tráº§n file < 500 dÃ²ng.
- Rule 5: 100% dá»¯ liá»‡u telemetry vÃ  signature tháº­t.
- Báº¥t biáº¿n: INV-MEM-DYNAMIC-XYZ, INV-BUILD-01.
é    )Úannotations)Ú	dataclassÚfieldN)ÚAnyÚDictÚListÚOptionalÚTupleÚUnionc                  óN   — e Zd ZU dZded<   ded<   ded<   dZded	<   d
Zded<   dS )ÚSignatureRootDefu4   Ä�á»‹nh nghÄ©a má»™t static root cáº§n quÃ©t vi sai.ÚstrÚnameÚbytesÚpattern_bytesÚ
mask_bytesé   ÚintÚ
rip_offsetr   Úresolved_addressN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   © ó    úOC:\Projects\AutoPOE2\src\assistant_tool\vision\simd_signature_scanner_bridge.pyr   r      s\   € € € € € € à>Ð>Ø€I€I�IØÐÐÑØÐÐÑØ€JÐÐÐÑØÐÐÐÐÑÐÐr   r   c                  óJ   — e Zd ZU dZded<   ded<   ded<   ded<   dZded	<   d
S )ÚDynamicXyzCandidateuH   á»¨ng viÃªn tá»�a Ä‘á»™ XYZ Ä‘á»™ng tÃ¬m Ä‘Æ°á»£c trong cá»­a sá»• 16MB.r   ÚaddressÚfloatÚxÚyÚzç        Úconfidence_scoreN)r   r   r   r   r   r'   r   r   r   r    r    &   sN   € € € € € € àRÐRØ€L€L�LØ€H€H�HØ€H€H�HØ€H€H�HØ!ÐÐ!Ð!Ð!Ñ!Ð!Ð!r   r    c                  óº   — e Zd ZU dZ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œgZded<   d6d"„Zed7d$„¦   «         Z	 d8d9d+„Z		 d:d;d4„Z
d5S )<ÚSimdSignatureScannerBridgeuI   Cáº§u ná»‘i tÄƒng tá»‘c quÃ©t vi sai chá»¯ kÃ½ nhá»‹ phÃ¢n SIMD cho POE2.ÚInGameStates   H‹    H‹H s   ÿÿÿ    ÿÿÿÿr   )r   ÚpatternÚmaskr   ÚEntityManagers   H‰\$WHƒì H‹Ùs   ÿÿÿÿÿÿÿÿÿÿÿÿÿr   ÚTerrainDatas   H‹    è    H…Àt H‹€s   ÿÿÿ    ÿ    ÿÿÿÿ ÿÿÿÚCameraManagers   ó    A(Îs   ÿÿÿÿ    ÿÿÿÿé   ÚUIHoverContexts   H‹    H…Òt €ºs   ÿÿÿ    ÿÿÿÿ ÿÿÚGameSettingss   H‹    H…Ét H‹ÿP „Às   ÿÿÿ    ÿÿÿÿ ÿÿÿÿÿ ÿÿÚWorldMapLogics   H�    è    „Àu °s   ÿÿÿ    ÿ    ÿÿÿ ÿÿÚItemHoverCaches   H‹=    H…ÿt H‹Ïs   ÿÿÿ    ÿÿÿÿ ÿÿÿzList[Dict[str, Any]]ÚCANONICAL_STATIC_ROOTSÚreturnÚNonec                ó   — d| _         dS )u   Khá»Ÿi táº¡o Scanner Bridge.r&   N)Úlast_scan_duration_ms)Úselfs    r   Ú__init__z#SimdSignatureScannerBridge.__init__?   s   € à,/ˆÔ"Ð"Ð"r   Úboolc                 óV   — t          t          d¦  «        pt          t          d¦  «        S )uW   Kiá»ƒm tra mÃ¡y tÃ­nh hiá»‡n táº¡i cÃ³ há»— trá»£ vector hÃ³a SIMD AVX2/SSE hay khÃ´ng.Ú_coreÚcore)ÚhasattrÚnpr   r   r   Úis_hardware_simd_supportedz5SimdSignatureScannerBridge.is_hardware_simd_supportedC   s#   € õ •r˜7Ñ#Ô#Ð:¥w­r°6Ñ':Ô':Ð:r   ì        Úpe_image_bytesr   Úbase_rvar   úTuple[Dict[str, int], float]c                óª  — t          j        ¦   «         }i }t          |¦  «        }| j        D �]}|d         }|d         }|d         }	t          |¦  «        }
|d         }|d         }d}	 |                     t          |g¦  «        |¦  «        }|dk    s	||
z   |k    rn’d}t          d|
¦  «        D ]'}|	|         d	k    r|||z            ||         k    rd
} nŒ(|rP|dk    rA||z   dz   |k    r5t          j        d|||z   ¦  «        d         }||z   |z   dz   }||z   }|||<   n||z   ||<   n|dz   }ŒÆ�Œt          j        ¦   «         |z
  dz  }|| _	        ||fS )uÂ  QuÃ©t Ä‘á»“ng loáº¡t 8 Static Roots trong Ä‘oáº¡n .text cá»§a PE báº±ng thuáº­t toÃ¡n lá»�c Ä‘a byte.

        Ä�á»™ trá»… báº¯t buá»™c < 3.0 ms cho toÃ n bá»™ 8 roots.

        Args:
            pe_image_bytes: Dá»¯ liá»‡u nhá»‹ phÃ¢n cá»§a Ä‘oáº¡n mÃ£ .text.
            base_rva: Ä�á»‹a chá»‰ RVA gá»‘c cá»§a module.

        Returns:
            Tuple[Dict[str, int], float]: (Tá»« Ä‘iá»ƒn {TÃªn_Root: Ä�á»‹a_Chá»‰_RVA}, Thá»�i_Gian_ms).
        r   r+   r,   r   r   Téÿÿÿÿé   éÿ   Fr0   z<iç     @�@)
ÚtimeÚperf_counterÚlenr5   Úfindr   ÚrangeÚstructÚunpack_fromr9   )r:   rD   rE   Út0ÚresultsÚdata_lenÚrootr   Úpatr,   Úpat_lenr   Ú
first_byteÚ	start_posÚhit_idxÚmatchedÚiÚrel32Únext_ipÚresolvedÚduration_mss                        r   Úscan_batched_static_rootsz4SimdSignatureScannerBridge.scan_batched_static_rootsI   s¾  € õ  ÔÑ Ô ˆØ"$ˆÝ�~Ñ&Ô&ˆàÔ/ð "	(ñ "	(ˆDØ˜”<ˆDØ�y”/ˆCØ˜”<ˆDÝ˜#‘h”hˆGØ˜lÔ+ˆJð ˜QœˆJØˆIð(Ø(×-Ò-­e°Z°LÑ.AÔ.AÀ9ÑMÔM�Ø˜b’=�= G¨gÑ$5¸Ò$@Ð$@Øð �Ý˜q 'Ñ*Ô*ð ð �AØ˜A”w $’�¨>¸'ÀA¹+Ô+FÈ#ÈaÌ&Ò+PÐ+PØ"'˜Ø˜øàð 	à! A’~�~¨'°JÑ*>ÀÑ*BÀhÒ*NÐ*NÝ &Ô 2°4¸ÈÐS]ÑI]Ñ ^Ô ^Ð_`Ô a˜Ø"*¨WÑ"4°zÑ"AÀAÑ"E˜Ø#*¨U¡?˜Ø(0˜ ™˜à(0°7Ñ(:˜ ™Øà# a™K�	ð/(ùõ2 Ô(Ñ*Ô*¨RÑ/°6Ñ9ˆØ%0ˆÔ"Ø˜Ð#Ð#r   ©g     @oÀg     @o@Úmemory_window_16mbÚbase_addressÚexpected_x_rangeúTuple[float, float]Úexpected_y_rangeÚexpected_z_rangeú'Tuple[List[DynamicXyzCandidate], float]c           
     ó6  — t          j        ¦   «         }t          |¦  «        dz  }|d|dz  …         }t          j        |t          j        ¬¦  «        }	|\  }
}|\  }}|\  }}|	dd…         |
k    |	dd…         |k    z  }t          j        |¦  «        d         }g }|D ]à}t          |	|         ¦  «        }t          |	|dz            ¦  «        }t          |	|dz            ¦  «        }||cxk    r|k    rŒn ŒW||cxk    r|k    r|n Œg||dz  z   }|dz  }|d	v rŒyd
}t          |¦  «        dk     r|dz  }|dk    r|dk    r|dz  }| 	                    t          |||||¬¦  «        ¦  «         t          |¦  «        dk    r nŒát          j        ¦   «         |z
  dz  }||fS )u9  QuÃ©t vi sai cá»­a sá»• 16MB bá»™ nhá»› tÃ¬m bá»™ ba tá»�a Ä‘á»™ (X, Y, Z) Ä‘á»™ng (Float32).

        á»¨ng dá»¥ng NumPy vectorization Ä‘á»ƒ kiá»ƒm tra song song 4 triá»‡u float32 trong < 2.0ms:
        - Loáº¡i bá»� 100% cÃ¡c neo tÄ©nh 0x290 / 0x540 (INV-MEM-DYNAMIC-XYZ).

        Args:
            memory_window_16mb: Khá»‘i nhá»› 16MB trÃ­ch xuáº¥t tá»« RAM tiáº¿n trÃ¬nh game.
            base_address: Ä�á»‹a chá»‰ báº¯t Ä‘áº§u cá»§a cá»­a sá»• nhá»› (Virtual Address).
            expected_x_range: Dáº£i tá»�a Ä‘á»™ X há»£p lá»‡ [xmin, xmax].
            expected_y_range: Dáº£i tá»�a Ä‘á»™ Y há»£p lá»‡ [ymin, ymax].
            expected_z_range: Dáº£i Ä‘á»™ cao Z há»£p lá»‡ [zmin, zmax].

        Returns:
            Tuple[List[DynamicXyzCandidate], float]: (Danh sÃ¡ch á»©ng viÃªn XYZ, Thá»�i gian ms).
        r0   N)Údtypeéþÿÿÿr   rI   é   iÿ  )i�  i@  i   g      Y@g     Àb@g      4@r&   g      >@)r!   r#   r$   r%   r'   é   rK   )rL   rM   rN   rA   Ú
frombufferÚfloat32Únonzeror"   ÚabsÚappendr    )r:   rd   re   rf   rh   ri   rS   Ú
num_floatsÚaligned_bytesÚfloat_arrayÚxminÚxmaxÚyminÚymaxÚzminÚzmaxÚx_maskÚ	x_indicesÚ
candidatesÚidxÚval_xÚval_yÚval_zÚtarget_addrÚaddr_offsetÚscorera   s                              r   Ú!scan_player_16mb_differential_xyzz<SimdSignatureScannerBridge.scan_player_16mb_differential_xyz…   s  € õ. ÔÑ Ô ˆõ Ð+Ñ,Ô,°Ñ1ˆ
à*Ð+;¨Z¸!©^Ð+;Ô<ˆÝ”m M½¼ÐDÑDÔDˆà%‰
ˆˆdØ%‰
ˆˆdØ%‰
ˆˆdð ˜c˜r˜cÔ" dÒ*¨{¸3¸B¸3Ô/?À4Ò/GÑHˆÝ”J˜vÑ&Ô& qÔ)ˆ	à02ˆ
ð ð  	ð  	ˆCÝ˜+ cÔ*Ñ+Ô+ˆEÝ˜+ c¨A¡gÔ.Ñ/Ô/ˆEÝ˜+ c¨A¡gÔ.Ñ/Ô/ˆEà�uÐ$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$¨°Ð)>Ð)>Ò)>Ð)>¸$Ò)>Ð)>Ð)>Ð)>Ð)>Ø*¨S°1©WÑ4�ð *¨EÑ1�ØÐ"7Ð7Ð7Øð �Ý�u‘:”: Ò%Ð%Ø˜T‘M�EØ˜C’<�< E¨S¢L LØ˜T‘M�Eà×!Ò!Ý'Ø +ØØØØ).ðñ ô ñô ð õ �z‘?”? bÒ(Ð(Ø�EøåÔ(Ñ*Ô*¨RÑ/°6Ñ9ˆØ˜;Ð&Ð&r   N)r6   r7   )r6   r<   )rC   )rD   r   rE   r   r6   rF   )rc   )rd   r   re   r   rf   rg   rh   rg   ri   rg   r6   rj   )r   r   r   r   r5   r   r;   ÚstaticmethodrB   rb   rˆ   r   r   r   r)   r)   0   s³  € € € € € € ØSÐSð Ð+Zð  eTð  deð  	fð  	fØ Ð-dð  ofð  vwð  	xð  	xØÐ+~ð  I\ð  lmð  	nð  	nØ Ð-`ð  k^ð  noð  	pð  	pØ!Ð.ið  toð  @ð  	Að  	AØÐ,ð  J]ð  mnð  	oð  	oØ Ð-xð  CNð  ^_ð  	`ð  	`Ø!Ð.mð  xwð  GHð  	Ið  	Ið	4Ðð 	ð 	ð 	ñ 	ð0ð 0ð 0ð 0ð ð;ð ;ð ;ñ „\ð;ð $ð:$ð :$ð :$ð :$ð :$ðD 1@ðM'ð M'ð M'ð M'ð M'ð M'ð M'r   r)   )r   Ú
__future__r   Údataclassesr   r   rQ   rL   Útypingr   r   r   r	   r
   r   ÚnumpyrA   r   r    r)   r   r   r   ú<module>rŽ      s-  ððð ð" #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø €€€Ø €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à Ð Ð Ð ð ðð ð ð ð ñ ô ñ „ðð ð"ð "ð "ð "ð "ñ "ô "ñ „ð"ðb'ð b'ð b'ð b'ð b'ñ b'ô b'ð b'ð b'ð b'r   