§
    	qÈjÎ+  ã                   óh  — d 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        Zej                             d eedz  ¦  «        ¦  «         ddlZedz  dz  dz  dz  Zed	z  d
z  Zed	z  dz  Z ej        d¬¦  «        d„ ¦   «         Z ej        d¬¦  «        d„ ¦   «         Z ej        d¬¦  «        d„ ¦   «         Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z e!dk    r ej"        edg¦  «         dS dS )u  
=============================================================================
THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - CHALLENGER 2 EMPIRICAL TEST PROBE
=============================================================================
Empirical verification probe for Milestone M1 Gate:
1. Scene Openers (Shot 01 of Scenes 01 to 10):
   - Always classified as CINEMATIC_CUT.
   - Never chain tail frames (no clean_frame_239 / prev_tail).
2. Kim Trá»�ng Shots in Scenes 06 to 10:
   - Verify that resolving Kim Trá»�ng shots NEVER returns ThÃºy Kiá»�u portrait path.
   - Check normal, empty dict, and adversarial corrupted asset_ref inputs.
3. VÆ°Æ¡ng Quan & VÆ°Æ¡ng Ã”ng Shots in Scenes 01 to 10:
   - Verify that resolving VÆ°Æ¡ng Quan and VÆ°Æ¡ng Ã”ng shots NEVER returns ThÃºy Kiá»�u portrait path.
4. Prompt Synchronization Consistency:
   - Verify consistency between episodes/ep01/prompts/muse_prompts.json and 02_AI_Prompts/muse_ai_video_prompts.json.
=============================================================================
é    N)ÚPathÚ05_Production_PipelineÚepisodesÚep01Úpromptszmuse_prompts.jsonÚ02_AI_Promptszgemini_banana_prompts.jsonzmuse_ai_video_prompts.jsonÚmodule)Úscopec                  ó´   — t          t          dd¬¦  «        5 } t          j        | ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     di ¦  «        S ©NÚrúutf-8©ÚencodingÚmotion_prompts)ÚopenÚMUSE_EP01_FILEÚjsonÚloadÚget©ÚfÚdatas     ú8C:\Projects\KieuStory\tests\test_m1_challenger2_probe.pyÚ	ep01_datar   "   s‹   € å	�n˜c¨GÐ	4Ñ	4Ô	4ð ¸ÝŒy˜‰|Œ|ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�8Š8Ð$ bÑ)Ô)Ð)ó   ˜9¹=Á =c                  ó´   — t          t          dd¬¦  «        5 } t          j        | ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     di ¦  «        S )Nr   r   r   Úep01_start_frames)r   ÚBANANA_FILEr   r   r   r   s     r   Úbanana_datar    (   s‹   € å	�k˜3¨Ð	1Ñ	1Ô	1ð °QÝŒy˜‰|Œ|ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�8Š8Ð'¨Ñ,Ô,Ð,r   c                  ó´   — t          t          dd¬¦  «        5 } t          j        | ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     di ¦  «        S r   )r   ÚMUSE_MASTER_FILEr   r   r   r   s     r   Úmaster_muse_datar#   .   sŒ   € å	Õ ¨gÐ	6Ñ	6Ô	6ð ¸!ÝŒy˜‰|Œ|ˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�8Š8Ð$ bÑ)Ô)Ð)r   c                   ón   — e Zd ZdZej                             d edd¦  «        ¦  «        d„ ¦   «         ZdS )ÚTestSceneOpenerszhScene openers (Shot 01) across Scenes 01 to 10 must always be CINEMATIC_CUT and never chain tail frames.Ú	scene_numé   é   c                 ó”  — d|d›d�}|                      |i ¦  «        }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        |¦  «        d	œz  }t          j	        |› d
|› �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}}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        |¦  «        d	œz  }t          j	        |› d|› �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}}|
�r{|
                     ¦   «         }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  }t          j	        |› d|
› �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d 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 S d S )NÚ
ep01_sceneÚ02dÚ_shot01)Ú	shot_dataÚCINEMATIC_CUT©ú==)z%(py0)s == %(py3)sÚ	take_type©Úpy0Úpy3z must be CINEMATIC_CUT, got z
>assert %(py5)sÚpy5Úclassified_takez classified as Úclean_frame_239©únot in)z%(py1)s not in %(py3)sÚ	norm_path)Úpy1r4   z illegally chained tail frame: Ú_shot00úassert %(py5)s)r   ÚpoÚclassify_shot_takeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚresolve_start_frame_v2Úlower)Úselfr&   r   Úshot_idÚsdatar1   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Úresolved_pathr6   r:   Ú@py_assert0s                 r   Ú.test_scene_opener_is_cinematic_cut_and_no_tailz?TestSceneOpeners.test_scene_opener_is_cinematic_cut_and_no_tail8   sw  € à5˜yÐ5Ð5Ð5Ð5ˆØ—’˜g rÑ*Ô*ˆõ Ô)¨'¸UÐCÑCÔCˆ	Ø+Ð`ˆy˜OÒ+Ð`Ð`Ð`Õ`Ô`Ð`Ð`Ð`Ð`ˆy˜OÐ`Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`ˆyÑ`Ô`Ð`Õ`Ô`ˆyÑ`Ô`Ð`Ð`Õ`Ô`˜OÑ`Ô`Ð`Ð`Ñ`Ð`Õ`Ô`°Ð-`Ð-`ÐU^Ð-`Ð-`Ñ`Ô`Ð`Ñ`Ð`Ð`Ð`Ñ`Ð`Õ`Õ`Ô`Ð`Ñ`Ô`Ñ`Ô`Ð`Ð`Ð`Ð`Ð`õ *,Ô)BÀ7ÈEÑ)RÔ)RÑ&ˆ�Ø"1Ð_ˆ /Ò1Ð_Ð_Ð_Õ_Ô_Ð_Ð_Ð_Ð_ˆ /Ð_Ñ_Ô_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ˆÑ_Ô_Ð_Õ_Ô_ˆÑ_Ô_Ð_Ð_Õ_Ô_ /Ñ_Ô_Ð_Ð_Ñ_Ð_Õ_Ô_°gÐ3_Ð3_ÈoÐ3_Ð3_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_àñ 	HØ%×+Ò+Ñ-Ô-ˆIØ$ð Ð$¨IÐ5ð ð ð õ ìðð ð ð Ð$¨Ið ñ ô õ äð %ñ ô ð õ äñô ð ð õ ìð -6ñ ô ð õ äð -6ñ ô ð ð ð ð ñ ð õ ìð ÐJÐJ¸=ÐJÐJñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð 7 	Ð6Ð6Ð6Ð6ÐGÐ6¸iÐGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐ6¸iÐGÑGÔGÕGÔGÐ6ÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG¸iÑGÔGÐGÕGÔG¸iÑGÔGÐGÐGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGð	Hð 	Hó    N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpytestÚmarkÚparametrizeÚrangerT   © rU   r   r%   r%   5   sU   € € € € € ØrÐrà„[×Ò˜[¨%¨%°°2©,¬,Ñ7Ô7ðHð Hñ 8Ô7ðHð Hð HrU   r%   c                   óæ   — e Zd ZdZg d¢Zg d¢ZddgZg d¢Zej	         
                    deez   ez   ez   ¦  «        d„ ¦   «         Zej	         
                    dg d	¢¦  «        d
„ ¦   «         Zg d¢Zd„ ZdS )Ú!TestKimTrongSafeguardScenes06to10uC   Empirical verification of Kim Trá»�ng shots across Scenes 06 to 10.)Úep01_scene07_shot01Úep01_scene07_shot03Úep01_scene07_shot04Úep01_scene07_shot05Úep01_scene07_shot06Úep01_scene07_shot08)Úep01_scene08_shot04Úep01_scene08_shot05Úep01_scene08_shot07Úep01_scene09_shot01Úep01_scene09_shot04)Úep01_scene10_shot04Úep01_scene10_shot05Úep01_scene10_shot13rL   c                 óP  — |                      |i ¦  «        }t          j        ||¦  «        \  }}|�rô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        |¦  «        t	          j        |¦  «        dœz  }
t	          j
        d|› d|› �¦  «        dz   d	|
iz  }t          t	          j        |¦  «        ¦  «        ‚d x}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        |¦  «        t	          j        |¦  «        dœz  }
t	          j
        d|› d|› �¦  «        dz   d	|
iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}	x}}d S d S )NÚ	thuy_kieur8   ©zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}Úresolved©r;   r4   r5   Úpy7u    LEAK DETECTED: Kim Trá»�ng shot u$    resolved to ThÃºy Kiá»�u portrait: ú
>assert %(py9)sÚpy9Ú	kim_trong©Úin©zD%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}u   Kim Trá»�ng shot u%    expected Kim Trá»�ng portrait, got: )r   r>   rI   rJ   r@   rA   rE   rB   rC   rD   rF   rG   rH   )rK   rL   r   rM   rr   r1   rS   Ú@py_assert4Ú@py_assert6rN   Ú@py_format8Ú@py_format10s               r   Ú5test_canonical_kim_trong_shots_never_return_thuy_kieuzWTestKimTrongSafeguardScenes06to10.test_canonical_kim_trong_shots_never_return_thuy_kieu_   s¼  € à—’˜g rÑ*Ô*ˆÝ Ô7¸ÀÑGÔGÑˆ�)Øñ 	Øð  h¤nð  n nÑ&6Ô&6ð �;Ð&6Ð6ð ð ð õ ìðð ð ð �;Ð&6ð ñ ô õ äð ñ ô ð õ äñô ð ð õ ìð '/ñ ô ð õ äð '/ñ ô ð ð õ äð '5ñ ô õ äð '7ñ ô ð ð ñ ð õ ìð k°7ÐjÐjÐ`hÐjÐjñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð ð ð ð  (¤.ð  . .Ñ"2Ô"2ð �;Ð"2Ð2ð ð ð õ ìðð ð ð �;Ð"2ð ñ ô õ äð ñ ô ð õ äñô ð ð õ ìð #+ñ ô ð õ äð #+ñ ô ð ð õ äð #1ñ ô õ äð #3ñ ô ð ð ñ ð õ ìð ] GÐ\Ð\ÐRZÐ\Ð\ñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð ð ð ð ð		ð 	rU   )ra   rk   rm   rn   c                 ó2  — ddi}t          j        ||¦  «        \  }}d }||u}|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}d	}	|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        |
¦  «        t          j        |¦  «        dœz  }t          j        d|› d|› �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	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        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	x}x}
}d S )NÚcharacter_asset_refzH04_Assets/characters/01_Main_Protagonists/thuy_kieu_maiden_16yo_720p.png©úis not©z%(py0)s is not %(py3)srr   r2   r=   r5   rp   r8   rq   rs   zAdversarial leak: u    returned ThÃºy Kiá»�u: ru   rv   rw   rx   rz   zassert %(py9)s)r>   rI   r@   rA   rB   rC   rD   rE   rG   rH   rJ   rF   )rK   rL   Úadversarial_sdatarr   r1   rN   rO   rP   rQ   rS   r{   r|   r}   r~   s                 r   Ú0test_adversarial_thuy_kieu_corruption_overriddenzRTestKimTrongSafeguardScenes06to10.test_adversarial_thuy_kieu_corruption_overriddenk   s¯  € ð "Ð#mð
Ðõ !Ô7¸ÐARÑSÔSÑˆ�)Ø#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Øð 	
 (¤.ð 	
 . .Ñ"2Ô"2ð 	
ˆ{Ð"2Ð2ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆ{Ð"2ð 	
ñ 	
ô 	
õ 	
ä 	ð ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð #+ñ 	
ô 	
ð 	
õ 	
ä 	ð #+ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð #1ñ 	
ô 	
õ 	
ä 	ð #3ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð M ÐLÐLÀ(ÐLÐLñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ð.˜hœnÐ.˜n˜nÑ.Ô.Ð.ˆ{Ð.Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ{Ð.Ð.Ñ.Ô.Õ.Ô.ˆ{Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜hÑ.Ô.Ð.Õ.Ô.˜hÑ.Ô.Ð.Ð.Õ.Ô.˜nÑ.Ô.Õ.Ô.Ð.Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.rU   )Úep01_scene06_shot03Úep01_scene06_shot04Úep01_scene06_shot06Úep01_scene06_shot10Úep01_scene06_shot12Úep01_scene06_shot14c                 ó"  — g }| j         D ]Ú}|                     |i ¦  «        }t          j        ||¦  «        \  }}|r/d|                     ¦   «         v r|                     |d|f¦  «         Œa|rGd|                     ¦   «         v r1d|                     dd¦  «        v r|                     |d|f¦  «         Œª|rd|                     ¦   «         vr|                     |d	|f¦  «         ŒÛ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  }
t          j        d|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}dS )u	  
        Adversarial audit of Scene 06 Kim Trá»�ng shots where muse prompts lack character_asset_ref
        causing fallback to mismatched banana prompt anchors.
        Remediated: All 6 Kim Trá»�ng shots must now resolve to Kim Trá»�ng with 0 anomalies.
        rp   ÚRETURNS_THUY_KIEUÚ
vuong_quanu   Kim Trá»�ngÚscene_titleÚ ÚRETURNS_VUONG_QUANrw   ÚNOT_KIM_TRONGr   r/   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚ	anomalies©r3   r;   r4   Úpy6u;   Expected 0 anomalies in Scene 06 Kim Trá»�ng shots, found: ú
>assert %(py8)sÚpy8N)ÚSCENE06_KIM_TRONG_SUSPECTSr   r>   rI   rJ   Úappendr•   r@   rA   rB   rC   rD   rE   rF   rG   rH   )rK   r   r–   ÚsidrM   rr   ÚtakerN   Ú@py_assert5r{   Ú@py_format7Ú@py_format9s               r   Ú$test_scene06_kim_trong_anomaly_auditzFTestKimTrongSafeguardScenes06to10.test_scene06_kim_trong_anomaly_audit}   sR  € ð ˆ	ØÔ2ð 	Cð 	CˆCØ—M’M # rÑ*Ô*ˆEÝÔ6°s¸EÑBÔB‰NˆH�dØð C˜K¨8¯>ª>Ñ+;Ô+;Ð;Ð;Ø× Ò  #Ð':¸HÐ!EÑFÔFÐFÐFØð C˜l¨h¯nªnÑ.>Ô.>Ð>Ð>À=ÐTY×T]ÒT]Ð^kÐmoÑTpÔTpÐCpÐCpØ× Ò  #Ð';¸XÐ!FÑGÔGÐGÐGØð C °H·N²NÑ4DÔ4DÐ!DÐ!DØ× Ò  # ¸Ð!AÑBÔBÐBøõ �9‰~Œ~Ðm Ðmˆ~ Ò"ÐmÐmÑmÕmÔmÐmÐmÐmÐmˆ~ ÐmÑmÔmÐmÕmÔmÑmÔmÐmÐmÕmÔm�sÑmÔmÐmÕmÔm�sÑmÔmÐmÐmÐmÕmÔmÑmÔmÐmÐmÕmÔm�9ÑmÔmÐmÕmÔm�9ÑmÔmÐmÐmÕmÔmˆ~ÑmÔmÕmÔm ÑmÔmÐmÐmÑmÐmÕmÔmÐ$mÐbkÐ$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ÐmrU   N)rV   rW   rX   rY   ÚSCENE07_KIM_TRONGÚSCENE08_KIM_TRONGÚSCENE09_KIM_TRONGÚSCENE10_KIM_TRONGrZ   r[   r\   r   r†   r›   r¢   r^   rU   r   r`   r`   M   s  € € € € € ØMÐMðð ð Ððð ð Ðð 	Ð4ðÐðð ð Ðð „[×Ò˜YÐ(9Ð<MÑ(MÐPaÑ(aÐduÑ(uÑvÔvð	ð 	ñ wÔvð	ð „[×Ò˜Yð  )Eð  )Eð  )Eñ  Fô  Fð	/ð 	/ñ Fô  Fð	/ð"ð "ð "Ðð
nð nð nð nð nrU   r`   c                   ó¸   — e Zd ZdZg d¢Zg d¢Zej                             de¦  «        d„ ¦   «         Z	ej                             de¦  «        d„ ¦   «         Z
d„ ZdS )	ÚTestVuongFamilySafeguarduU   Empirical verification of VÆ°Æ¡ng Quan and VÆ°Æ¡ng Ã”ng shots across Scenes 01 to 10.)Úep01_scene02_shot04Úep01_scene02_shot07Úep01_scene02_shot10Úep01_scene02_shot13)Úep01_scene02_shot08Úep01_scene02_shot09Úep01_scene02_shot12Úep01_scene02_shot15Úep01_scene05_shot12rL   c                 ó†  — |                      |i ¦  «        }t          j        ||¦  «        \  }}d }||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d x}}d}
|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        |¦  «        t          j        |¦  «        d
œz  }t          j        d|› d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}
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        |¦  «        t          j        |¦  «        d
œz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}
x}x}}d S )Nr‚   r„   rr   r2   r=   r5   rp   r8   rq   rs   u   VÆ°Æ¡ng Ã”ng shot õ    resolved to ThÃºy Kiá»�u: ru   rv   Ú	vuong_ongrx   rz   u   Expected VÆ°Æ¡ng Ã”ng, got ©r   r>   rI   r@   rA   rB   rC   rD   rE   rG   rH   rJ   rF   ©rK   rL   r   rM   rr   r1   rN   rO   rP   rQ   rS   r{   r|   r}   r~   s                  r   Ú+test_vuong_ong_shots_never_return_thuy_kieuzDTestVuongFamilySafeguard.test_vuong_ong_shots_never_return_thuy_kieu�   sÉ  € à—’˜g rÑ*Ô*ˆÝ Ô7¸ÀÑGÔGÑˆ�)Ø#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Øð 	
 (¤.ð 	
 . .Ñ"2Ô"2ð 	
ˆ{Ð"2Ð2ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆ{Ð"2ð 	
ñ 	
ô 	
õ 	
ä 	ð ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð #+ñ 	
ô 	
ð 	
õ 	
ä 	ð #+ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð #1ñ 	
ô 	
õ 	
ä 	ð #3ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð P ÐOÐOÀXÐOÐOñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ÐX˜hœnÐX˜n˜nÑ.Ô.Ð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˜hÑXÔXÐXÕXÔX˜hÑXÔXÐXÐXÕXÔX˜nÑXÔXÕXÔXÐ.ÑXÔXÐXÐXÑXÐXÕXÔXÐ0XÈhÐ0XÐ0XÑ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ÐXrU   c                 ó†  — |                      |i ¦  «        }t          j        ||¦  «        \  }}d }||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d x}}d}
|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        |¦  «        t          j        |¦  «        d
œz  }t          j        d|› d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}
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        |¦  «        t          j        |¦  «        d
œz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}
x}x}}d S )Nr‚   r„   rr   r2   r=   r5   rp   r8   rq   rs   u   VÆ°Æ¡ng Quan shot r³   ru   rv   r�   rx   rz   u   Expected VÆ°Æ¡ng Quan, got rµ   r¶   s                  r   Ú2test_vuong_quan_clean_shots_never_return_thuy_kieuzKTestVuongFamilySafeguard.test_vuong_quan_clean_shots_never_return_thuy_kieu§   sÉ  € à—’˜g rÑ*Ô*ˆÝ Ô7¸ÀÑGÔGÑˆ�)Ø#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Øð 	
 (¤.ð 	
 . .Ñ"2Ô"2ð 	
ˆ{Ð"2Ð2ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆ{Ð"2ð 	
ñ 	
ô 	
õ 	
ä 	ð ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð #+ñ 	
ô 	
ð 	
õ 	
ä 	ð #+ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð #1ñ 	
ô 	
õ 	
ä 	ð #3ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð P ÐOÐOÀXÐOÐOñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ÐY˜xœ~Ð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ÔY˜xÑYÔYÐYÕYÔY˜xÑYÔYÐYÐYÕYÔY˜~ÑYÔYÕYÔYÐ/ÑYÔYÐYÐYÑYÐYÕYÔYÐ1YÈxÐ1YÐ1YÑ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ÐYÐYrU   c                 óˆ  — g }dD ]’}|                      |i ¦  «        }t          j        ||¦  «        \  }}|r.d|                     ¦   «         v r|                     ||f¦  «         Œ`|rd|                     ¦   «         vr|                     |d|› �f¦  «         Œ“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  }
t          j        d|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}	}dS )uÃ   
        Audit Scene 05 shots 16 and 24 (VÆ°Æ¡ng Quan storytelling and anti-tears).
        Remediated: Both shots now have character_asset_ref set to vuong_quan, resulting in 0 defects.
        )Úep01_scene05_shot16Úep01_scene05_shot24rp   r�   zExpected vuong_quan, got r   r/   r”   r•   Údefectsr—   z8Expected 0 defects in Scene 05 Vuong Quan shots, found: r™   rš   N)r   r>   rI   rJ   rœ   r•   r@   rA   rB   rC   rD   rE   rF   rG   rH   )rK   r   r½   r�   rM   rr   rž   rN   rŸ   r{   r    r¡   s               r   Ú)test_vuong_quan_scene05_uncovered_defectszBTestVuongFamilySafeguard.test_vuong_quan_scene05_uncovered_defects±   só  € ð
 ˆØAð 	Nð 	NˆCØ—M’M # rÑ*Ô*ˆEÝÔ6°s¸EÑBÔB‰NˆH�dØð N˜K¨8¯>ª>Ñ+;Ô+;Ð;Ð;Ø—’  X˜Ñ/Ô/Ð/Ð/Øð N °X·^²^Ñ5EÔ5EÐ!EÐ!EØ—’ Ð%KÀÐ%KÐ%KÐLÑMÔMÐMøå�7‰|Œ|Ðf˜qÐfˆ|˜qÒ ÐfÐfÑfÕfÔfÐfÐfÐfÐfˆ|˜qÐfÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf�sÑfÔfÐfÕfÔf�sÑfÔfÐfÐfÐfÕfÔfÑfÔfÐfÐfÕfÔf�7ÑfÔfÐfÕfÔf�7ÑfÔfÐfÐfÕfÔfˆ|ÑfÔfÕfÔf˜qÑfÔfÐfÐfÑfÐfÕfÔfÐ"fÐ]dÐ"fÐ"fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfÐfÐfrU   N)rV   rW   rX   rY   ÚVUONG_ONG_SOLO_SHOTSÚVUONG_QUAN_SOLO_SHOTS_CLEANrZ   r[   r\   r·   r¹   r¾   r^   rU   r   r¨   r¨   ’   s·   € € € € € Ø_Ð_ðð ð Ðð#ð #ð #Ðð
 „[×Ò˜YÐ(<Ñ=Ô=ðYð Yñ >Ô=ðYð „[×Ò˜YÐ(CÑDÔDðZð Zñ EÔDðZðgð gð gð gð grU   r¨   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestPromptSynchronizationzQVerify synchronization between ep01/prompts/muse_prompts.json and master prompts.c                 óà  — |                      ¦   «         D �]×\  }}||v }|sÛt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d�¦  «        dz   d	|iz  }t          t          j	        |¦  «        ¦  «        ‚d
}||         }|j
        }d}	 ||	¦  «        }
|j
        }d} ||¦  «        }|
|k    }|�s4t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        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}
x}x}x}}|j
        }d}	 ||	¦  «        }
|j
        }d} ||¦  «        }|
|k    }|�s4t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        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}
x}x}x}}�ŒÙd
S )zRAll ep01 motion prompts must exist in master muse_ai_video_prompts.json and match.rx   )z%(py0)s in %(py2)sr�   r#   )r3   Úpy2zShot z missing from master prompts!z
>assert %(py4)sÚpy4Nr�   r/   )z…%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py14)s
{%(py14)s = %(py10)s
{%(py10)s = %(py8)s.get
}(%(py12)s)
}rM   Úmaster_sdata)r3   rÄ   rÅ   r˜   rš   Úpy10Úpy12Úpy14zassert %(py16)sÚpy16r�   )Úitemsr@   rA   rB   rC   rD   rE   rF   rG   rH   r   )rK   r   r#   r�   rM   rO   Ú@py_format3Ú@py_format5rÆ   Ú@py_assert3rŸ   Ú@py_assert9Ú@py_assert11Ú@py_assert13Ú@py_assert7Ú@py_format15Ú@py_format17s                    r   Ú'test_ep01_to_master_prompts_consistencyzATestPromptSynchronization.test_ep01_to_master_prompts_consistencyÅ   sz  € à#Ÿ/š/Ñ+Ô+ð 	_ñ 	_‰JˆC�ØÐ*Ð*ÐVÐVÐVÕVÔVÐVÐVÐVÐV�3Ð*ÐVÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV�3ÑVÔVÐVÕVÔV�3ÑVÔVÐVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔVÐ*ÑVÔVÐVÕVÔVÐ*ÑVÔVÐVÐVÐVÐVÑVÐVÕVÔVÐ,V°CÐ,VÐ,VÐ,VÑVÔVÐVÑVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVØ+¨CÔ0ˆLà”9ÐN˜]ÐN�9�9˜]Ñ+Ô+ÐN¨|Ô/?ÐNÀÐNÐ/?Ð/?ÀÑ/NÔ/NÐNÐ+Ð/NÒNÐNÐNÑNÕNÔNÐNÐNÐNÐNÐ+Ð/NÐNÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔN�5ÑNÔNÐNÕNÔN�5ÑNÔNÐNÐNÕNÔN�9ÑNÔNÕNÔN˜]ÑNÔNÕNÔNÐ+ÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔN¨|ÑNÔNÐNÕNÔN¨|ÑNÔNÐNÐNÕNÔNÐ/?ÑNÔNÕNÔNÀÑNÔNÕNÔNÐ/NÑNÔNÐNÐNÑNÐNÐNÐNÐNÐNÑNÐNÕNÕNÔNÐNÑNÔNÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNØ”9Ð^Ð2Ð^�9�9Ð2Ñ3Ô3Ð^°|Ô7GÐ^ÐH]Ð^Ð7GÐ7GÐH]Ñ7^Ô7^Ð^Ð3Ð7^Ò^Ð^Ð^Ñ^Õ^Ô^Ð^Ð^Ð^Ð^Ð3Ð7^Ð^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�5Ñ^Ô^Ð^Õ^Ô^�5Ñ^Ô^Ð^Ð^Õ^Ô^�9Ñ^Ô^Õ^Ô^Ð2Ñ^Ô^Õ^Ô^Ð3Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^°|Ñ^Ô^Ð^Õ^Ô^°|Ñ^Ô^Ð^Ð^Õ^Ô^Ð7GÑ^Ô^Õ^Ô^ÐH]Ñ^Ô^Õ^Ô^Ð7^Ñ^Ô^Ð^Ð^Ñ^Ð^Ð^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ñ^ð	_ð 	_rU   c                 óª  — g d¢}|D �]!}|                      |i ¦  «        }|                      dd¦  «        }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        |¦  «        t          j        |¦  «        dœz  }
t          j        d	|› d
|› �¦  «        dz   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}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        |¦  «        t          j        |¦  «        dœz  }
t          j        d	|› d|› �¦  «        dz   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}	x}}�Œ#g d¢}|D �]!}|                      |i ¦  «        }|                      dd¦  «        }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        |¦  «        t          j        |¦  «        dœz  }
t          j        d	|› d|› �¦  «        dz   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}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        |¦  «        t          j        |¦  «        dœz  }
t          j        d	|› d|› �¦  «        dz   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}	x}}�Œ#dS )u[   Verify the canonical Kim Trá»�ng and ThÃºy Kiá»�u character_asset_ref in the synced master.)rk   rl   rm   Úep01_scene10_shot07Úep01_scene10_shot08Úep01_scene10_shot10rn   r�   r‘   rw   rx   rz   Úrefrs   zMaster shot z does not have kim_trong ref: ru   rv   Nrp   r8   rq   z leaked thuy_kieu: )Úep01_scene10_shot03Úep01_scene10_shot06Úep01_scene10_shot09Úep01_scene10_shot11Úep01_scene10_shot12z does not have thuy_kieu ref: z leaked kim_trong: )r   rJ   r@   rA   rE   rB   rC   rD   rF   rG   rH   )rK   r#   Ú	kim_shotsr�   rM   rÚ   rS   r{   r|   rN   r}   r~   Ú
kieu_shotss                r   Ú)test_kim_trong_11_fixes_present_in_masterzCTestPromptSynchronization.test_kim_trong_11_fixes_present_in_masterÎ   s*  € ð
ð 
ð 
ˆ	ð ð 	`ñ 	`ˆCØ$×(Ò(¨¨bÑ1Ô1ˆEØ—)’)Ð1°2Ñ6Ô6ˆCØÐf #¤)Ðf ) )¡+¤+Ðf�; +Ð-ÐfÐfÐfÕfÔfÐfÐfÐfÐf�; +ÐfÑfÔfÕfÔf�;ÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf #ÑfÔfÐfÕfÔf #ÑfÔfÐfÐfÕfÔf )ÑfÔfÕfÔf +ÑfÔfÐfÐfÑfÐfÕfÔfÐ/f¸cÐ/fÐ/fÐadÐ/fÐ/fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfÐfÐfØÐ_ c¤iÐ_ i i¡k¤kÐ_�; kÐ1Ð_Ð_Ð_Õ_Ô_Ð_Ð_Ð_Ð_�; kÐ_Ñ_Ô_Õ_Ô_�;Ñ_Ô_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ cÑ_Ô_Ð_Õ_Ô_ cÑ_Ô_Ð_Ð_Õ_Ô_ iÑ_Ô_Õ_Ô_ kÑ_Ô_Ð_Ð_Ñ_Ð_Õ_Ô_Ð3_À#Ð3_Ð3_ÐZ]Ð3_Ð3_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ñ_ð
ð 
ð 
ˆ
ð ð 	`ñ 	`ˆCØ$×(Ò(¨¨bÑ1Ô1ˆEØ—)’)Ð1°2Ñ6Ô6ˆCØÐf #¤)Ðf ) )¡+¤+Ðf�; +Ð-ÐfÐfÐfÕfÔfÐfÐfÐfÐf�; +ÐfÑfÔfÕfÔf�;ÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf #ÑfÔfÐfÕfÔf #ÑfÔfÐfÐfÕfÔf )ÑfÔfÕfÔf +ÑfÔfÐfÐfÑfÐfÕfÔfÐ/f¸cÐ/fÐ/fÐadÐ/fÐ/fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfÐfÐfØÐ_ c¤iÐ_ i i¡k¤kÐ_�; kÐ1Ð_Ð_Ð_Õ_Ô_Ð_Ð_Ð_Ð_�; kÐ_Ñ_Ô_Õ_Ô_�;Ñ_Ô_Ð_Õ_Ô_Ñ_Ô_Ð_Ð_Õ_Ô_ cÑ_Ô_Ð_Õ_Ô_ cÑ_Ô_Ð_Ð_Õ_Ô_ iÑ_Ô_Õ_Ô_ kÑ_Ô_Ð_Ð_Ñ_Ð_Õ_Ô_Ð3_À#Ð3_Ð3_ÐZ]Ð3_Ð3_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ñ_ð		`ð 	`rU   N)rV   rW   rX   rY   rÕ   râ   r^   rU   r   rÂ   rÂ   Â   s@   € € € € € Ø[Ð[ð_ð _ð _ð`ð `ð `ð `ð `rU   rÂ   Ú__main__z-v)#rY   ÚbuiltinsrB   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter@   ÚosÚsysr   Úpathlibr   rZ   Ú__file__ÚresolveÚparentÚPROJECT_ROOTÚpathÚinsertÚstrÚproduction_orchestratorr>   r   r   r"   Úfixturer   r    r#   r%   r`   r¨   rÂ   rV   Úmainr^   rU   r   ú<module>rõ      si  ððð ð$ € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€Ø „‡‚��3�3�|Ð&>Ñ>Ñ?Ô?Ñ @Ô @Ð @à $Ð $Ð $Ð $à 
Ñ*¨VÑ3°iÑ?ÐBUÑU€Ø˜_Ñ,Ð/KÑK€Ø /Ñ1Ð4PÑPÐ à€„�hÐÑÔð*ð *ñ  Ôð*ð
 €„�hÐÑÔð-ð -ñ  Ôð-ð
 €„�hÐÑÔð*ð *ñ  Ôð*ðHð Hð Hð Hð Hñ Hô Hð Hð0Bnð Bnð Bnð Bnð Bnñ Bnô Bnð BnðJ-gð -gð -gð -gð -gñ -gô -gð -gð`*`ð *`ð *`ð *`ð *`ñ *`ô *`ð *`ðZ ˆzÒÐØ€F„K�˜4Ð Ñ!Ô!Ð!Ð!Ð!ð ÐrU   