§
    A¿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
mZ e	j        d„ ¦   «         Zdd„Zdd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )z¼
Unit Tests for FreeExile Game Design Matrix Service & Integrity Engine.
Verifies cross-cutting queries, DAG cycle detection, foreign key enforcement,
and automated anti-drift validation.
é    )ÚannotationsN)ÚGameDesignMatrixServicec               #  ó†   K  — t          d¬¦  «        } |                      d¬¦  «         | V — |                      ¦   «          dS )zCProvides an in-memory matrix service populated with canonical data.z:memory:)Údb_pathT)ÚforceN)r   Úseed_canonical_dataÚclose)Úservices    ú;C:\Projects\FreeExile\tests\unit\test_game_design_matrix.pyÚmatrix_servicer      sI   è è € õ &¨jÐ9Ñ9Ô9€GØ×Ò dÐÑ+Ô+Ð+Ø
€M€M€MØ‡M‚M�O„O€O€O€Oó    r   r   c                óš  — |                       ¦   «         }|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}}|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}}|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}}|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}}|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}}|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}	}dS ) zKVerifies that all core tables are populated with expected canonical counts.T©Úis©z0%(py2)s
{%(py2)s = %(py0)s.is_valid
} is %(py5)sÚreport©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7Né   ©ú==)z2%(py2)s
{%(py2)s = %(py0)s.total_acts
} == %(py5)sé   ©ú>=)z3%(py2)s
{%(py2)s = %(py0)s.total_zones
} >= %(py5)s)z2%(py2)s
{%(py2)s = %(py0)s.total_npcs
} >= %(py5)sé
   )z4%(py2)s
{%(py2)s = %(py0)s.total_quests
} >= %(py5)sé2   )z6%(py2)s
{%(py2)s = %(py0)s.total_monsters
} >= %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.total_skills
} >= %(py5)sé   )z5%(py2)s
{%(py2)s = %(py0)s.total_weapons
} >= %(py5)séd   )z5%(py2)s
{%(py2)s = %(py0)s.total_affixes
} >= %(py5)s)z7%(py2)s
{%(py2)s = %(py0)s.total_relations
} >= %(py5)sr   )zP%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.violations
})
} == %(py8)sÚlen)r   Úpy1Úpy3r   Úpy8úassert %(py10)sÚpy10)Úvalidate_game_design_integrityÚis_validÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚ
total_actsÚtotal_zonesÚ
total_npcsÚtotal_questsÚtotal_monstersÚtotal_skillsÚtotal_weaponsÚtotal_affixesÚtotal_relationsÚ
violationsr#   )r   r   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert2Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11s               r   Útest_canonical_seeding_countsrG      s
  € à×:Ò:Ñ<Ô<€FØŒ?Ð"˜dÐ"ˆ?˜dÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ?˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ6Ñ"Ô"Ð"Õ"Ô"ˆ6Ñ"Ô"Ð"Ð"Õ"Ô"ˆ?Ñ"Ô"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØÔÐ! Ð!Ð Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!Ð Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ6Ñ!Ô!Ð!Õ!Ô!ˆ6Ñ!Ô!Ð!Ð!Õ!Ô!ÐÑ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔÐ" Ð"Ð Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ6Ñ"Ô"Ð"Õ"Ô"ˆ6Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØÔÐ! Ð!Ð Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!Ð Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ6Ñ!Ô!Ð!Õ!Ô!ˆ6Ñ!Ô!Ð!Ð!Õ!Ô!ÐÑ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔÐ$ "Ð$Ð "Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð "Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ6Ñ$Ô$Ð$Õ$Ô$ˆ6Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ "Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔ Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ6Ñ&Ô&Ð&Õ&Ô&ˆ6Ñ&Ô&Ð&Ð&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔÐ$ "Ð$Ð "Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð "Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ6Ñ$Ô$Ð$Õ$Ô$ˆ6Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ "Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔÐ% 2Ð%Ð 2Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð 2Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆ6Ñ%Ô%Ð%Õ%Ô%ˆ6Ñ%Ô%Ð%Ð%Õ%Ô%ÐÑ%Ô%Õ%Ô% 2Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ØÔÐ& 3Ð&Ð 3Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð 3Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ6Ñ&Ô&Ð&Õ&Ô&ˆ6Ñ&Ô&Ð&Ð&Õ&Ô&ÐÑ&Ô&Õ&Ô& 3Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ!Ð' RÐ'Ð! RÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð! RÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ6Ñ'Ô'Ð'Õ'Ô'ˆ6Ñ'Ô'Ð'Ð'Õ'Ô'Ð!Ñ'Ô'Õ'Ô' RÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔ Ð&�3Ð Ñ!Ô!Ð& QÐ&Ð! QÒ&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&Ð! QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�3Ñ&Ô&Ð&Õ&Ô&�3Ñ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆvÑ&Ô&Ð&Õ&Ô&ˆvÑ&Ô&Ð&Ð&Õ&Ô&Ð Ñ&Ô&Õ&Ô&Ð!Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r   c                ó¢  — |                       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	         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         }||v }|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         }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        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}
dS ) z4Tests fetching complete narrative context of an Act.ÚACT_I_HUNGERN©úis not©z%(py0)s is not %(py3)sÚcontext©r   r%   úassert %(py5)sr   ÚactÚact_idr   ©z%(py1)s == %(py4)s©r$   Úpy4úassert %(py6)sÚpy6u   Ä�Ã¡y Vá»±c Ä�Ã³i RÃ©tÚtitle©Úin)z%(py1)s in %(py4)sÚprimary_zone_idÚzone_tang_kiem_nhaiÚclimax_boss_idÚboss_strand_executionerÚquestsr   ©ú>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr#   ©r   r   rT   r   úassert %(py9)sÚpy9)
Úget_act_narrative_contextr+   r,   r-   r.   r/   r0   r1   r2   r#   )r   rM   rB   r=   Ú@py_format4r@   Ú@py_assert0r?   Ú@py_format5Ú@py_format7rD   Ú@py_assert5rA   Ú@py_format10s                 r   Ú test_act_narrative_context_queryrk   %   s¤  € à×6Ò6°~ÑFÔF€GØÐˆ7˜$ÐÐÐÐÕÔÐÐÐÐˆ7˜$ÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ˜$ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ�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Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø#Ð> w¨u¤~°gÔ'>Ð>Ð#Ð'>Ð>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð#Ð'>Ð>Ñ>Ô>Õ>Ô>Ð#Ñ>Ô>Õ>Ô>Ð'>Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø�5Œ>Ð+Ô,Ð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Ø�5Œ>Ð*Ô+Ð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Ð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Ø�xÔ Ð%�3Ð Ñ!Ô!Ð% AÐ%Ð! AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð! AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�3Ñ%Ô%Ð%Õ%Ô%�3Ñ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô%Ð!Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%r   c                ó„  — |                       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	         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         }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        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}
d„ |d         D ¦   «         }g }d}||v }|}|s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  }| 
                    |¦  «         |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          j        |d%¦  «        i z  }d&d'|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}}dS )(z?Tests retrieving full zone ecosystem including NPCs and quests.Úzone_boundless_sanctuaryNrJ   rL   ÚecorN   rO   r   ÚzoneÚzone_idr   rR   rS   rU   rV   Únpcsé   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)sr#   ra   rb   rc   c                ó   — h | ]
}|d          ’ŒS )Úrole© )Ú.0Únpcs     r   ú	<setcomp>z,test_zone_ecosystem_query.<locals>.<setcomp>7   s   € Ð0Ð0Ð0˜SˆS�Œ[Ð0Ð0Ð0r   ÚBONE_BLACKSMITHÚBLOOD_SHAMANrX   )z%(py3)s in %(py5)sÚroles)r%   r   z%(py7)sr   )z%(py10)s in %(py12)s)r(   Úpy12z%(py14)sÚpy14é   zassert %(py17)sÚpy17)Úget_zone_ecosystemr+   r,   r-   r.   r/   r0   r1   r2   r#   ÚappendÚ_format_boolop)r   rn   rB   r=   re   r@   rf   r?   rg   rh   rD   ri   rA   rj   r{   r>   Ú@py_assert9Ú@py_assert11Ú@py_format13Ú@py_format15Ú@py_format16Ú@py_format18s                         r   Útest_zone_ecosystem_queryr‰   0   sŽ  € à
×
+Ò
+Ð,FÑ
GÔ
G€CØÐˆ3�dˆ?ÐÐÐÕÔÐÐÐÐˆ3�dÐÑÔÐÕÔÑÔÐÐÕÔˆ3ÑÔÐÕÔˆ3ÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØˆvŒ;�yÔ!Ð?Ð%?Ð?Ð!Ð%?Ò?Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?Ð!Ð%?Ð?Ñ?Ô?Õ?Ô?Ð!Ñ?Ô?Õ?Ô?Ð%?Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø�6Œ{Ð �3ˆ{ÑÔÐ ˜qÐ Ð˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð Ð˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �3Ñ Ô Ð Õ Ô �3Ñ Ô Ð Ð Õ Ô ˆ{Ñ Ô Õ Ô ÐÑ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð à0Ð0 C¨¤KÐ0Ñ0Ô0€EØ@Ð@ÐÐ@Ð Ð%Ð@Ð@Ð@Ð@Ð@¨Ð@¨¸5Ð)@Ð@Ð@Ð@Ð@Ñ@Õ@Ô@Ð@Ð@Ð@Ð@Ð Ð@Ñ@Ô@Õ@Ô@ÐÑ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ Ñ@Ô@Ð@Õ@Ô@ Ñ@Ô@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@×@Ò@Ð@Ñ@Ô@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@¨¸5Ð@Ñ@Ô@Õ@Ô@¨Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@¸5Ñ@Ô@Ð@Õ@Ô@¸5Ñ@Ô@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Ð@×@Ò@Ð@Ñ@Ô@Ð@Õ@Ô@Ð@Ð@Ñ@Ô@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@r   c                óþ  — |                       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	         }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}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}|  	                    d¦  «        }
g d¢}|
|k    }|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S )z?Tests quest ecosystem view and prerequisite chain backtracking.Ú quest_norm_04_diet_u_hon_kiem_noNrJ   rL   Úq_ctxrN   rO   r   rQ   ÚACT_II_MIASMAr   rR   rS   rU   rV   Úprerequisite_quest_idÚ!quest_norm_03_luyen_khi_hoa_thach)r�   Ú!quest_norm_02_khai_thong_dan_dienÚ!quest_norm_01_thuc_tinh_tang_kiem)z%(py0)s == %(py3)sÚchain)
Úget_quest_contextr+   r,   r-   r.   r/   r0   r1   r2   Úget_quest_dependency_chain)r   rŒ   rB   r=   re   r@   rf   r?   rg   rh   r’   s              r   Ú'test_quest_context_and_dependency_chainr•   ;   sŒ  € à×,Ò,Ð-OÑPÔP€EØÐˆ5˜ÐÐÐÐÕÔÐÐÐÐˆ5˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ�Œ?Ð-˜oÐ-ˆ?˜oÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-ˆ?˜oÐ-Ñ-Ô-Õ-Ô-ˆ?Ñ-Ô-Õ-Ô-˜oÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ(Ô)ÐPÐ-PÐPÐ)Ð-PÒPÐPÐPÐPÕPÔPÐPÐPÐPÐPÐ)Ð-PÐPÑPÔPÕPÔPÐ)ÑPÔPÕPÔPÐ-PÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPð ×5Ò5Ð6XÑYÔY€Eðð ð ð ˆ5ð ò ð ð ð õ ìð	ð ð ð ˆ5ð ð ñ ô ð õ ìñ	ô ð ð õ ìð	 ñ ô ð õ ìð	 ñ ô ð ð õ ìð	ñ ô ð ð ñ ð ð ð ð ð ñ ð õ õ ìð	ñ ô ñ ô ð ð ð ð ð ð ð r   c                óx  — |                       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}}|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}}|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¦  «        }	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}}|	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
        }|j
        }
||
k    }|sèt          j        d|fd||
f¦  «        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}}
|	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 )z1Tests mathematical progression milestone lookups.r~   NrJ   rL   Úb_lvl1rN   rO   r   r   )z-%(py2)s
{%(py2)s = %(py0)s.level
} == %(py5)sr   r   r   g      Y@)z6%(py2)s
{%(py2)s = %(py0)s.player_base_hp
} == %(py5)sé   )z>%(py2)s
{%(py2)s = %(py0)s.max_affix_tier_allowed
} == %(py5)séU   Úb_lvl85r_   )zY%(py2)s
{%(py2)s = %(py0)s.player_base_hp
} > %(py6)s
{%(py6)s = %(py4)s.player_base_hp
})r   r   rT   rV   úassert %(py8)sr&   )Úget_level_progression_benchmarkr+   r,   r-   r.   r/   r0   r1   r2   ÚlevelÚplayer_base_hpÚmax_affix_tier_allowed)r   r—   rB   r=   re   r@   r>   r?   rA   rš   ri   rh   rE   s                r   Ú test_level_progression_benchmarkr    K   s0  € à×;Ò;¸AÑ>Ô>€FØÐˆ6˜ÐÐÐÐÕÔÐÐÐÐˆ6˜ÐÑÔÐÕÔÑÔÐÐÕÔˆ6ÑÔÐÕÔˆ6ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ<Ð˜1Ðˆ<˜1ÒÐÐÐÕÔÐÐÐÐˆ<˜1ÐÑÔÐÕÔÑÔÐÐÕÔˆ6ÑÔÐÕÔˆ6ÑÔÐÐÕÔˆ<ÑÔÕÔ˜1ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØÔ Ð) EÐ)Ð  EÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ6Ñ)Ô)Ð)Õ)Ô)ˆ6Ñ)Ô)Ð)Ð)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ(Ð.¨BÐ.Ð(¨BÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð(¨BÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ6Ñ.Ô.Ð.Õ.Ô.ˆ6Ñ.Ô.Ð.Ð.Õ.Ô.Ð(Ñ.Ô.Õ.Ô.¨BÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à×<Ò<¸RÑ@Ô@€GØÐˆ7˜$ÐÐÐÐÕÔÐÐÐÐˆ7˜$ÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ˜$ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ=Ð˜BÐˆ=˜BÒÐÐÐÕÔÐÐÐÐˆ=˜BÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔˆ=ÑÔÕÔ˜BÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØÔ!Ð9 FÔ$9Ð9Ð!Ð$9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð!Ð$9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ7Ñ9Ô9Ð9Õ9Ô9ˆ7Ñ9Ô9Ð9Ð9Õ9Ô9Ð!Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 FÑ9Ô9Ð9Õ9Ô9 FÑ9Ô9Ð9Ð9Õ9Ô9Ð$9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØÔ)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ7Ñ.Ô.Ð.Õ.Ô.ˆ7Ñ.Ô.Ð.Ð.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r   c                óÌ  — |                       ¦   «         5 }|                     ¦   «         }|                     d¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }|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}}d
„ |j        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}}dS )zUVerifies that an intentional circular dependency in quests causes validation to FAIL.z²
            UPDATE quests 
            SET prerequisite_quest_id = 'quest_norm_03_luyen_khi_hoa_thach' 
            WHERE quest_id = 'quest_norm_01_thuc_tinh_tang_kiem'
        NFr   r   r   r   r   r   c              3  ó   K  — | ]}d |v V — Œ	dS )z Circular Dependency in Quest DAGNru   ©rv   Úvs     r   ú	<genexpr>z3test_dag_cycle_detection_failure.<locals>.<genexpr>g   s(   è è € ÐRÐR¸1Ð1°QÐ6ÐRÐRÐRÐRÐRÐRr   ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany©r   r   rT   ©Ú_get_connectionÚcursorÚexecuter)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r<   r§   ©
r   ÚconnÚcurr   r=   r>   r?   r@   rA   rg   s
             r   Ú test_dag_cycle_detection_failurer°   Z   s=  € à	×	'Ò	'Ñ	)Ô	)ð ¨TØ�kŠk‰mŒmˆà�Šð ñ 	ô 	ð 	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ×:Ò:Ñ<Ô<€FØŒ?Ð#˜eÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØRÐRÀÔ@QÐRÑRÔRÐR�3ÐRÑRÔRÐRÐRÐRÐRÐRÕRÔRÑRÔRÐRÐRÕRÔR�3ÑRÔRÐRÕRÔR�3Ñ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ÐRs   •*AÁAÁAc                ó   — |                       ¦   «         5 }|                     ¦   «         }|                     d¦  «         |                     d¦  «         |                     d¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }|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}}d„ |j        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}}dS )zQVerifies that referencing a non-existent prerequisite quest triggers a violation.zPRAGMA foreign_keys = OFFz±
            UPDATE quests 
            SET prerequisite_quest_id = 'quest_non_existent_phantom_ghost' 
            WHERE quest_id = 'quest_norm_01_thuc_tinh_tang_kiem'
        zPRAGMA foreign_keys = ONNFr   r   r   r   r   r   c              3  ó   K  — | ]}d |v V — Œ	dS )zBroken Quest PrerequisiteNru   r£   s     r   r¥   z5test_broken_prerequisite_detection.<locals>.<genexpr>y   s(   è è € ÐKÐK°AÐ*¨aÐ/ÐKÐKÐKÐKÐKÐKr   r¦   r§   r¨   r©   r­   s
             r   Ú"test_broken_prerequisite_detectionr³   j   se  € à	×	'Ò	'Ñ	)Ô	)ð 	0¨TØ�kŠk‰mŒmˆà�ŠÐ/Ñ0Ô0Ð0Ø�Šð ñ 	ô 	ð 	ð
 	�ŠÐ.Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð ×:Ò:Ñ<Ô<€FØŒ?Ð#˜eÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØKÐK¸Ô9JÐKÑKÔKÐK�3ÐKÑKÔKÐKÐKÐKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK�3ÑKÔKÐKÕKÔK�3Ñ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ÐKs   •AA5Á5A9Á<A9c                óú  — |                       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„ |D ¦   «         }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}}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}}dS )z4Tests querying cross-relationships by source entity.ÚACTrI   )Úsource_typeÚ	source_idrr   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr#   Úrels©r   r$   r%   rV   r›   r&   Nc                ó   — h | ]
}|d          ’ŒS )Úrelation_typeru   )rv   Úrs     r   rx   z-test_cross_relations_query.<locals>.<setcomp>€   s   € Ð.Ð.Ð. AˆQˆÔÐ.Ð.Ð.r   ÚACT_CONTAINS_ZONErX   )z%(py1)s in %(py3)sÚtypes)r$   r%   rO   r   ÚBOSS_CLIMAX_FOR_ACT)
Úquery_cross_relationsr#   r+   r,   r-   r.   r/   r0   r1   r2   )r   r¸   rB   ri   r>   rh   rE   r¾   rf   re   r@   s              r   Útest_cross_relations_queryrÁ   |   s×  € à×/Ò/¸EÈ^Ð/Ñ\Ô\€DÝˆt‰9Œ9Ð˜Ðˆ9˜Š>ÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆ9ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ.Ð.¨Ð.Ñ.Ô.€EØÐ'Ð %Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð %Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' %Ñ'Ô'Ð'Õ'Ô' %Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ø Ð)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Õ)Ô)Ð Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô) EÑ)Ô)Ð)Õ)Ô) EÑ)Ô)Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)r   c                ó  — |                       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}}|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}}|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¦  «        }	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}}|	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}}|	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}}|	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}}| j         }d} ||¦  «        }
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        |¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }d d!|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
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}}
t#          t!          |¦  «        dz
  ¦  «        D �]R}||dz            }|j	        }||         }
|
j	        }||k    }|s’t          j        d(|fd)||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d*œz  }d+d,|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}
}||dz            }|j
        }||         }
|
j
        }||k    }|s’t          j        d(|fd-||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d*œz  }d+d,|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}
}||dz            }|j        }||         }
|
j        }||k    }|s’t          j        d(|fd.||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d*œz  }d+d,|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}
}�ŒTdS )/zATests party scaling lookup from size 1 to 6 and monotonic growth.r~   NrJ   rL   ÚsolorN   rO   r   g      ð?r   )z5%(py2)s
{%(py2)s = %(py0)s.hp_multiplier
} == %(py5)sr   r   r   ç        )z5%(py2)s
{%(py2)s = %(py0)s.exp_bonus_pct
} == %(py5)s)z?%(py2)s
{%(py2)s = %(py0)s.item_quantity_bonus_pct
} == %(py5)sg      .@)z5%(py2)s
{%(py2)s = %(py0)s.nearby_radius
} == %(py5)sé   Ú	max_partyç      @g     Àb@g     @o@)zC%(py2)s
{%(py2)s = %(py0)s.currency_quantity_bonus_pct
} == %(py5)s)z8%(py2)s
{%(py2)s = %(py0)s.rarity_bonus_pct
} == %(py5)séc   r   )zW%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_party_scaling
}(%(py4)s)
} is %(py9)sr   ©r   r   rT   rV   rc   úassert %(py11)sÚpy11©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr#   Úscalingsr¹   r›   r&   r_   )zW%(py3)s
{%(py3)s = %(py1)s.hp_multiplier
} > %(py8)s
{%(py8)s = %(py6)s.hp_multiplier
})r$   r%   rV   r&   r'   r(   )zW%(py3)s
{%(py3)s = %(py1)s.exp_bonus_pct
} > %(py8)s
{%(py8)s = %(py6)s.exp_bonus_pct
})zk%(py3)s
{%(py3)s = %(py1)s.item_quantity_bonus_pct
} > %(py8)s
{%(py8)s = %(py6)s.item_quantity_bonus_pct
})Úget_party_scalingr+   r,   r-   r.   r/   r0   r1   r2   Úhp_multiplierÚexp_bonus_pctÚitem_quantity_bonus_pctÚnearby_radiusÚcurrency_quantity_bonus_pctÚrarity_bonus_pctÚget_all_party_scalingsr#   Úrange)r   rÃ   rB   r=   re   r@   r>   r?   rA   rÆ   ri   Ú@py_assert8rC   rj   Ú@py_format12rÍ   rh   rE   Úirf   rF   s                        r   Ú2test_party_scaling_matrix_queries_and_monotonicityrÚ   …   sº  € à×+Ò+¨AÑ.Ô.€DØÐˆ4�tÐÐÐÐÕÔÐÐÐÐˆ4�tÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�tÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔÐ$ Ð$Ð Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔÐ$ Ð$Ð Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔ'Ð.¨3Ð.Ð'¨3Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð'¨3Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ4Ñ.Ô.Ð.Õ.Ô.ˆ4Ñ.Ô.Ð.Ð.Õ.Ô.Ð'Ñ.Ô.Õ.Ô.¨3Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÔÐ% Ð%Ð Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆ4Ñ%Ô%Ð%Õ%Ô%ˆ4Ñ%Ô%Ð%Ð%Õ%Ô%ÐÑ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à×0Ò0°Ñ3Ô3€IØ Ð ˆ9˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ9˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ9Ñ Ô Ð Õ Ô ˆ9Ñ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÔ"Ð) cÐ)Ð" cÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" cÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ9Ñ)Ô)Ð)Õ)Ô)ˆ9Ñ)Ô)Ð)Ð)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) cÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ"Ð+ eÐ+Ð" eÒ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð" eÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ9Ñ+Ô+Ð+Õ+Ô+ˆ9Ñ+Ô+Ð+Ð+Õ+Ô+Ð"Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔ,Ð5°Ð5Ð,°Ò5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð,°Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆ9Ñ5Ô5Ð5Õ5Ô5ˆ9Ñ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Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ0Ð9°EÐ9Ð0°EÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð0°EÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ9Ñ9Ô9Ð9Õ9Ô9ˆ9Ñ9Ô9Ð9Ð9Õ9Ô9Ð0Ñ9Ô9Õ9Ô9°EÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØÔ%Ð.¨Ð.Ð%¨Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð%¨Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ9Ñ.Ô.Ð.Õ.Ô.ˆ9Ñ.Ô.Ð.Ð.Õ.Ô.Ð%Ñ.Ô.Õ.Ô.¨Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÔ"Ð* dÐ*Ð" dÒ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆ9Ñ*Ô*Ð*Õ*Ô*ˆ9Ñ*Ô*Ð*Ð*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð Ô+Ð7¨BÐ7Ð+Ð+¨BÑ/Ô/Ð7°4Ð7Ð/°4Ð7Ð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¨BÑ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Ð7Ð7Ð7Ð7ð ×4Ò4Ñ6Ô6€HÝˆx‰=Œ=Ð˜AÐˆ=˜AÒÐÐÐÕÔÐÐÐÐˆ=˜AÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔˆ=ÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÝ•3�x‘=”= 1Ñ$Ñ%Ô%ð ]ñ ]ˆØ˜˜A™ŒÐHˆÔ,ÐH¨x¸¬{Ð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Ô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ÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHØ˜˜A™ŒÐHˆÔ,ÐH¨x¸¬{Ð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Ô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ÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHØ˜˜A™ŒÐ\ˆÔ6Ð\¸À!¼Ð\¸Ô9\Ð\Ð6Ð9\Ò\Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\Ð6Ð9\Ð\Ñ\Ô\Õ\Ô\ˆÑ\Ô\Õ\Ô\Ð6Ñ\Ô\Õ\Ô\¸Ñ\Ô\Õ\Ô\Ð9\Ñ\Ô\Ð\Ð\Ñ\Ð\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ñ\ð]ð ]r   c                óŒ  — |                       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}}|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¦  «        }	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}}|	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¦  «        }
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}}|
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}}| j         }d} ||¦  «        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}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 )%zETests querying 3 canonical loot allocation modes and timeout configs.Ú	PERMANENTNrJ   rL   ÚpermrN   rO   r   Tr   )z4%(py2)s
{%(py2)s = %(py0)s.is_permanent
} is %(py5)sr   r   r   rÄ   r   )z7%(py2)s
{%(py2)s = %(py0)s.timeout_seconds
} == %(py5)sÚSHORTÚ
short_modeFg      @ÚFREE_FOR_ALLÚffaÚNON_EXISTENT)z^%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_loot_allocation_mode
}(%(py4)s)
} is %(py9)sr   rÉ   rÊ   rË   é   rÌ   r#   Ú	all_modesr¹   r›   r&   )Úget_loot_allocation_moder+   r,   r-   r.   r/   r0   r1   r2   Úis_permanentÚtimeout_secondsÚget_all_loot_allocation_modesr#   )r   rÝ   rB   r=   re   r@   r>   r?   rA   rß   rá   ri   r×   rC   rj   rØ   rä   rh   rE   s                      r   Ú"test_loot_allocation_modes_queriesré   £   s
  € à×2Ò2°;Ñ?Ô?€DØÐˆ4�tÐÐÐÐÕÔÐÐÐÐˆ4�tÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�tÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔÐ$ Ð$Ð Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Õ$Ô$ˆ4Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔÐ& 3Ð&Ð 3Ò&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð 3Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ4Ñ&Ô&Ð&Õ&Ô&ˆ4Ñ&Ô&Ð&Ð&Õ&Ô&ÐÑ&Ô&Õ&Ô& 3Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&à×8Ò8¸ÑAÔA€JØ!Ð!ˆ:˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ:˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÔ"Ð+ eÐ+Ð" eÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð" eÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Ð+Õ+Ô+Ð"Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔ%Ð,¨Ð,Ð%¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð%¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ:Ñ,Ô,Ð,Õ,Ô,ˆ:Ñ,Ô,Ð,Ð,Õ,Ô,Ð%Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,à
×
1Ò
1°.Ñ
AÔ
A€CØÐˆ3�dˆ?ÐÐÐÕÔÐÐÐÐˆ3�dÐÑÔÐÕÔÑÔÐÐÕÔˆ3ÑÔÐÕÔˆ3ÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔÐ$˜uÐ$Ð˜uÐ$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð˜uÐ$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ3Ñ$Ô$Ð$Õ$Ô$ˆ3Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$˜uÑ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔÐ% #Ð%Ð #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆ3Ñ%Ô%Ð%Õ%Ô%ˆ3Ñ%Ô%Ð%Ð%Õ%Ô%ÐÑ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%àÔ2ÐJ°>ÐJÐ2Ð2°>ÑBÔBÐJÀdÐJÐBÀdÐJÐJÐJÐJÕJÔJÐJÐJÐJÐJÐBÀdÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆ>ÑJÔJÐJÕJÔJˆ>ÑJÔJÐJÐJÕJÔJÐ2ÑJÔJÕJÔJ°>ÑJÔJÕJÔJÐBÑJÔJÕJÔJÀdÑ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ÐJÐJÐJÐJØ×<Ò<Ñ>Ô>€IÝˆy‰>Œ>Ð˜QÐˆ>˜QÒÐÐÐÕÔÐÐÐÐˆ>˜QÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆyÑÔÐÕÔˆyÑÔÐÐÕÔˆ>ÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr   c                ó²  — |                       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}}|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}}|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}||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}}|                       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}}|	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}}|                      ¦   «         }
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 )z7Tests teleport config queries and safety channel flags.ÚPARTY_MEMBERNrJ   rL   Ú
party_telerN   rO   r   rÇ   r   )z9%(py2)s
{%(py2)s = %(py0)s.cast_time_seconds
} == %(py5)sr   r   r   g      $@)z8%(py2)s
{%(py2)s = %(py0)s.cooldown_seconds
} == %(py5)sTr   )z:%(py2)s
{%(py2)s = %(py0)s.cancel_on_movement
} is %(py5)s)z8%(py2)s
{%(py2)s = %(py0)s.cancel_on_damage
} is %(py5)sÚTOWN_PORTALÚportal_teler   rÌ   r#   Úall_configsr¹   r›   r&   )Úget_teleport_configr+   r,   r-   r.   r/   r0   r1   r2   Úcast_time_secondsÚcooldown_secondsÚcancel_on_movementÚcancel_on_damageÚget_all_teleport_configsr#   )r   rì   rB   r=   re   r@   r>   r?   rA   rî   rï   ri   rh   rE   s                 r   Útest_teleport_configs_queriesrö   ¹   sH  € à×3Ò3°NÑCÔC€JØ!Ð!ˆ:˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ:˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÔ'Ð.¨3Ð.Ð'¨3Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð'¨3Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Ð.Õ.Ô.Ð'Ñ.Ô.Õ.Ô.¨3Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÔ&Ð.¨$Ð.Ð&¨$Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Ð.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÔ(Ð0¨DÐ0Ð(¨DÐ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð(¨DÐ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Ñ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ØÔ&Ð.¨$Ð.Ð&¨$Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Õ.Ô.ˆ:Ñ.Ô.Ð.Ð.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à ×4Ò4°]ÑCÔC€KØ"Ð"ˆ;˜dÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ;˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ;Ñ"Ô"Ð"Õ"Ô"ˆ;Ñ"Ô"Ð"Ð"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÔ(Ð/¨CÐ/Ð(¨CÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð(¨CÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆ;Ñ/Ô/Ð/Õ/Ô/ˆ;Ñ/Ô/Ð/Ð/Õ/Ô/Ð(Ñ/Ô/Õ/Ô/¨CÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/à ×9Ò9Ñ;Ô;€KÝˆ{ÑÔÐ ˜qÐ Ð˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð Ð˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �3Ñ Ô Ð Õ Ô �3Ñ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ{Ñ Ô Ð Õ Ô ˆ{Ñ Ô Ð Ð Õ Ô ÐÑ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð r   c                ó˜  — |                       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}}|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	}||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¦  «        }	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}}|	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	}||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¦  «        }
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}}|
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}||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}}|                      ¦   «         }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 ) zOTests quarantine rules for wilderness, dungeon, secret chamber, and safe haven.Ú
WILDERNESSNrJ   rL   Ú	wild_rulerN   rO   r   Tr   )z4%(py2)s
{%(py2)s = %(py0)s.boss_lockout
} is %(py5)sr   r   r   )z>%(py2)s
{%(py2)s = %(py0)s.secret_chamber_lockout
} is %(py5)srÅ   r   )z3%(py2)s
{%(py2)s = %(py0)s.max_portals
} == %(py5)sÚSECRET_CHAMBERÚsecret_ruler   Ú
SAFE_HAVENÚ
haven_ruleFr   rÌ   r#   Ú	all_rulesr¹   r›   r&   )Úget_portal_quarantine_ruler+   r,   r-   r.   r/   r0   r1   r2   Úboss_lockoutÚsecret_chamber_lockoutÚmax_portalsÚget_all_portal_quarantine_rulesr#   )r   rù   rB   r=   re   r@   r>   r?   rA   rû   rý   rþ   ri   rh   rE   s                  r   Ú$test_portal_quarantine_rules_queriesr  Ê   s¼
  € à×9Ò9¸,ÑGÔG€IØ Ð ˆ9˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ9˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ9Ñ Ô Ð Õ Ô ˆ9Ñ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆ9Ñ)Ô)Ð)Õ)Ô)ˆ9Ñ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ+Ð3¨tÐ3Ð+¨tÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð+¨tÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆ9Ñ3Ô3Ð3Õ3Ô3ˆ9Ñ3Ô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ØÔ Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆ9Ñ%Ô%Ð%Õ%Ô%ˆ9Ñ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à ×;Ò;Ð<LÑMÔM€KØ"Ð"ˆ;˜dÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ;˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ;Ñ"Ô"Ð"Õ"Ô"ˆ;Ñ"Ô"Ð"Ð"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ;Ñ+Ô+Ð+Õ+Ô+ˆ;Ñ+Ô+Ð+Ð+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔ-Ð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Ô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Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ;Ñ'Ô'Ð'Õ'Ô'ˆ;Ñ'Ô'Ð'Ð'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'à×:Ò:¸<ÑHÔH€JØ!Ð!ˆ:˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ:˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÔ"Ð+ eÐ+Ð" eÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð" eÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Õ+Ô+ˆ:Ñ+Ô+Ð+Ð+Õ+Ô+Ð"Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔ,Ð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Ô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Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5à×>Ò>Ñ@Ô@€IÝˆy‰>Œ>Ð˜QÐˆ>˜QÒÐÐÐÕÔÐÐÐÐˆ>˜QÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆyÑÔÐÕÔˆyÑÔÐÐÕÔˆ>ÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr   c                óÈ  — |                       ¦   «         5 }|                     ¦   «                              d¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }|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}}d
„ |j        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}}dS )zJVerifies that non-monotonic party scaling triggers an integrity violation.zHUPDATE party_scaling_matrix SET hp_multiplier = 1.2 WHERE party_size = 3NFr   r   r   r   r   r   c              3  ó   K  — | ]}d |v V — Œ	dS )zParty Scaling HP non-monotonicNru   r£   s     r   r¥   z=test_party_scaling_non_monotonic_detection.<locals>.<genexpr>ç   s(   è è € ÐPÐP¸Ð/°1Ð4ÐPÐPÐPÐPÐPÐPr   r¦   r§   r¨   r©   ©	r   r®   r   r=   r>   r?   r@   rA   rg   s	            r   Ú*test_party_scaling_non_monotonic_detectionr  á   s@  € à	×	'Ò	'Ñ	)Ô	)ð j¨TØ�Š‰Œ×ÒÐhÑiÔiÐiðjð jð jñ jô jð jð jð jð jð jð jøøøð jð jð jð jà×:Ò:Ñ<Ô<€FØŒ?Ð#˜eÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØPÐP¸fÔ>OÐPÑPÔPÐP�3ÐPÑPÔPÐPÐPÐPÐPÐPÕPÔPÑPÔPÐPÐPÕPÔP�3ÑPÔPÐPÕPÔP�3ÑPÔPÐPÐPÕPÔPÐPÑPÔPÕPÔPÐPÑPÔPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPó   •(A	Á	AÁAc                óÈ  — |                       ¦   «         5 }|                     ¦   «                              d¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }|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}}d
„ |j        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}}dS )zDVerifies that invalid SHORT timeout triggers an integrity violation.zNUPDATE loot_allocation_modes SET timeout_seconds = 2.0 WHERE mode_id = 'SHORT'NFr   r   r   r   r   r   c              3  ó   K  — | ]}d |v V — Œ	dS )z+Loot Allocation SHORT timeout expected 5.0sNru   r£   s     r   r¥   zAtest_loot_allocation_invalid_timeout_detection.<locals>.<genexpr>ð   s(   è è € Ð]Ð]ÀaÐ<ÀÐAÐ]Ð]Ð]Ð]Ð]Ð]r   r¦   r§   r¨   r©   r  s	            r   Ú.test_loot_allocation_invalid_timeout_detectionr  ê   s@  € à	×	'Ò	'Ñ	)Ô	)ð p¨TØ�Š‰Œ×ÒÐnÑoÔoÐoðpð pð pñ pô pð pð pð pð pð pð pøøøð pð pð pð pà×:Ò:Ñ<Ô<€FØŒ?Ð#˜eÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø]Ð]È6ÔK\Ð]Ñ]Ô]Ð]�3Ð]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�3Ñ]Ô]Ð]Õ]Ô]�3Ñ]Ô]Ð]Ð]Õ]Ô]Ð]Ñ]Ô]Õ]Ô]Ð]Ñ]Ô]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]r	  c                óÈ  — |                       ¦   «         5 }|                     ¦   «                              d¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }|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}}d
„ |j        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}}dS )zIVerifies that altered teleport cast time triggers an integrity violation.zVUPDATE teleport_configs SET cast_time_seconds = 1.0 WHERE action_type = 'PARTY_MEMBER'NFr   r   r   r   r   r   c              3  ó   K  — | ]}d |v V — Œ	dS )z&Teleport Config 'PARTY_MEMBER' invalidNru   r£   s     r   r¥   zCtest_teleport_config_invalid_cast_time_detection.<locals>.<genexpr>ù   s(   è è € ÐXÐXÀÐ7¸1Ð<ÐXÐXÐXÐXÐXÐXr   r¦   r§   r¨   r©   r  s	            r   Ú0test_teleport_config_invalid_cast_time_detectionr  ó   s@  € à	×	'Ò	'Ñ	)Ô	)ð x¨TØ�Š‰Œ×ÒÐvÑwÔwÐwðxð xð xñ xô xð xð xð xð xð xð xøøøð xð xð xð xà×:Ò:Ñ<Ô<€FØŒ?Ð#˜eÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Õ#Ô#ˆ6Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØXÐXÀfÔFWÐXÑXÔXÐX�3ÐXÑXÔXÐXÐXÐXÐXÐXÕXÔXÑXÔXÐXÐXÕXÔX�3ÑXÔXÐXÕXÔX�3ÑXÔXÐXÐXÕXÔXÐXÑXÔXÕXÔXÐXÑXÔXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXÐXÐXr	  )r   r   )Ú__doc__Ú
__future__r   Úbuiltinsr-   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter+   ÚpytestÚ'server.world.game_design_matrix_servicer   Úfixturer   rG   rk   r‰   r•   r    r°   r³   rÁ   rÚ   ré   rö   r  r  r  r  ru   r   r   ú<module>r     sÉ  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €€€€Ø KÐ KÐ KÐ KÐ KÐ Kð „ðð ñ „ðð'ð 'ð 'ð 'ð &ð &ð &ð &ðAð Að Að Aðð ð ð ð /ð /ð /ð /ðSð Sð Sð Sð Lð Lð Lð Lð$*ð *ð *ð *ð]ð ]ð ]ð ]ð<ð ð ð ð,!ð !ð !ð !ð"ð ð ð ð.Qð Qð Qð Qð^ð ^ð ^ð ^ðYð Yð Yð Yð Yð Yr   