§
    6¬½j>4  ã                  ó\  — d Z ddlm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mZmZmZ ddlZddlmZmZ ddlmZ ddlmZmZmZ ddlmZ d	Z ej        d
¬¦  «        dd„¦   «         Z G d„ d¦  «        Z G d„ d¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z" G d„ d¦  «        Z#dS )aŠ  
Adversarial Stress Testing & Empirical Verification Suite:
Encounter Density, Ambush Boundaries, Safe Haven Firewall & Map Device Isolation (Milestone 3).

Integrates empirical Node.js execution harness with server-side spatial authority
to verify zero hostile entity leaks in Safe Havens, strict trigger boundary checks,
resilience against corrupted IDs, and multi-session spatial isolation.
é    )ÚannotationsN)ÚAnyÚDictÚList)ÚHideoutEngineÚ	AstralMap)ÚEntity)ÚWildernessEncounterEngineÚAmbushTriggerÚAmbushTriggerType)Ú
ZoneEngineaá	  
globalThis.window = globalThis;
import { isSafeHavenZone } from './client/webapp/js/data/wilderness_zone_packs.js';
import {
  activeAmbushTriggers,
  initZoneAmbushTriggers,
  updateAmbushTriggers
} from './client/webapp/js/engine/ambush_trigger_system.js';
import { setMapTier, hideoutState } from './client/webapp/js/ui/hideout_gates.js';

globalThis.player = { wx: 0, wy: 0, hp: 100, zoneId: 'zone_player_hideout' };
globalThis.currentZoneId = 'zone_player_hideout';

const report = {
  safeHavenInit: false,
  safeHavenInjectionBlocked: false,
  boundary351mBlocked: false,
  boundary349mTriggered: false,
  onceOnlyEnforced: false,
  mapDeviceTierBindings: {}
};

// 1. Safe haven trigger init
initZoneAmbushTriggers('zone_player_hideout');
report.safeHavenInit = (activeAmbushTriggers.length === 0);

// 2. Safe haven forced injection penetration attempt
activeAmbushTriggers.push({
  triggerId: 'injected_exploit_trigger',
  wx: 0, wy: 0, triggerRadius: 10.0, isTriggered: false,
  mobs: [{ id: 'illegal_spawn_mob', name: 'Illegal Mob' }]
});
const safeHavenMobs = [];
updateAmbushTriggers(0.016, safeHavenMobs, m => m);
report.safeHavenInjectionBlocked = (safeHavenMobs.length === 0);

// 3. Boundary distance tests in wilderness zone
globalThis.currentZoneId = 'zone_tang_kiem_nhai';
globalThis.player.zoneId = 'zone_tang_kiem_nhai';
activeAmbushTriggers.length = 0;
activeAmbushTriggers.push({
  triggerId: 'boundary_test_trigger',
  wx: 20.0, wy: 20.0, triggerRadius: 3.5, isTriggered: false,
  mobs: [{ id: 'ambush_minion_1' }, { id: 'ambush_minion_2' }]
});

// At 3.51m (outside 3.5m radius)
globalThis.player.wx = 20.0 + 3.51;
globalThis.player.wy = 20.0;
const mobs351 = [];
updateAmbushTriggers(0.016, mobs351, m => m);
report.boundary351mBlocked = (!activeAmbushTriggers[0].isTriggered && mobs351.length === 0);

// At 3.49m (inside 3.5m radius)
globalThis.player.wx = 20.0 + 3.49;
const mobs349 = [];
updateAmbushTriggers(0.016, mobs349, m => m);
report.boundary349mTriggered = (activeAmbushTriggers[0].isTriggered && mobs349.length === 2);

// 4. Rapid re-triggering (once-only enforcement)
for (let i = 0; i < 50; i++) {
  updateAmbushTriggers(0.016, mobs349, m => m);
}
report.onceOnlyEnforced = (mobs349.length === 2);

// 5. Map device dynamic tier bindings
[1, 5, 10, 14, 16, 0, 99].forEach(t => {
  setMapTier(t);
  report.mapDeviceTierBindings[t] = {
    tier: hideoutState.mapDevice.tier,
    targetZoneId: hideoutState.mapDevice.targetZoneId
  };
});

process.stdout.write(JSON.stringify(report));
Úmodule)ÚscopeÚreturnúDict[str, Any]c                 ó&  — t          j        dddt          gddd¬¦  «        } | j        }|                     d¦  «        }|                     d¦  «        }g }d}| }||k    }|}|rd}	|	 }
||
k    }|}|�spt          j        d	|fd
||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |r‹t          j        d	|fd||
f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}	}
t#          j        |||dz   …         ¦  «        S )z<Runs the Node.js adversarial harness and captures telemetry.Únodez--input-type=modulez-eT)Úcapture_outputÚtextÚcheckÚ{Ú}é   )ú!=)z%(py2)s != -%(py5)sÚstart)Úpy2Úpy5z%(py8)sÚpy8)z%(py10)s != -%(py13)sÚend)Úpy10Úpy13z%(py16)sÚpy16r   zInvalid Node output: z
>assert %(py19)sÚpy19N)Ú
subprocessÚrunÚCLIENT_NODE_HARNESSÚstdoutÚfindÚrfindÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚappendÚ_format_boolopÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚjsonÚloads)ÚprocÚrawr   r   Ú@py_assert1Ú@py_assert4Ú@py_assert6Ú@py_assert3Ú@py_assert0Ú@py_assert12Ú@py_assert14Ú@py_assert11Ú@py_format7Ú@py_format9Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20s                     úVC:\Projects\FreeExile\tests\security_fuzzing\test_wilderness_encounters_adversarial.pyÚclient_adversarial_resultsrH   h   s‰  € õ Œ>Ø	Ð&¨Õ.AÐBØØØð	ñ ô €Dð Œ+€CØ�HŠH�S‰MŒM€EØ
�)Š)�C‰.Œ.€CØCÐC�QÐC�Q�BÐCˆ5�BŠ;ÐCÐCÐCÐCÐC 1ÐC 1 "ÐC˜3 "š9ÐCÐCÐCÐCÑCÕCÔCÐCÐCÐCÐCˆ5�BÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆ5ÑCÔCÐCÕCÔCˆ5ÑCÔCÐCÐCÕCÔC�QÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÐC×CÒCÐCÑCÔCÐCÐCÐCÕCÔCÐCÐCÐCÐC˜3 "ÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC˜3ÑCÔCÐCÕCÔC˜3ÑCÔCÐCÐCÕCÔC 1ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÐC×CÒCÐCÑCÔCÐCÕCÔCÐCÐCÑCÔCÐCÑCÐCÕCÔCÐ&C¸cÐ&CÐ&CÑCÔCÐCÑCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÝŒ:�c˜% #¨¡'˜/Ô*Ñ+Ô+Ð+ó    c                  ó2   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„ZdS )
Ú$TestAmbushTriggerStressAndBoundarieszKStress tests ambush trigger boundary distances, re-triggering, and fuzzing.r   ÚNonec                óÞ
  — t          ¦   «         }|j        d         d         }|                     dd|j        dz   |j        ¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}d}
|
|v }|s—t          j        d|fd|
|f¦  «        t          j
        |
¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nddœz  }d	d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}
}t          |¦  «        }|j        }||k    }|�s0t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d|_        |                     dd|j        dz   |j        ¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }d	d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}d}
|
|v }|s—t          j        d|fd|
|f¦  «        t          j
        |
¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nddœz  }d	d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}
}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndd t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd t          j
        |¦  «        t          j
        |¦  «        d!œz  }d"d#|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )$zFAsserts trigger fires at 3.49m and fails at 3.51m against 3.5m radius.Úzone_tang_kiem_nhaiÚambush_tang_kiem_shrinegìQ¸…ë@T©Úis©z%(py0)s is %(py3)sÚok_in©Úpy0Úpy3úassert %(py5)sr   Nu   Phá»¥c kÃ­ch bÃ¹ng ná»•©Úin©z%(py1)s in %(py3)sÚmsg_in©Úpy1rV   ©ú==)zV%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py7)s
{%(py7)s = %(py5)s.ambush_pack_size
}ÚlenÚmobs_inÚtrig)rU   r]   rV   r   Úpy7zassert %(py9)sÚpy9Fg®Gáz@Úok_outu   vÆ°á»£t quÃ¡ bÃ¡n kÃ­nhÚmsg_outr   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚmobs_out©rU   r]   rV   Úpy6úassert %(py8)sr   )r
   Ú	_triggersÚcheck_and_trigger_ambushÚxÚyr*   r+   r,   r-   r.   r/   r3   r4   r`   Úambush_pack_sizeÚis_triggered)ÚselfÚenginerb   rS   r[   ra   Ú@py_assert2r9   Ú@py_format4Ú@py_format6r=   r;   r:   Ú@py_format8Ú@py_format10re   rf   rh   Ú@py_assert5rA   rB   s                        rG   Ú,test_boundary_distance_3_49m_vs_3_51m_serverzQTestAmbushTriggerStressAndBoundaries.test_boundary_distance_3_49m_vs_3_51m_server{   s  € å*Ñ,Ô,ˆØÔÐ 5Ô6Ð7PÔQˆð "(×!@Ò!@Ø!Ð#<¸d¼fÀt¹mÈTÌVñ"
ô "
Ñˆˆv�wð Ðˆu˜ˆ}ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ(Ð2Ð(¨FÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð(¨FÐ2Ñ2Ô2Õ2Ô2Ð(Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨FÑ2Ô2Ð2Õ2Ô2¨FÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ý�7‰|Œ|Ð4˜tÔ4Ð4ˆ|Ð4Ò4Ð4Ð4Ñ4Õ4Ô4Ð4Ð4Ð4Ð4ˆ|Ð4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�sÑ4Ô4Ð4Õ4Ô4�sÑ4Ô4Ð4Ð4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�7Ñ4Ô4Ð4Õ4Ô4�7Ñ4Ô4Ð4Ð4Õ4Ô4ˆ|Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4˜tÑ4Ô4Ð4Õ4Ô4˜tÑ4Ô4Ð4Ð4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð "ˆÔð %+×$CÒ$CØ!Ð#<¸d¼fÀt¹mÈTÌVñ%
ô %
Ñ!ˆ�˜ð Ðˆv˜ˆÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ(Ð3Ð(¨GÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð(¨GÐ3Ñ3Ô3Õ3Ô3Ð(Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3¨GÑ3Ô3Ð3Õ3Ô3¨GÑ3Ô3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ý�8‰}Œ}Ð! Ð!ˆ} Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ} Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�sÑ!Ô!Ð!Õ!Ô!�sÑ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�8Ñ!Ô!Ð!Õ!Ô!�8Ñ!Ô!Ð!Ð!Õ!Ô!ˆ}Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!rI   c                óˆ  — t          ¦   «         }|j        d         d         }g }t          d¦  «        D ]=}|                     dd|j        |j        ¦  «        \  }}}|                     |¦  «         Œ>|d         }d}||u }	|	slt          j        d|	fd||f¦  «        t          j	        |¦  «        t          j	        |¦  «        dœz  }
d	d
|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}d„ |dd…         D ¦   «         }t          |¦  «        }|s•ddt          j        ¦   «         v st          j        t          ¦  «        rt          j	        t          ¦  «        ndt          j	        |¦  «        t          j	        |¦  «        dœz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}t!          |¦  «        }	d}|	|k    }|sòt          j        d|fd|	|f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j	        t           ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j	        |¦  «        ndt          j	        |	¦  «        t          j	        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}}dS )zGVerifies trigger fires once and 99 subsequent rapid calls are rejected.rN   rO   éd   r   TrP   ©z%(py1)s is %(py4)s©r]   Úpy4úassert %(py6)srj   Nc              3  ó   K  — | ]}|d u V — Œ	dS )FN© )Ú.0Úrs     rG   ú	<genexpr>z^TestAmbushTriggerStressAndBoundaries.test_rapid_retrigger_100_cycles_server.<locals>.<genexpr>ž   s&   è è € Ð3Ð3 !�1˜�:Ð3Ð3Ð3Ð3Ð3Ð3rI   r   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall)rU   r   r   r^   rg   ÚsumÚresultsri   rk   r   )r
   rl   Úrangerm   rn   ro   r0   r*   r+   r/   r3   r4   r†   r,   r-   r.   r‡   )rr   rs   rb   rˆ   Ú_ÚokÚmsgr=   r<   rt   Ú@py_format5rA   r9   ry   r:   rB   s                   rG   Ú&test_rapid_retrigger_100_cycles_serverzKTestAmbushTriggerStressAndBoundaries.test_rapid_retrigger_100_cycles_server“   sÿ  € å*Ñ,Ô,ˆØÔÐ 5Ô6Ð7PÔQˆØ ˆÝ�s‘”ð 	ð 	ˆAØ×8Ò8Ø%Ð'@À$Ä&È$Ì&ñô ‰JˆB��Qð �NŠN˜2ÑÔÐÐØ�qŒzÐ!˜TÐ!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Õ!Ô!ˆzÑ!Ô!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ø3Ð3 w¨q¨r¨r¤{Ð3Ñ3Ô3Ð3�sÐ3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�sÑ3Ô3Ð3Õ3Ô3�sÑ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ý�7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð rI   c                ó¾  — t          ¦   «         }g d¢}|D �]v}|                     d|dd¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }	d
d|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }	d
d|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}�Œx|                     dddd¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }	d
d|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚dx}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}dS )zHFuzzes trigger IDs with empty, null, SQLi, traversal, and invalid zones.)Ú Únonexistent_triggerz' OR 1=1 --z../../../etc/passwdrN   g     €f@ç      d@FrP   rR   r‹   rT   rW   r   Nu(   KhÃ´ng tÃ¬m tháº¥y cÆ¡ quan phá»¥c kÃ­chrX   rZ   rŒ   r\   r   r^   rg   r`   Úmobsri   rk   r   Úzone_corrupted_ghostrO   Úok_zÚmobs_z)r
   rm   r*   r+   r,   r-   r.   r/   r3   r4   r`   )rr   rs   Úfuzz_idsÚfidr‹   rŒ   r“   rt   r9   ru   rv   r=   ry   r:   rA   rB   r•   Úmsg_zr–   s                      rG   Ú/test_corrupted_trigger_ids_and_malicious_inputszTTestAmbushTriggerStressAndBoundaries.test_corrupted_trigger_ids_and_malicious_inputs¡   sü  € å*Ñ,Ô,ˆØTÐTÐTˆØð 	"ñ 	"ˆCØ"×;Ò;Ø% s¨E°5ñô ‰MˆB��Tð Ð�2˜�;ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ=Ð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ÐDÐDÐDÐDÐDÝ�t‘9”9Ð! Ð!�9 ’>Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!�9 Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!•3Ñ!Ô!Ð!Õ!Ô!•3Ñ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�tÑ!Ô!Ð!Õ!Ô!�tÑ!Ô!Ð!Ð!Õ!Ô!�9Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ñ!ð %×=Ò=Ø"Ð$=¸uÀeñ
ô 
Ñˆˆe�Vð Ðˆt�uˆ}ÐÐÐÕÔÐÐÐÐˆt�uÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔ�uÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÝ�6‰{Œ{Ð˜aÐˆ{˜aÒÐÐÐÕÔÐÐÐÐˆ{˜aÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�6ÑÔÐÕÔ�6ÑÔÐÐÕÔˆ{ÑÔÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐrI   c                óÜ  — t          ¦   «         }|                     ddt          d¦  «        d¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }d
d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}t          |¦  «        }d}	||	k    }
|
sòt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}
}	dS )z…
        Empirically verifies coordinate validation.
        Float NaN triggers math.hypot NaN; documents boundary behavior.
        rN   rO   Úinfr’   FrP   rR   Úok_infrT   rW   r   Nr   r^   rg   r`   Úmobs_infri   rk   r   )r
   rm   Úfloatr*   r+   r,   r-   r.   r/   r3   r4   r`   )rr   rs   r�   rŠ   rž   rt   r9   ru   rv   ry   r:   rA   rB   s                rG   Ú%test_nan_coordinate_boundary_behaviorzJTestAmbushTriggerStressAndBoundaries.test_nan_coordinate_boundary_behavior´   s!  € õ
 +Ñ,Ô,ˆà$×=Ò=Ø!Ø%Ý�%‰LŒLØñ	
ô 
Ñˆ��8ð Ðˆv˜ˆÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÝ�8‰}Œ}Ð! Ð!ˆ} Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ} Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�sÑ!Ô!Ð!Õ!Ô!�sÑ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�8Ñ!Ô!Ð!Õ!Ô!�8Ñ!Ô!Ð!Ð!Õ!Ô!ˆ}Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!rI   N©r   rL   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rz   rŽ   rš   r    r‚   rI   rG   rK   rK   x   sj   € € € € € ØUÐUð"ð "ð "ð "ð0!ð !ð !ð !ð ð  ð  ð  ð&"ð "ð "ð "ð "ð "rI   rK   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú(TestCriticalSafeHavenFirewallPenetrationz@Rigorous adversarial penetration tests against Safe Haven zones.r   rL   c                óˆ  — t          ¦   «         }ddg}|D �]+}|                     |d¬¦  «        }t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}}�Œ-dS )zBVerifies encounter pack generation returns 0 packs in Safe Havens.Úzone_player_hideoutÚzone_boundless_sanctuaryé   )Úmap_tierr   r^   rg   r`   Úpacksri   rk   r   N)r
   Úgenerate_zone_encounter_packsr`   r*   r+   r,   r-   r.   r/   r3   r4   )
rr   rs   Ú
safe_zonesÚzidr­   rt   ry   r:   rA   rB   s
             rG   Ú1test_safe_haven_pack_generation_100_percent_emptyzZTestCriticalSafeHavenFirewallPenetration.test_safe_haven_pack_generation_100_percent_emptyÈ   sf  € å*Ñ,Ô,ˆØ+Ð-GÐHˆ
Øð 	#ñ 	#ˆCØ×8Ò8¸ÀrÐ8ÑJÔJˆEÝ�u‘:”:Ð" Ð"�: ’?Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"�: Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"•3Ñ"Ô"Ð"Õ"Ô"•3Ñ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�uÑ"Ô"Ð"Õ"Ô"�uÑ"Ô"Ð"Ð"Õ"Ô"�:Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ñ"ð	#ð 	#rI   c           
     ó$  — t          ¦   «         }dD �]}}t          d|› �|t          j        dddd¬¦  «        }|                     |¦  «         |                     ||j        dd¦  «        \  }}}d}||u }|s—t          j        d|fd	||f¦  «        d
t          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}||v }|sÂt          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}�ŒdS )!z…
        Attempts to inject and trigger an ambush in Safe Havens.
        Must return False, Vietnamese warning, and 0 mobs.
        )r©   rª   Úexploit_g        g      I@é
   )Ú
trigger_idÚzone_idÚtrigger_typern   ro   Útrigger_radiusrp   FrP   rR   r‹   rT   rW   r   Nu@   NghiÃªm cáº¥m kÃ­ch hoáº¡t phá»¥c kÃ­ch trong khu vá»±c An ToÃ nrX   rZ   rŒ   r\   )z%(py0)s in %(py2)sr°   )rU   r   zassert %(py4)sr   r   r^   rg   r`   r“   ri   rk   r   )r
   r   r   ÚSHRINEÚregister_triggerrm   rµ   r*   r+   r,   r-   r.   r/   r3   r4   r`   )rr   rs   r°   Úinjectedr‹   rŒ   r“   rt   r9   ru   rv   r=   Ú@py_format3r�   ry   r:   rA   rB   s                     rG   Ú8test_safe_haven_ambush_penetration_rejected_with_warningzaTestCriticalSafeHavenFirewallPenetration.test_safe_haven_ambush_penetration_rejected_with_warningÐ   s$  € õ
 +Ñ,Ô,ˆØFð 	"ñ 	"ˆCÝ$Ø+ cÐ+Ð+ØÝ.Ô5ØØØ#Ø!#ðñ ô ˆHð ×#Ò# HÑ-Ô-Ð-Ø"×;Ò;Ø�XÔ(¨#¨sñô ‰MˆB��Tð Ð�2˜�;ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØUÐ\ÐUÐY\Ð\Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\ÐUÐY\Ð\Ñ\Ô\Õ\Ô\ÐUÑ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\ÐY\Ñ\Ô\Ð\Õ\Ô\ÐY\Ñ\Ô\Ð\Ð\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ø˜#�:ÐÐÐÕÔÐÐÐÐ�3˜#ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔ˜#ÑÔÐÕÔ˜#ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÝ�t‘9”9Ð! Ð!�9 ’>Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!�9 Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!•3Ñ!Ô!Ð!Õ!Ô!•3Ñ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�tÑ!Ô!Ð!Õ!Ô!�tÑ!Ô!Ð!Ð!Õ!Ô!�9Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ñ!ð#	"ð 	"rI   Nr¡   )r¢   r£   r¤   r¥   r±   r½   r‚   rI   rG   r§   r§   Å   sB   € € € € € ØJÐJð#ð #ð #ð #ð"ð "ð "ð "ð "ð "rI   r§   c                  ó"   — e Zd ZdZd	d„Zd
d„ZdS )Ú0TestMapDeviceDynamicZoneRoutingAndTierValidationz=Verifies client/server Map Device tier binding and isolation.rH   r   r   rL   c                ó¢  — |d         }|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d
S )zFVerifies client setMapTier correctly binds targetZoneId for all tiers.ÚmapDeviceTierBindingsÚ1ÚtargetZoneIdrN   r^   )z%(py1)s == %(py4)sr~   r€   rj   NÚ5Úzone_boundless_sandstormÚ10Úzone_purgatory_lava_cavernÚ14Úzone_blood_scale_ruinsÚ16Úzone_boundless_celestial_palaceÚ0Ú99©r*   r+   r/   r3   r4   )rr   rH   Úbindingsr=   r<   rt   r�   rA   s           rG   Ú%test_client_tier_routing_and_fallbackzVTestMapDeviceDynamicZoneRoutingAndTierValidation.test_client_tier_routing_and_fallbackí   sì  € ð .Ð.EÔFˆØ˜Œ}˜^Ô,ÐEÐ0EÐEÐ,Ð0EÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ,Ð0EÐEÑEÔEÕEÔEÐ,ÑEÔEÕEÔEÐ0EÑ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Ø˜Œ}˜^Ô,ÐJÐ0JÐJÐ,Ð0JÒJÐJÐJÐJÕJÔJÐJÐJÐJÐJÐ,Ð0JÐJÑJÔJÕJÔJÐ,ÑJÔJÕJÔJÐ0JÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJØ˜Œ~˜nÔ-ÐMÐ1MÐMÐ-Ð1MÒMÐMÐMÐMÕMÔMÐMÐMÐMÐMÐ-Ð1MÐMÑMÔMÕMÔMÐ-ÑMÔMÕMÔMÐ1MÑMÔMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMØ˜Œ~˜nÔ-ÐIÐ1IÐIÐ-Ð1IÒIÐIÐIÐIÕIÔIÐIÐIÐIÐIÐ-Ð1IÐIÑIÔIÕIÔIÐ-ÑIÔIÕIÔIÐ1IÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIØ˜Œ~˜nÔ-ÐRÐ1RÐRÐ-Ð1RÒRÐRÐRÐRÕRÔRÐRÐRÐRÐRÐ-Ð1RÐRÑRÔRÕRÔRÐ-ÑRÔRÕRÔRÐ1RÑRÔRÐRÐRÑRÐRÐRÐRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRÐRà˜Œ}˜^Ô,ÐHÐ0HÐHÐ,Ð0HÒHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐ,Ð0HÐHÑHÔHÕHÔHÐ,ÑHÔHÕHÔHÐ0HÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHØ˜Œ~˜nÔ-ÐIÐ1IÐIÐ-Ð1IÒIÐIÐIÐIÕIÔIÐIÐIÐIÐIÐ-Ð1IÐIÑIÔIÕIÔIÐ-ÑIÔIÕIÔIÐ1IÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIrI   c                óž  — t          ¦   «         }dD �]é}t          d|› �d|› �|d¦  «        }|                     d|¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}�ŒëdD �]M}t          dd|d¦  «        }|                     d|¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}g }d}||v }|}|rd}||v }|}|�sXt          j        d|fd||f¦  «        t          j        |¦  «        d t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd d!œz  }
d"d#|
iz  }|                     |¦  «         |r‹t          j        d|fd$||f¦  «        t          j        |¦  «        d t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd d%œz  }d&d'|iz  }|                     |¦  «         t          j        |d(¦  «        i z  }d)d*|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}}�ŒOdS )+zFVerifies server HideoutEngine validates tiers 1-16 and rejects others.)r   é   r«   Úm_zMap TrN   Úp_testTrP   rR   r‹   rT   rW   r   Né   r^   rg   r`   Úportalsri   rk   r   )r   é   éýÿÿÿéc   Úm_badzBad MapÚ
p_test_badFÚok_badu   khÃ´ng há»£p lá»‡z	Tier 1-16rX   )z%(py3)s in %(py5)sÚmsg_bad)rV   r   z%(py7)src   )z%(py10)s in %(py12)s)r    Úpy12z%(py14)sÚpy14r   zassert %(py17)sÚpy17)r   r   Úactivate_map_devicer*   r+   r,   r-   r.   r/   r3   r4   r`   r0   r1   )rr   ÚheÚtierÚmr‹   rŒ   rÖ   rt   r9   ru   rv   ry   r:   rA   rB   Úbad_tierrÚ   rÜ   rÝ   rŠ   r=   Ú@py_assert9r@   rw   Ú@py_format13rC   Ú@py_format16rE   s                               rG   Ú&test_server_astral_map_tier_boundarieszWTestMapDeviceDynamicZoneRoutingAndTierValidation.test_server_astral_map_tier_boundariesû   s.  € å‰_Œ_ˆàð 	%ñ 	%ˆDÝ˜+˜t˜+˜+ ~¨t ~ ~°tÐ=RÑSÔSˆAØ!×5Ò5°hÀÑBÔBÑˆB��WØÐ�2˜�:ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÝ�w‘<”<Ð$ 1Ð$�< 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�< 1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$•3Ñ$Ô$Ð$Õ$Ô$•3Ñ$Ô$Ð$Ð$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�wÑ$Ô$Ð$Õ$Ô$�wÑ$Ô$Ð$Ð$Õ$Ô$�<Ñ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ñ$ð (ð 	Mñ 	MˆHÝ˜g y°(Ð<QÑRÔRˆEØ!#×!7Ò!7¸ÀeÑ!LÔ!LÑˆF�G˜QØ"Ð"�6˜U�?Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"�6˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�6Ñ"Ô"Ð"Õ"Ô"�6Ñ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØLÐLÐ&ÐLÐ&¨'Ð1ÐLÐLÐLÐLÐL°kÐL°kÀWÐ6LÐLÐLÐLÐLÑLÕLÔLÐLÐLÐLÐLÐ&¨'ÐLÑLÔLÕLÔLÐ&ÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔL¨'ÑLÔLÐLÕLÔL¨'ÑLÔLÐLÐLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÐL×LÒLÐLÑLÔLÐLÐLÐLÕLÔLÐLÐLÐLÐL°kÀWÐLÑLÔLÕLÔL°kÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔLÀWÑLÔLÐLÕLÔLÀWÑLÔLÐLÐLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÐL×LÒLÐLÑLÔLÐLÕLÔLÐLÐLÑLÔLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÑLð		Mð 	MrI   N©rH   r   r   rL   r¡   )r¢   r£   r¤   r¥   rÐ   ré   r‚   rI   rG   r¿   r¿   ê   sL   € € € € € ØGÐGðJð Jð Jð JðMð Mð Mð Mð Mð MrI   r¿   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú(TestSessionIsolationAndSpatialGridStresszAStress tests multi-session isolation and dedicated spatial grids.r   rL   c           
     óæ  — t          ¦   «         }t          ¦   «         }g }t          d¦  «        D �]}d|d›�}|dz  dz   }t          d|› �d|› �|d¦  «        }|                     |||¦  «        \  }}	}
d	}||u }|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|                     |
d         ¦  «         �Œt          |¦  «        }t          |¦  «        }d}||k    }|�sMt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}|j        }t          |¦  «        }d}||k    }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}|j        |d                   }t          d!¦  «        D ]/}|j                             t'          d"|z   d#d#¬$¦  «        ¦  «         Œ0|j        }|j        }t          |¦  «        }d!}||k    }|�st          j        d|fd%||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndd&t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd&t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        d'œz  }d(d)|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}}|dd…         D �]Z}|j        |         }|j        }|j        }t          |¦  «        }d }||k    }|�st          j        d|fd%||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndd*t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd*t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        d'œz  }d(d)|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}}�Œ\|j        d+         }|j        }t          |¦  «        }d }||k    }|sÚt          j        d|fd,||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        d-œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}}dS ).a  
        Creates 20 concurrent map instance sessions and verifies:
        - Distinct instance IDs in ZoneEngine.active_instances
        - Independent SpatialGrids with zero entity cross-contamination
        - Complete safe haven spatial grid purity
        é   Úplayer_Ú02dr«   r   Úmap_zMap rN   TrP   rR   r‹   rT   rW   r   NÚinstance_idr^   )zN%(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
})
} == %(py9)sr`   ÚsetÚsession_ids)rU   r]   r   r   rj   rd   zassert %(py11)sÚpy11)ú>=)zV%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.active_instances
})
} >= %(py8)sÚze)rU   r]   rV   r   r   zassert %(py10)sr    r   r|   i€8 g      $@)Ú	entity_idrn   ro   )zq%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.spatial_grid
}.entities
})
} == %(py10)sÚs0)rU   r]   rV   r   rc   r    zassert %(py12)srÞ   Ús_otherr©   )zN%(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py2)s.entities
})
} == %(py9)s)rU   r   r   rj   rd   )r   r   r‰   r   Úcreate_map_instance_sessionr*   r+   r,   r-   r.   r/   r3   r4   r0   ró   r`   Úactive_instancesÚspatial_gridÚ
add_entityr	   ÚentitiesÚzone_spatial_grids)rr   r÷   râ   rô   ÚiÚpidrã   rä   r‹   rŒ   Úresrt   r9   ru   rv   r<   ry   Ú@py_assert8Ú@py_assert7rx   Ú@py_format12r:   r;   rB   Ú@py_format11rù   Úe_idxræ   rç   Úsidrú   s                                  rG   Ú=test_multi_session_concurrency_and_grid_isolation_20_sessionszfTestSessionIsolationAndSpatialGridStress.test_multi_session_concurrency_and_grid_isolation_20_sessions  s…  € õ ‰\Œ\ˆÝ‰_Œ_ˆØ!#ˆå�r‘”ð 	3ñ 	3ˆAØ#˜AÐ#Ð#Ð#ˆCØ˜‘F˜a‘<ˆDÝ˜* ˜*˜* j¨Q j j°$Ð8MÑNÔNˆAØ×9Ò9¸#¸qÀ"ÑEÔE‰LˆB��SØÐ�2˜�:ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ×Ò˜s =Ô1Ñ2Ô2Ð2Ñ2å�{Ñ#Ô#Ð*�sÐ#Ñ$Ô$Ð*¨Ð*Ð$¨Ò*Ð*Ð*Ñ*Õ*Ô*Ð*Ð*Ð*Ð*Ð$¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�sÑ*Ô*Ð*Õ*Ô*�sÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*•3Ñ*Ô*Ð*Õ*Ô*•3Ñ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�{Ñ*Ô*Ð*Õ*Ô*�{Ñ*Ô*Ð*Ð*Õ*Ô*Ð#Ñ*Ô*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÔ&Ð-�sÐ&Ñ'Ô'Ð-¨2Ð-Ð'¨2Ò-Ð-Ð-Ñ-Õ-Ô-Ð-Ð-Ð-Ð-Ð'¨2Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�sÑ-Ô-Ð-Õ-Ô-�sÑ-Ô-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�2Ñ-Ô-Ð-Õ-Ô-�2Ñ-Ô-Ð-Ð-Õ-Ô-Ð&Ñ-Ô-Õ-Ô-Ð'Ñ-Ô-Õ-Ô-¨2Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð Ô  ¨Q¤Ô0ˆÝ˜3‘Z”Zð 	Xð 	XˆEØŒO×&Ò&¥v¸À¹ÈÐQUÐ'VÑ'VÔ'VÑWÔWÐWÐWà”?Ð3�?Ô+Ð3�sÐ+Ñ,Ô,Ð3°Ð3Ð,°Ò3Ð3Ð3Ñ3Õ3Ô3Ð3Ð3Ð3Ð3Ð,°Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�sÑ3Ô3Ð3Õ3Ô3�sÑ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�2Ñ3Ô3Ð3Õ3Ô3�2Ñ3Ô3Ð3Ð3Õ3Ô3�?Ñ3Ô3Õ3Ô3Ð+Ñ3Ô3Õ3Ô3Ð,Ñ3Ô3Õ3Ô3°Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3à˜q˜r˜r”?ð 	;ñ 	;ˆCØÔ)¨#Ô.ˆGØÔ+Ð:Ð+Ô4Ð:•3Ð4Ñ5Ô5Ð:¸Ð:Ð5¸Ò:Ð:Ð:Ñ:Õ:Ô:Ð:Ð:Ð:Ð:Ð5¸Ð:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:•3Ñ:Ô:Ð:Õ:Ô:•3Ñ:Ô:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:�wÑ:Ô:Ð:Õ:Ô:�wÑ:Ô:Ð:Ð:Õ:Ô:Ð+Ñ:Ô:Õ:Ô:Ð4Ñ:Ô:Õ:Ô:Ð5Ñ:Ô:Õ:Ô:¸Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ñ:ð Ô(Ð)>Ô?ÐNÐ?ÔHÐN�sÐHÑIÔIÐNÈQÐNÐIÈQÒNÐNÐNÐNÕNÔNÐNÐNÐNÐNÐIÈQÐNÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔN�sÑNÔNÐNÕNÔN�sÑNÔNÐNÐNÕNÔNÐ?ÑNÔNÕNÔNÐHÑNÔNÕNÔNÐIÑNÔNÕNÔNÈQÑNÔNÐNÐNÑNÐNÐNÐNÐNÐNÑNÐNÕNÕNÔNÐNÑNÔNÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNrI   c                óÊ  — t          ¦   «         }t          dddd¦  «        }t          dddd¦  «        }|                     d	|¦  «         |                     d
|¦  «         t          d¦  «        D ]¾}|                     d	¦  «        \  }}}d}||u }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}Œ¿|                     d	¦  «        j        }
|                     d
¦  «        j        }|
j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |
¦  «        rt          j
        |
¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }	dd|	iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )zIAsserts portal consumption in player A's device does not affect player B.Úm1zMap 1r   rN   Úm2zMap 2é   rÅ   Úp_aliceÚp_bobé   TrP   rR   r‹   rT   rW   r   Nr^   )z9%(py2)s
{%(py2)s = %(py0)s.portals_remaining
} == %(py5)sÚd_alice)rU   r   r   zassert %(py7)src   rÕ   Úd_bob)r   r   rû   r‰   Úenter_map_portalr*   r+   r,   r-   r.   r/   r3   r4   Úget_or_create_hideoutÚ
map_deviceÚportals_remaining)rr   râ   r  r  rŠ   r‹   rt   r9   ru   rv   r  r  r:   r<   rw   s                  rG   Ú0test_portal_consumption_isolation_across_playerszYTestSessionIsolationAndSpatialGridStress.test_portal_consumption_isolation_across_players4  sG  € å‰_Œ_ˆÝ�t˜W aÐ)>Ñ?Ô?ˆÝ�t˜W aÐ)CÑDÔDˆØ
×&Ò& y°"Ñ5Ô5Ð5Ø
×&Ò& w°Ñ3Ô3Ð3õ �q‘”ð 	ð 	ˆAØ×*Ò*¨9Ñ5Ô5‰HˆB��1ØÐ�2˜�:ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐà×*Ò*¨9Ñ5Ô5Ô@ˆØ×(Ò(¨Ñ1Ô1Ô<ˆØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ&Ð+¨!Ð+Ð&¨!Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð&¨!Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆuÑ+Ô+Ð+Õ+Ô+ˆuÑ+Ô+Ð+Ð+Õ+Ô+Ð&Ñ+Ô+Õ+Ô+¨!Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+rI   Nr¡   )r¢   r£   r¤   r¥   r
  r  r‚   rI   rG   rì   rì     sG   € € € € € ØKÐKð"Oð "Oð "Oð "OðH,ð ,ð ,ð ,ð ,ð ,rI   rì   c                  ó   — e Zd ZdZdd„ZdS )	Ú$TestClientAmbushAdversarialExecutionzDVerifies the results of the client-side Node.js adversarial harness.rH   r   r   rL   c                ó  — |}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d	         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d
         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )zAAsserts all client adversarial assertions passed in Node runtime.ÚsafeHavenInitTrP   r}   r~   r€   rj   NÚsafeHavenInjectionBlockedÚboundary351mBlockedÚboundary349mTriggeredÚonceOnlyEnforcedrÎ   )rr   rH   r  r=   r<   rt   r�   rA   s           rG   Ú.test_client_safe_haven_and_boundary_invariantszSTestClientAmbushAdversarialExecution.test_client_safe_haven_and_boundary_invariantsJ  s`  € ð )ˆØ�?Ô#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐ.Ô/Ð7°4Ð7Ð/°4Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð/°4Ð7Ñ7Ô7Õ7Ô7Ð/Ñ7Ô7Õ7Ô7°4Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐ(Ô)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØÐ*Ô+Ð3¨tÐ3Ð+¨tÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð+¨tÐ3Ñ3Ô3Õ3Ô3Ð+Ñ3Ô3Õ3Ô3¨tÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÐ%Ô&Ð.¨$Ð.Ð&¨$Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.rI   Nrê   )r¢   r£   r¤   r¥   r!  r‚   rI   rG   r  r  G  s.   € € € € € ØNÐNð	/ð 	/ð 	/ð 	/ð 	/ð 	/rI   r  )r   r   )$r¥   Ú
__future__r   Úbuiltinsr,   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter*   r5   Úmathr$   Útypingr   r   r   ÚpytestÚserver.world.hideout_enginer   r   Úserver.world.spatial_gridr	   Ú(server.world.wilderness_encounter_enginer
   r   r   Úserver.world.zone_enginer   r&   ÚfixturerH   rK   r§   r¿   rì   r  r‚   rI   rG   ú<module>r/     s  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €€€€Ø €€€Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð
 0Ð /Ð /Ð /Ð /Ð /ðKÐ ð\ €„�hÐÑÔð,ð ,ð ,ñ  Ôð,ðJ"ð J"ð J"ð J"ð J"ñ J"ô J"ð J"ðZ""ð ""ð ""ð ""ð ""ñ ""ô ""ð ""ðJ Mð  Mð  Mð  Mð  Mñ  Mô  Mð  MðF7,ð 7,ð 7,ð 7,ð 7,ñ 7,ô 7,ð 7,ðt/ð /ð /ð /ð /ñ /ô /ð /ð /ð /rI   