§
    Í½j  ã                  ó  — 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 ddlZ ee¦  «                             ¦   «         j        j        j        Zedz  Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «          ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         ddlmZmZmZ ddlmZ  G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        ZdS )aê  
Empirical Adversarial Stress Test Suite for Milestone 2:
- Exact 250ms i-frame boundaries (t=0ms, 249ms, 250ms evaded; 251ms damaged; negative timestamps rejected)
- Sequential dodge resets and extension logic
- Animation cancelling during attack wind-up and action locks
- 3-charge pool budgeting, depletion lockout, and multi-tier recharge
- 4 Weapon swing archetypes parameter verification (SLASH, THRUST, SLAM, BOLT)
- Execution of Node.js empirical runtime harness for client modules
é    )ÚannotationsN)ÚPathÚserver)ÚCombatEngineÚCombatActorÚDamageEventResult)ÚFiveElementsc                  óŠ   — e Zd ZdZej        dd„¦   «         Zej                             dg d¢¦  «        dd„¦   «         Z	dd„Z
dS )ÚTestExactIFrameBoundariesServerz=Adversarial stress-testing of server-side i-frame boundaries.Úreturnú-tuple[CombatEngine, CombatActor, CombatActor]c                óò   — t          ¦   «         }t          ddt          j        d¬¦  «        }t          ddt          j        dd¬¦  «        }|                     |¦  «         |                     |¦  «         |||fS )	Né   ÚSavageHellhoundg      ^@)Úbase_attacké   Ú
PrimalHeroç     @@)Ú
current_hpÚmax_hp)r   r   r	   ÚHOAÚKIMÚregister_actor)ÚselfÚengineÚattackerÚdefenders       úGC:\Projects\FreeExile\tests\unit\test_challenger_m2_empirical_stress.pyÚsetup_combatz,TestExactIFrameBoundariesServer.setup_combat    sw   € å‘”ˆÝ˜qÐ"3µ\Ô5EÐSXÐYÑYÔYˆÝ˜q ,µÔ0@ÈUÐ[`ÐaÑaÔaˆØ×Ò˜hÑ'Ô'Ð'Ø×Ò˜hÑ'Ô'Ð'Ø�x Ð)Ð)ó    zdelta_ms, should_evade))r   T)r   T)é2   T)é}   T)éø   T)éù   T)éú   T)éû   F)éü   F)i,  F)iô  F)éÿÿÿÿF)iÎÿÿÿFr   Údelta_msÚintÚshould_evadeÚboolÚNonec                óê
  — |\  }}}d}|                      |j        |¦  «         ||z   }|                     |j        |j        dt          j        |¦  «        }	|�rŽ|	j        }
d}|
|u }|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  }t          j        d|› d	�¦  «        d
z   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  }t          j        d|	j        › �¦  «        d
z   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  }t          j        d¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}}dS |	j        }
d}|
|u }|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  }t          j        d|› d�¦  «        d
z   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  }t          j        d|	j        › �¦  «        d
z   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  }t          j        d¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}}dS )z_Verifies damage is evaded at t=0ms, 249ms, 250ms, and damage is taken at t=251ms and negatives.é@B ç      Y@T©Úis©z1%(py2)s
{%(py2)s = %(py0)s.is_evaded
} is %(py5)sÚres©Úpy0Úpy2Úpy5zAttack at delta=zms should be evaded!ú
>assert %(py7)sÚpy7Nç        ©ú==)z4%(py2)s
{%(py2)s = %(py0)s.final_damage
} == %(py5)sz'Evaded attack must yield 0 damage, got r   )z2%(py2)s
{%(py2)s = %(py0)s.current_hp
} == %(py5)sr   z.Defender HP must not decrease on evaded attackFzms should NOT be evaded!©ú>©z3%(py2)s
{%(py2)s = %(py0)s.final_damage
} > %(py5)sz,Non-evaded attack must yield >0 damage, got )ú<)z1%(py2)s
{%(py2)s = %(py0)s.current_hp
} < %(py5)sz Defender HP must decrease on hit)Útrigger_phantom_evasionÚactor_idÚcalculate_damager	   r   Ú	is_evadedÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚfinal_damager   )r   r   r)   r+   r   r   r   Út0Úhit_timer4   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s                  r   Útest_exact_iframe_boundariesz<TestExactIFrameBoundariesServer.test_exact_iframe_boundaries)   sJ  € ð, &2Ñ"ˆ�˜(ØˆØ×&Ò& xÔ'8¸"Ñ=Ô=Ð=Ø˜‘=ˆà×%Ò% hÔ&7¸Ô9JÈEÕS_ÔScÐemÑnÔnˆØñ 	SØ”=Ð[ DÐ[�= DÐ(Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[�= DÐ[Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[�3Ñ[Ô[Ð[Õ[Ô[�3Ñ[Ô[Ð[Ð[Õ[Ô[�=Ñ[Ô[Õ[Ô[ DÑ[Ô[Ð[Ð[Ñ[Ð[Õ[Ô[Ð*[¸XÐ*[Ð*[Ð*[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ØÔ#Ðh sÐhÐ# sÒ*ÐhÐhÐhÕhÔhÐhÐhÐhÐhÐ# sÐhÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔh�3ÑhÔhÐhÕhÔh�3ÑhÔhÐhÐhÕhÔhÐ#ÑhÔhÕhÔh sÑhÔhÐhÐhÑhÐhÕhÔhÐ,hÐVYÔVfÐ,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ØÔ&Ða¨%ÐaÐ&¨%Ò/ÐaÐaÐaÕaÔaÐaÐaÐaÐaÐ&¨%ÐaÑaÔaÐaÕaÔaÑaÔaÐaÐaÕaÔa�8ÑaÔaÐaÕaÔa�8ÑaÔaÐaÐaÕaÔaÐ&ÑaÔaÕaÔa¨%ÑaÔaÐaÐaÑaÐaÕaÔaÐ1aÑaÔaÐaÑaÐaÐaÐaÑaÐaÕaÕaÔaÐaÑaÔaÑaÔaÐaÐaÐaÐaÐaÐaÐaÐaÐaà”=Ð` EÐ`�= EÐ)Ð`Ð`Ð`Õ`Ô`Ð`Ð`Ð`Ð`�= EÐ`Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`�3Ñ`Ô`Ð`Õ`Ô`�3Ñ`Ô`Ð`Ð`Õ`Ô`�=Ñ`Ô`Õ`Ô` EÑ`Ô`Ð`Ð`Ñ`Ð`Õ`Ô`Ð+`¸hÐ+`Ð+`Ð+`Ñ`Ô`Ð`Ñ`Ð`Ð`Ð`Ñ`Ð`Õ`Õ`Ô`Ð`Ñ`Ô`Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ØÔ#Ðl cÐlÐ# cÒ)ÐlÐlÐlÕlÔlÐlÐlÐlÐlÐ# cÐlÑlÔlÐlÕlÔlÑlÔlÐlÐlÕlÔl�3ÑlÔlÐlÕlÔl�3ÑlÔlÐlÐlÕlÔlÐ#ÑlÔlÕlÔl cÑlÔlÐlÐlÑlÐlÕlÔlÐ+lÐZ]ÔZjÐ+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ØÔ&ÐR¨ÐRÐ&¨Ò.ÐRÐRÐRÕRÔRÐRÐRÐRÐRÐ&¨ÐRÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR�8ÑRÔRÐRÕRÔR�8ÑRÔRÐRÐRÕRÔRÐ&ÑRÔRÕRÔR¨ÑRÔRÐRÐRÑRÐRÕRÔRÐ0RÑ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ÐRr    c                ó‚	  — |\  }}}d}|                      |j        |¦  «         |                     |j        |j        dt          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        |¦  «        t          j        |¦  «        dœz  }
d	d
|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}|                      |j        |dz   ¦  «         |                     |j        |j        dt          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        |¦  «        t          j        |¦  «        dœz  }
d	d
|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}|                     |j        |j        dt          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        |¦  «        t          j        |¦  «        dœz  }
d	d
|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}|                     |j        |j        dt          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        |¦  «        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 )zCSecond dodge during active i-frame resets the 250ms window forward.r/   r0   éÈ   Tr1   r3   Úres1r5   úassert %(py7)sr:   Ni�  Úres2iÂ  Úres3iÃ  FÚres4r;   r>   r@   )rB   rC   rD   r	   r   rE   rF   rG   rH   rI   rJ   rK   rM   rN   rO   )r   r   r   r   r   rP   rZ   rR   rS   rT   rU   rV   r\   r]   r^   s                  r   Ú/test_sequential_dodge_resets_and_extends_iframezOTestExactIFrameBoundariesServer.test_sequential_dodge_resets_and_extends_iframeN   s`  € ð
 &2Ñ"ˆ�˜(ØˆØ×&Ò& xÔ'8¸"Ñ=Ô=Ð=ð ×&Ò& xÔ'8¸(Ô:KÈUÕT`ÔTdÐfhÐknÑfnÑoÔoˆØŒ~Ð% Ð%ˆ~ Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ~ Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð 	×&Ò& xÔ'8¸"¸s¹(ÑCÔCÐCð ×&Ò& xÔ'8¸(Ô:KÈUÕT`ÔTdÐfhÐknÑfnÑoÔoˆØŒ~Ð% Ð%ˆ~ Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ~ Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð ×&Ò& xÔ'8¸(Ô:KÈUÕT`ÔTdÐfhÐknÑfnÑoÔoˆØŒ~Ð% Ð%ˆ~ Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ~ Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð ×&Ò& xÔ'8¸(Ô:KÈUÕT`ÔTdÐfhÐknÑfnÑoÔoˆØŒ~Ð& Ð&ˆ~ Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ~ Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Ð&Õ&Ô&ˆ~Ñ&Ô&Õ&Ô& Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ Ð& 3Ð&Ð  3Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  3Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Ð&Õ&Ô&Ð Ñ&Ô&Õ&Ô& 3Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r    N)r   r   )r   r   r)   r*   r+   r,   r   r-   )r   r   r   r-   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpytestÚfixturer   ÚmarkÚparametrizerW   r_   © r    r   r   r      s™   € € € € € ØGÐGà„^ð*ð *ð *ñ „^ð*ð „[×ÒÐ5ð 8ð 8ð 8ñ ô ðSð Sð Sñô ðSð,'ð 'ð 'ð 'ð 'ð 'r    r   c                  óp   — e Zd ZdZ ej        d¬¦  «        dd„¦   «         Zdd„Zdd„Zdd	„Z	dd
„Z
dd„ZdS )Ú TestWeaponSwingArchetypesCatalogzWVerifies all 4 weapon swing archetypes and their parameters in weapon_swing_catalog.js.T)Úautouser   r-   c                óh   — t           dz  dz  dz  dz  dz  }|                     d¬¦  «        | _        d S )NÚclientÚwebappÚjsÚdatazweapon_swing_catalog.jszutf-8)Úencoding)ÚPROJECT_ROOTÚ	read_textÚcode)r   Úcatalog_paths     r   Úload_catalogz-TestWeaponSwingArchetypesCatalog.load_catalogo   s=   € å# hÑ.°Ñ9¸DÑ@À6ÑIÐLeÑeˆØ ×*Ò*°GÐ*Ñ<Ô<ˆŒ	ˆ	ˆ	r    c                ó  — dD �]}| j         }||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t          j        |¦  «        dœz  }t          j        d|› d�¦  «        d	z   d
|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}�Œd S )N)zSLASH:zTHRUST:zSLAM:zBOLT:©Úin)z,%(py0)s in %(py4)s
{%(py4)s = %(py2)s.code
}Úarchr   ©r6   r7   Úpy4z
Archetype z must exist in catalogz
>assert %(py6)sÚpy6)
rt   rF   rG   rH   rI   rJ   rK   rL   rM   rN   )r   rz   rT   rR   Ú@py_format5Ú@py_format7s         r   Útest_four_archetype_ids_existz>TestWeaponSwingArchetypesCatalog.test_four_archetype_ids_existt   s=  € Ø;ð 	Pñ 	PˆDØœ9ÐO�4˜9Ð$ÐOÐOÐOÕOÔOÐOÐOÐOÐO�4˜9ÐOÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO�4ÑOÔOÐOÕOÔO�4ÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔO˜4ÑOÔOÐOÕOÔO˜4ÑOÔOÐOÐOÕOÔO˜9ÑOÔOÐOÐOÑOÐOÕOÔOÐ&O°4Ð&OÐ&OÐ&OÑOÔOÐOÑOÐOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOÐOÑOð	Pð 	Pr    c                óx
  — d}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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	}| j         }||v }|sªt          j        d|fd||f¦  «        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
}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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 S )Nzid: 'SLASH'rx   ©z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.code
}r   ©Úpy1Úpy3r8   r[   r:   zstyle: 'arc'zhitStopFrames: 3zhitStopDuration: 0.05zsweepAngleDeg: 135zreachRadius: 56zparticleType: 'fire'©	rt   rF   rG   rK   rH   rI   rJ   rM   rN   ©r   Ú@py_assert0rS   Ú@py_assert2rU   rV   s         r   Útest_slash_archetype_specsz;TestWeaponSwingArchetypesCatalog.test_slash_archetype_specsx   s"  € ØÐ) ¤	Ð)ˆ} 	Ð)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ} 	Ð)Ñ)Ô)Õ)Ô)ˆ}Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô) Ñ)Ô)Ð)Õ)Ô) Ñ)Ô)Ð)Ð)Õ)Ô) 	Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÐ* ¤Ð*ˆ~ Ð*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*ˆ~ Ð*Ñ*Ô*Õ*Ô*ˆ~Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* Ñ*Ô*Ð*Õ*Ô* Ñ*Ô*Ð*Ð*Õ*Ô* Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø&Ð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Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø#Ð0 t¤yÐ0Ð# yÐ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð# yÐ0Ñ0Ô0Õ0Ô0Ð#Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0 tÑ0Ô0Ð0Õ0Ô0 tÑ0Ô0Ð0Ð0Õ0Ô0 yÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø Ð- D¤IÐ-Ð  IÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð  IÐ-Ñ-Ô-Õ-Ô-Ð Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- DÑ-Ô-Ð-Õ-Ô- DÑ-Ô-Ð-Ð-Õ-Ô- IÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø%Ð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Ô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Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r    c                óx
  — d}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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	}| j         }||v }|sªt          j        d|fd||f¦  «        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
}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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 S )Nzid: 'THRUST'rx   r‚   r   rƒ   r[   r:   zstyle: 'cone'úhitStopFrames: 2úhitStopDuration: 0.035zsweepAngleDeg: 35zreachRadius: 84zparticleType: 'thunder'r†   r‡   s         r   Útest_thrust_archetype_specsz<TestWeaponSwingArchetypesCatalog.test_thrust_archetype_specs�   s"  € ØÐ* ¤Ð*ˆ~ Ð*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*ˆ~ Ð*Ñ*Ô*Õ*Ô*ˆ~Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* Ñ*Ô*Ð*Õ*Ô* Ñ*Ô*Ð*Ð*Õ*Ô* Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÐ+ $¤)Ð+ˆ )Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆ )Ð+Ñ+Ô+Õ+Ô+ˆÑ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ $Ñ+Ô+Ð+Õ+Ô+ $Ñ+Ô+Ð+Ð+Õ+Ô+ )Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø'Ð4¨4¬9Ð4Ð'¨9Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð'¨9Ð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¨9Ñ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Ø"Ð/ d¤iÐ/Ð" iÐ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð" iÐ/Ñ/Ô/Õ/Ô/Ð"Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ dÑ/Ô/Ð/Õ/Ô/ dÑ/Ô/Ð/Ð/Õ/Ô/ iÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø Ð- D¤IÐ-Ð  IÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð  IÐ-Ñ-Ô-Õ-Ô-Ð Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- DÑ-Ô-Ð-Õ-Ô- DÑ-Ô-Ð-Ð-Õ-Ô- IÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø(Ð5¨D¬IÐ5Ð(¨IÐ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð(¨IÐ5Ñ5Ô5Õ5Ô5Ð(Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5¨DÑ5Ô5Ð5Õ5Ô5¨DÑ5Ô5Ð5Ð5Õ5Ô5¨IÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r    c                óx
  — d}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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	}| j         }||v }|sªt          j        d|fd||f¦  «        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
}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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 S )Nz
id: 'SLAM'rx   r‚   r   rƒ   r[   r:   zstyle: 'radial'zhitStopFrames: 4zhitStopDuration: 0.066zsweepAngleDeg: 360zreachRadius: 76zparticleType: 'earth'r†   r‡   s         r   Útest_slam_archetype_specsz:TestWeaponSwingArchetypesCatalog.test_slam_archetype_specsŠ   s%  € ØÐ(˜tœyÐ(ˆ|˜yÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆ|˜yÐ(Ñ(Ô(Õ(Ô(ˆ|Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜tÑ(Ô(Ð(Õ(Ô(˜tÑ(Ô(Ð(Ð(Õ(Ô(˜yÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø Ð- D¤IÐ-Ð  IÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð  IÐ-Ñ-Ô-Õ-Ô-Ð Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- DÑ-Ô-Ð-Õ-Ô- DÑ-Ô-Ð-Ð-Õ-Ô- IÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø'Ð4¨4¬9Ð4Ð'¨9Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð'¨9Ð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¨9Ñ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Ø#Ð0 t¤yÐ0Ð# yÐ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð# yÐ0Ñ0Ô0Õ0Ô0Ð#Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0 tÑ0Ô0Ð0Õ0Ô0 tÑ0Ô0Ð0Ð0Õ0Ô0 yÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø Ð- D¤IÐ-Ð  IÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð  IÐ-Ñ-Ô-Õ-Ô-Ð Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- DÑ-Ô-Ð-Õ-Ô- DÑ-Ô-Ð-Ð-Õ-Ô- IÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø&Ð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Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r    c                óx
  — d}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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	}| j         }||v }|sªt          j        d|fd||f¦  «        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
}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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}| j         }||v }|sªt          j        d|fd||f¦  «        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 S )Nz
id: 'BOLT'rx   r‚   r   rƒ   r[   r:   zstyle: 'beam'rŒ   r�   zsweepAngleDeg: 20zreachRadius: 180zparticleType: 'phantom'r†   r‡   s         r   Útest_bolt_archetype_specsz:TestWeaponSwingArchetypesCatalog.test_bolt_archetype_specs“   s"  € ØÐ(˜tœyÐ(ˆ|˜yÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆ|˜yÐ(Ñ(Ô(Õ(Ô(ˆ|Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜tÑ(Ô(Ð(Õ(Ô(˜tÑ(Ô(Ð(Ð(Õ(Ô(˜yÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÐ+ $¤)Ð+ˆ )Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆ )Ð+Ñ+Ô+Õ+Ô+ˆÑ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ $Ñ+Ô+Ð+Õ+Ô+ $Ñ+Ô+Ð+Ð+Õ+Ô+ )Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø'Ð4¨4¬9Ð4Ð'¨9Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð'¨9Ð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¨9Ñ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Ø"Ð/ d¤iÐ/Ð" iÐ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð" iÐ/Ñ/Ô/Õ/Ô/Ð"Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ dÑ/Ô/Ð/Õ/Ô/ dÑ/Ô/Ð/Ð/Õ/Ô/ iÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø!Ð. T¤YÐ.Ð! YÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. TÑ.Ô.Ð.Õ.Ô. TÑ.Ô.Ð.Ð.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø(Ð5¨D¬IÐ5Ð(¨IÐ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð(¨IÐ5Ñ5Ô5Õ5Ô5Ð(Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5¨DÑ5Ô5Ð5Õ5Ô5¨DÑ5Ô5Ð5Ð5Õ5Ô5¨IÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r    N©r   r-   )r`   ra   rb   rc   rd   re   rv   r€   rŠ   rŽ   r�   r’   rh   r    r   rj   rj   l   s°   € € € € € ØaÐaà€V„^˜DÐ!Ñ!Ô!ð=ð =ð =ñ "Ô!ð=ðPð Pð Pð Pð3ð 3ð 3ð 3ð6ð 6ð 6ð 6ð4ð 4ð 4ð 4ð6ð 6ð 6ð 6ð 6ð 6r    rj   c                  ó   — e Zd ZdZdd„ZdS )Ú#TestNodeJsEmpiricalHarnessExecutionzRExecutes the full Node.js runtime stress harness to empirically verify JS modules.r   r-   c                óÞ  — t          t          ¦  «        j        dz  }|j        } |¦   «         }|s t	          j        d¦  «        dz   dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}}t          j        dt          |¦  «        gddt          t          ¦  «        ¬¦  «        }|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  }t	          j        d|j        › d|j        › �¦  «        dz   d|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}}d}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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}	|j        }|	|v }
|
sªt	          j        d|
fd|	|f¦  «        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 S )Nzharness_m2_empirical.mjsz#harness_m2_empirical.mjs must existzC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Úharness_pathr{   ÚnodeT)Úcapture_outputÚtextÚcwdr   r<   )z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sÚprocr5   z*Node.js empirical harness failed:
STDOUT:
z	
STDERR:
r9   r:   z-=== ALL 5 EMPIRICAL HARNESS CHECKS PASSED ===rx   )z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
}rƒ   r[   z-PASS: Animation cancelling interrupts wind-upzLPASS: Client i-frame bounds strictly: evaded at 0ms, 249ms; damaged at 251msz-PASS: 3-charge pool limits, depletion lockoutz2PASS: All 4 archetypes (SLASH, THRUST, SLAM, BOLT)z+PASS: Hit-stop freeze, NaN/undefined safety)r   Ú__file__ÚparentÚexistsrF   rL   rH   rI   rJ   rK   rM   rN   Ú
subprocessÚrunÚstrrr   Ú
returncoderG   ÚstdoutÚstderr)r   r—   rR   rT   r~   rœ   rS   rU   rV   rˆ   r‰   s              r   Útest_run_nodejs_stress_harnesszBTestNodeJsEmpiricalHarnessExecution.test_run_nodejs_stress_harness    sa  € Ý�H‘~”~Ô,Ð/IÑIˆØÔ"ÐKÐ"Ð"Ñ$Ô$ÐKÐ$ÐKÕKÔKÐ&KÑKÔKÐKÑKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆ|ÑKÔKÐKÕKÔKˆ|ÑKÔKÐKÐKÕKÔKÐ"ÑKÔKÕKÔKÐ$ÑKÔKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKåŒ~Ø•S˜Ñ&Ô&Ð'ØØÝ•LÑ!Ô!ð	
ñ 
ô 
ˆð ŒÐy !Ðyˆ !Ò#ÐyÐyÐyÕyÔyÐyÐyÐyÐyˆ !ÐyÑyÔyÐyÕyÔyÑyÔyÐyÐyÕyÔyˆtÑyÔyÐyÕyÔyˆtÑyÔyÐyÐyÕyÔyˆÑyÔyÕyÔy !ÑyÔyÐyÐyÑyÐyÕyÔyÐ%yÐTXÔT_Ð%yÐ%yÐlpÔlwÐ%yÐ%yÑyÔyÐyÑyÐyÐyÐyÑyÐyÕyÕyÔyÐyÑyÔyÑyÔyÐyÐyÐyÐyÐyÐyÐyØ>Ð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Ô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Ð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Õ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ÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMØ]ÐlÐaeÔalÐlÐ]ÐalÐlÐlÐlÐlÕlÔlÐlÐlÐlÐlÐ]ÐalÐlÑlÔlÕlÔlÐ]ÑlÔlÐlÕlÔlÑlÔlÐlÐlÕlÔlÐaeÑlÔlÐlÕlÔlÐaeÑlÔlÐlÐlÕlÔlÐalÑ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Ð>À+Ð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Ô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ÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMØCÐRÀtÄ{ÐRÐCÀ{ÐRÐRÐRÐRÕRÔRÐRÐRÐRÐRÐCÀ{ÐRÑRÔRÕRÔRÐCÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔRÀtÑRÔRÐRÕRÔRÀtÑ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ÐRÐRÐRÐRÐRÐRØ<ÐKÀÄÐKÐ<ÀÐKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐ<ÀÐKÑKÔKÕKÔKÐ<ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKÀÑKÔKÐKÕKÔKÀÑKÔKÐKÐKÕKÔKÀÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKr    Nr“   )r`   ra   rb   rc   r¦   rh   r    r   r•   r•   �   s4   € € € € € Ø\Ð\ðLð Lð Lð Lð Lð Lr    r•   ) rc   Ú
__future__r   ÚbuiltinsrH   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterF   Úosr    ÚsysÚpathlibr   rd   r�   Úresolverž   rr   Ú
SERVER_DIRr¢   ÚpathÚinsertÚworld.combat_enginer   r   r   Úworld.martial_matrixr	   r   rj   r•   rh   r    r   ú<module>rµ      sÒ  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5Ô<€Ø˜HÑ$€
Ø€3€z�?„?˜#œ(Ð"Ð"Ø„H‡O‚O�A�s�s˜:‘”Ñ'Ô'Ð'Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)à LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ -Ð -Ð -Ð -Ð -Ð -ðL'ð L'ð L'ð L'ð L'ñ L'ô L'ð L'ð^.6ð .6ð .6ð .6ð .6ñ .6ô .6ð .6ðbLð Lð Lð Lð Lñ Lô Lð Lð Lð Lr    