§
    —%Ëjˆe ã                   ó~
  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZmZmZmZmZ ej        dk    rC	 ej                             d¬¦  «         ej                             d¬¦  «         n# e$ r Y nw xY w e	e¦  «                             ¦   «         j        j        Zedz  Zed	z  Zed
z  Zedz  Zedz  Zedz  Zedz  Z edz  Z!edz  Z"	 ddl#m$Z$m%Z%m&Z& n(# e'$ r  	 ddl#m$Z$m%Z%m&Z& n# e$ r	 dZ$dZ%dZ&Y nw xY wY nw xY w	 ddl(m)Z)m*Z*m+Z+ n(# e'$ r  	 ddl(m)Z)m*Z*m+Z+ n# e$ r	 dZ)dZ*dZ+Y nw xY wY nw xY w	 ddl,m-Z- n # e'$ r 	 ddl,m-Z- n# e$ r dZ-Y nw xY wY nw xY w	 ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 nE# e'$ r= 	 ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 n(# e$ r  dZ/dzd„Z2dZ1dZ4de5de5fd„Z0d{de5de6de5fd„Z3Y nw xY wY nw xY wd e5de6fd!„Z7d"e	d#e5dee	         fd$„Z8	 dd%l9m:Z: n# e'$ r dZ:Y nw xY w	 dd&l;m<Z<m=Z=m>Z> n# e'$ r dZ<d'„ Z=d(„ Z>Y nw xY wd|d)ee5         defd*„Z?d|d)ee5         dee5ef         fd+„Z@d,e5deee5ef                  fd-„ZAd#e5dee	         fd.„ZBd#e5dee	         fd/„ZCdaDeee5ef                  eEd0<   d#e5dee5ef         fd1„ZFd|d#e5d2ee         de5fd3„ZGdzd#e5d4ee5         d2ee         de5fd5„ZHd|d6eee5e	f                  d#ee5         dee5         fd7„ZId}d9e5d:e5dee	         fd;„ZJd|d<e5d:ee5         dee	         fd=„ZK	 	 	 d~d#e5d2ee         d?e5d@ee5         dee5ee5         f         f
dA„ZL	 	 	 dd#e5d2edBee5         dCe6dDe6deee5         eee5         e5f         eee5         e5e5f         f         fdE„ZM	 	 dzd#e5d2ee         dFee         deee5         e5f         fdG„ZN	 	 dzd#e5d2ee         dFee         deee5         e5e5f         fdH„ZOd|d)ee5         fdI„ZPdzd,ee5         d)ee5         fdJ„ZQd|dKe5dLee5         de6fdM„ZR	 	 	 	 	 	 	 	 	 	 d€d#e5dQee5         dRee5         dSe5dTee	         dUee6         dVe6dWeSdXee6         dYe5dZe6de6fd[„ZT	 	 	 	 	 	 	 	 	 d�d,e5de6d\e6dSe5dTee	         dVe6dWeSdXee6         dYe5dZe6fd]„ZUd‚d_e	d`e5dae5de	fdb„ZVdcee5         dee	         fdd„ZWde„  eXddf¦  «        D ¦   «         ZYd,e5dee	         fdg„ZZ	 	 	 	 dƒd,e5djee5         dke[dVe6dle5dee	         fdm„Z\	 	 	 	 d„d,e5doee5         dpee5         djee5         dqe5de6fdr„Z]	 	 	 	 	 	 d…d)e5dteee5                  djee5         dXe6due6dve6dee	         fdw„Z^dx„ Z_e`dyk    r e_¦   «          dS dS )†uO  
=============================================================================
THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - AI CINEMA PRODUCTION ORCHESTRATOR
=============================================================================
Cá»— mÃ¡y Ä‘iá»�u phá»‘i sáº£n xuáº¥t tá»± Ä‘á»™ng toÃ n diá»‡n:
- Quáº£n lÃ½ danh má»¥c shot/scene tá»« 02_AI_Prompts/muse_ai_video_prompts.json.
- Render Ä‘Æ¡n shot hoáº·c batch toÃ n cáº£nh (Agent-Browser --session muse).
- Tá»± Ä‘á»™ng ná»‘i tiáº¿p Head-Tail (Tail Frame N -> Start Frame N+1).
- Kiá»ƒm tra tÃ­nh liÃªn tá»¥c thá»‹ giÃ¡c (Visual Continuity Checker).
- GhÃ©p ná»‘i Master cáº£nh quay báº£o toÃ n 100% Ã¢m thanh (FFmpeg Filter Complex Concat).
- Master Ã¢m thanh Ä‘iá»‡n áº£nh chuáº©n YouTube Green Dollar (-14 LUFS).
=============================================================================
é    N)ÚPath)ÚDictÚListÚOptionalÚTupleÚAnyÚUnionÚwin32úutf-8©ÚencodingÚ02_AI_PromptsÚ	04_AssetsÚvideosÚ	keyframesÚ
charactersÚ
06_ExportsÚepisodeszmuse_ai_video_prompts.jsonzgemini_banana_prompts.json)Úevaluate_shot_gateÚevaluate_scene_gateÚVideoCriticVerdicté   )ÚDiagnosticPromptHealerÚCinematicShotPacerÚMAX_HEALING_CYCLESé   )Ú!generate_zero_waste_contact_sheet)Úrun_shot_pipelineÚensure_audio_guardÚAUDIO_GUARD_CANONICALÚclassify_shot_engineÚensure_closed_lips_guardÚCLOSED_LIPS_CANONICALc                 ó   — dS )NÚmuse© )ÚsidÚsdataÚprompts      úGC:\Projects\KieuStory\05_Production_Pipeline\production_orchestrator.pyú<lambda>r+   Z   s   € ÀF€ ó    uò    Quy táº¯c Ã¢m thanh: Tuyá»‡t Ä‘á»‘i KHÃ”NG sinh nháº¡c ná»�n (no music/BGM), khÃ´ng Ã¢m thanh Ä‘iá»‡n tá»­, khÃ´ng táº¡p Ã¢m rÃ¨ nhiá»…u. Chá»‰ sinh Ã¢m thanh mÃ´i trÆ°á»�ng tá»± nhiÃªn (foley, ambience) vÃ  thoáº¡i nhÃ¢n váº­t chÃ¢n thá»±c.uš    [KHÃ“A KHáº¨U HÃŒNH Báº®T BUá»˜C / LIPS CLOSED]: Ä�Ã´i mÃ´i cÃ¡c nhÃ¢n váº­t trong khung hÃ¬nh khÃ©p cháº·t tá»± nhiÃªn (lips closed), khÃ´ng máº¥p mÃ¡y.ÚpÚreturnc                 óx   — | st          j        ¦   «         S d| vr d| vr|                      ¦   «         t           z   S | S )Nõ'   Tuyá»‡t Ä‘á»‘i KHÃ”NG sinh nháº¡c ná»�núStrictly NO background music)r    ÚstripÚrstrip©r-   s    r*   r   r   ]   sG   € ØÐ:Õ2Ô8Ñ:Ô:Ð:Ø8ÀÐAÐAÐFdÐlmÐFmÐFmØ—x’x‘z”zÕ$9Ñ9Ð9ØˆHr,   FÚforcec                 ó   — | S ©Nr&   )r-   r5   s     r*   r"   r"   b   s   € ØˆHr,   r)   c                 ó   — | sdS d| v pd| v S )uZ   XÃ¡c thá»±c prompt tuÃ¢n thá»§ chá»‰ thá»‹ cáº¥m nháº¡c ná»�n (No-BGM) theo AGENTS.md Â§3.Fr0   r1   r&   )r)   s    r*   Úvalidate_audio_guardr9   e   s&   € àð ØˆuØ5¸Ð?ÐkÐCaÐekÐCkÐlr,   Ú
video_pathÚshot_idc                 ó€  — 	 ddl }|                     t          | ¦  «        ¦  «        }t          |                     |j        ¦  «        ¦  «        }|dk    r|                     ¦   «          dS |                     |j        t          d|dz
  ¦  «        ¦  «         | 
                    ¦   «         \  }}|                     ¦   «          |rM|�Kt          |z  }|                     dd¬¦  «         |dz  }|                     t          |¦  «        |¦  «         |S n,# t          $ r}	t          d|› d|	› �¦  «         Y d}	~	nd}	~	ww xY wdS )	uZ   TrÃ­ch xuáº¥t frame cuá»‘i cÃ¹ng (Tail Frame 239) tá»« video Ä‘á»ƒ ná»‘i tiáº¿p Head-Tail.r   Nr   T©ÚparentsÚexist_okúclean_frame_239.jpgu-         [!] Lá»—i trÃ­ch xuáº¥t Tail Frame cho ú: )Úcv2ÚVideoCaptureÚstrÚintÚgetÚCAP_PROP_FRAME_COUNTÚreleaseÚsetÚCAP_PROP_POS_FRAMESÚmaxÚreadÚKEYFRAMES_DIRÚmkdirÚimwriteÚ	ExceptionÚprint)
r:   r;   rB   ÚcapÚtotal_framesÚretÚframeÚkf_dirÚ	tail_fileÚes
             r*   Ú_extract_tail_framerY   k   sV  € ðNØˆ
ˆ
ˆ
Ø×Ò�s :™œÑ/Ô/ˆÝ˜3Ÿ7š7 3Ô#;Ñ<Ô<Ñ=Ô=ˆØ˜1ÒÐØ�KŠK‰MŒMˆMØ�4Ø�Š�Ô'­¨Q°¸qÑ0@Ñ)AÔ)AÑBÔBÐBØ—X’X‘Z”Z‰
ˆˆUØ�Š‰ŒˆØð 	�5Ð$Ý" WÑ,ˆFØ�LŠL °ˆLÑ5Ô5Ð5ØÐ!6Ñ6ˆIØ�KŠK�˜I™œ¨Ñ.Ô.Ð.ØÐøøÝð Nð Nð NÝÐL¸gÐLÐLÈÐLÐLÑMÔMÐMÐMÐMÐMÐMÐMøøøøðNøøøàˆ4s   ‚A'D Á+B%D Ä
D;ÄD6Ä6D;)Úcheck_shot_continuity)ÚAudioContinuityEngineÚ
get_ffmpegÚget_ffprobec                  ó   — dS )NÚffmpegr&   r&   r,   r*   r+   r+   Š   s   € ˜€ r,   c                  ó   — dS )NÚffprober&   r&   r,   r*   r+   r+   ‹   s   € ˜)€ r,   Ú
episode_idc                 óÜ  — | rtt           |                      ¦   «         z  dz  dz  }|                     ¦   «         r>t          |dd¬¦  «        5 }t	          j        |¦  «        cddd¦  «         S # 1 swxY w Y   t                               ¦   «         st          dt          › �¦  «         i S t          t          dd¬¦  «        5 }t	          j        |¦  «        cddd¦  «         S # 1 swxY w Y   dS )uo   Táº£i danh má»¥c prompt chuyá»ƒn Ä‘á»™ng video, há»— trá»£ náº¡p theo Episode riÃªng biá»‡t hoáº·c file Master.Úpromptszmuse_prompts.jsonÚrr   r   Nu$   [!] KhÃ´ng tÃ¬m tháº¥y file prompt: )ÚEPISODES_DIRÚlowerÚexistsÚopenÚjsonÚloadÚMUSE_PROMPTS_FILErQ   )rb   Úep_fileÚfs      r*   Úload_muse_promptsro   Ž   sg  € àð $Ý ×!1Ò!1Ñ!3Ô!3Ñ3°iÑ?ÐBUÑUˆØ�>Š>ÑÔð 	$Ý�g˜s¨WÐ5Ñ5Ô5ð $¸Ý”y ‘|”|ð$ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $å×#Ò#Ñ%Ô%ð ÝÐHÕ5FÐHÐHÑIÔIÐIØˆ	Ý	Õ ¨wÐ	7Ñ	7Ô	7ð ¸1ÝŒy˜‰|Œ|ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s$   ÁA,Á,A0Á3A0Ã C!Ã!C%Ã(C%c                 óN   — t          | ¬¦  «        }|                     di ¦  «        S )u>   Láº¥y danh sÃ¡ch toÃ n bá»™ cÃ¡c shot Ä‘Æ°á»£c Ä‘á»‹nh nghÄ©a.©rb   Úmotion_prompts)ro   rF   )rb   Údatas     r*   Úget_all_shotsrt   œ   s'   € å¨
Ð3Ñ3Ô3€DØ�8Š8Ð$ bÑ)Ô)Ð)r,   Úscene_idc                 ó>  — t          j        d| t           j        ¦  «        }|r'|                     d¦  «                             ¦   «         nd}t          |¬¦  «        }|st          ¦   «         }g }t          j        d| › d�t           j        ¦  «        }|                     ¦   «         D ]V\  }}|                     |¦  «        }|r:t          |                     d¦  «        ¦  «        }	| 	                    |	||f¦  «         ŒW| 
                    d„ ¬¦  «         d	„ |D ¦   «         S )
uO   Lá»�c danh sÃ¡ch cÃ¡c shot thuá»™c vá»� má»™t Scene cá»¥ thá»ƒ theo thá»© tá»±.ú^(ep\d+)r   Nrq   ú^z
_shot(\d+)c                 ó   — | d         S )Nr   r&   ©Úxs    r*   r+   z%get_shots_for_scene.<locals>.<lambda>²   s
   € ˜q œt€ r,   )Úkeyc                 ó   — g | ]
\  }}}||f‘ŒS r&   r&   )Ú.0Ú_r;   Ú	shot_datas       r*   ú
<listcomp>z'get_shots_for_scene.<locals>.<listcomp>³   s$   € ÐFÐFÐFÑ%: Q¨°ˆW�iÐ ÐFÐFÐFr,   )ÚreÚsearchÚ
IGNORECASEÚgrouprg   rt   ÚcompileÚitemsrE   ÚappendÚsort)
ru   Úm_epÚep_idÚshotsÚmatchedÚpatternr;   r€   ÚmÚshot_nums
             r*   Úget_shots_for_scener‘   ¢   s  € åŒ9�[ (­B¬MÑ:Ô:€DØ%)Ð3ˆD�JŠJ�q‰MŒM×ÒÑ!Ô!Ð!¨t€EÝ UÐ+Ñ+Ô+€EØð  Ý‘”ˆØ€GÝŒjÐ2˜hÐ2Ð2Ð2µB´MÑBÔB€Gà#Ÿkšk™mœmð ;ð ;Ñˆ�Ø�NŠN˜7Ñ#Ô#ˆØð 	;Ý˜1Ÿ7š7 1™:œ:‘”ˆHØ�NŠN˜H g¨yÐ9Ñ:Ô:Ð:øà‡L‚L�^�^€LÑ$Ô$Ð$ØFÐF¸gÐFÑFÔFÐFr,   c                 ó¤  — t          j        dt          j        | ¦  «        › d�t           j        ¦  «        }g }t                               | › d�¦  «        D ]Ò}|                     ¦   «         r¼|                     ¦   «         j        dk    rŸd|j	         
                    ¦   «         vr„|                     |j	        ¦  «        }|r7|                     d¦  «        r"t          |                     d¦  «        ¦  «        nd}|                     ||                     ¦   «         j        |f¦  «         ŒÓ|r&|                     d„ d	¬
¦  «         |d         d         S dS )uk   TÃ¬m video Ä‘Ã£ render cá»§a má»™t shot, Æ°u tiÃªn phiÃªn báº£n cao nháº¥t (_v3 > _v2 > _v1 > unversioned).rx   z(?:_10s)?(?:_v(\d+))?\.mp4$z*.mp4éè  Úmasterr   r   c                 ó"   — | d         | d         fS )Nr   r   r&   rz   s    r*   r+   z%find_rendered_video.<locals>.<lambda>À   s   €  A a¤D¨!¨A¬$ <€ r,   T©r|   Úreverser   N)r‚   r†   Úescaper„   Ú
VIDEOS_DIRÚglobÚis_fileÚstatÚst_sizeÚnamerg   Úmatchr…   rE   rˆ   Úst_mtimer‰   )r;   rŽ   Úmatchesr-   r�   Úv_nums         r*   Úfind_rendered_videor£   ¶   s'  € åŒjÐM�bœi¨Ñ0Ô0ÐMÐMÐMÍrÌ}Ñ]Ô]€GØ€GÝ�_Š_ Ð.Ð.Ð.Ñ/Ô/ð :ð :ˆØ�9Š9‰;Œ;ð 	:˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2°xÀqÄvÇ|Â|Á~Ä~Ð7UÐ7UØ—’˜aœfÑ%Ô%ˆAØ()Ð@¨a¯gªg°a©j¬jÐ@•C˜Ÿš ™
œ
‘O”O�O¸qˆEØ�NŠN˜E 1§6¢6¡8¤8Ô#4°aÐ8Ñ9Ô9Ð9øØð Ø�ŠÐ/Ð/¸ˆÑ>Ô>Ð>Ø�qŒz˜!Œ}ÐØˆ4r,   c                 ó&  — t           | z  }|                     ¦   «         rrt          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        z   t          |                     d¦  «        ¦  «        z   }|r|d         S dS )u<   TÃ¬m áº£nh Tail Frame (frame cuá»‘i) cá»§a shot Ä‘Ã£ render.zclean_frame_*.jpgz*.pngz*.jpgr   N)rM   rh   Úlistrš   )r;   rV   Ú
candidatess      r*   Úfind_tail_framer§   Å   s„   € å˜WÑ$€FØ‡}‚}�„ð !Ý˜&Ÿ+š+Ð&9Ñ:Ô:Ñ;Ô;½dÀ6Ç;Â;ÈwÑCWÔCWÑ>XÔ>XÑXÕ[_Ð`f×`kÒ`kÐlsÑ`tÔ`tÑ[uÔ[uÑuˆ
Øð 	!Ø˜a”=Ð Øˆ4r,   ÚBANANA_PROMPTS_CACHEc                 ó�  — t           €\t                               ¦   «         rA	 t          j        t                               d¬¦  «        ¦  «        a n# t          $ r i a Y nw xY wi a t           si S | t           v rt           |          S dD ]@}t                                |i ¦  «        }t          |t          ¦  «        r| |v r
||          c S ŒAi S )u9   Láº¥y dá»¯ liá»‡u prompt tá»« gemini_banana_prompts.json.Nr   r   )Úep01_start_framesÚep02_start_framesÚep03_start_framesÚep04_start_framesÚep05_start_framesÚep06_start_frames)
r¨   ÚBANANA_PROMPTS_FILErh   rj   ÚloadsÚ	read_textrP   rF   Ú
isinstanceÚdict)r;   ÚkÚbuckets      r*   Úget_banana_prompt_datar·   Ò   sõ   € õ Ð#Ý×%Ò%Ñ'Ô'ð 	&ð*Ý'+¤zÕ2E×2OÒ2OÐY`Ð2OÑ2aÔ2aÑ'bÔ'bÐ$Ð$øÝð *ð *ð *Ø')Ð$Ð$Ð$ð*øøøð $&Ð åð Øˆ	àÕ&Ð&Ð&Ý# GÔ,Ð,ð Lð #ð #ˆÝ%×)Ò)¨!¨RÑ0Ô0ˆÝ�f�dÑ#Ô#ð 	#¨°6Ð(9Ð(9Ø˜'”?Ð"Ð"Ð"øà€Is   ¢-A ÁAÁAr€   c                 óö  — |rGd|v rCt          |d         ¦  «                             ¦   «         }|r|                     ¦   «         dk    r|S |rI|                     d¦  «        r4t          |d         ¦  «                             ¦   «         }dD ]
}||v r|c S Œt	          | ¦  «        }|rGd|v rCt          |d         ¦  «                             ¦   «         }|r|                     ¦   «         dk    r|S |�r	t          |                     dd¦  «        ¦  «                             ¦   «         }t          |                     dd¦  «        ¦  «                             ¦   «         }d|v r|                     dd	¦  «        d	         }n.t          j        d
|¦  «        }	|	r|	                     d	¦  «        n|}|› d|› �}
|› d|› �}d|
v rd|
vsd|v rd|vrdS d|v r
d|vrd|vrdS d|v rd|vrdS d|v rd|vrdS d|v sd|v rd|vrdS dS )uL   TrÃ­ch xuáº¥t character_anchor tá»« shot_data hoáº·c tá»« kho prompt Banana.Úcharacter_anchorÚnoneÚcharacter_asset_ref)	Ú	thuy_kieuÚthuy_vanÚ	kim_trongÚ	vuong_ongÚvuong_baÚ
vuong_quanÚdam_tienÚ	tieu_dongÚquan_giaÚscene_titleÚ Úmotion_promptú - r   úshot\s*\d+:\s*(.*)ú õ
   thÃºy vÃ¢nõ   thÃºy kiá»�ur½   õ   kim trá»�ngõ   nÃ ng kiá»�ur¾   õ   vÆ°Æ¡ng quanrÁ   õ   vÆ°Æ¡ng Ã´ngr¿   Úthuy_kieu_maiden)	rD   r2   rg   rF   r·   Úsplitr‚   rƒ   r…   )r;   r€   ÚvalÚrefrµ   ÚbdataÚ	raw_titler)   Úshot_actionÚm_actionÚaction_combinedÚfull_combineds               r*   Úget_character_anchorrÛ   ì   s±  € àð Ð'¨9Ð4Ð4Ý�)Ð.Ô/Ñ0Ô0×6Ò6Ñ8Ô8ˆØð 	�3—9’9‘;”; &Ò(Ð(ØˆJð ð �Y—]’]Ð#8Ñ9Ô9ð Ý�)Ð1Ô2Ñ3Ô3×9Ò9Ñ;Ô;ˆð Dð 	ð 	ˆAØ�CˆxˆxØ���ð õ # 7Ñ+Ô+€EØð Ð# uÐ,Ð,Ý�%Ð*Ô+Ñ,Ô,×2Ò2Ñ4Ô4ˆØð 	�3—9’9‘;”; &Ò(Ð(ØˆJð ñ &Ý˜	Ÿš m°RÑ8Ô8Ñ9Ô9×?Ò?ÑAÔAˆ	Ý�Y—]’] ?°BÑ7Ô7Ñ8Ô8×>Ò>Ñ@Ô@ˆØ�IÐÐØ#Ÿ/š/¨%°Ñ3Ô3°AÔ6ˆKˆKå”yÐ!6¸	ÑBÔBˆHØ/7ÐF˜(Ÿ.š.¨Ñ+Ô+Ð+¸YˆKØ(Ð3Ð3¨6Ð3Ð3ˆØ$Ð/Ð/ vÐ/Ð/ˆØ˜OÐ+Ð+°ÀoÐ0UÐ0UÐ[gÐkxÐ[xÐ[xð  ~Lð  Tað  ~að  ~aØ�:Ø˜MÐ)Ð)¨nÀMÐ.QÐ.QÐVdÐlyÐVyÐVyØ�;Ø˜]Ð*Ð*¨~À]Ð/RÐ/RØ�<Ø˜]Ð*Ð*¨~À]Ð/RÐ/RØ�;Ø˜mÐ+Ð+¨~ÀÐ/NÐ/NÐTaÐivÐTvÐTvØ%Ð%àˆ2r,   Úprev_shot_idc                 ó’  — t          j        d| t           j        ¦  «        }|sdS |                     d¦  «        }t	          |                     d¦  «        ¦  «        }|dk    rdS |s|› d|dz
  d›�}t          j        d| t           j        ¦  «        }|r'|                     d¦  «                             ¦   «         nd}t          |¦  «        }|                     |i ¦  «        }	|�|n|                     | i ¦  «        }
|	                     d
d¦  «        }|
                     d
d¦  «        }|r.|r,dt          dt          fd„} ||¦  «         ||¦  «        k    rdS t          | |
¦  «        }t          ||	¦  «        }|dk    s|sdS |dk    s|sdS ||k    rdS dt          dt          fd„} ||	¦  «        } ||
¦  «        }|r
|r||k    rdS dS )uý  
    PhÃ¢n loáº¡i cÃº mÃ¡y: CINEMATIC_CUT hoáº·c CONTINUOUS_TAKE.
    - shot_num == 1: Báº¯t Ä‘áº§u cáº£nh má»›i -> CINEMATIC_CUT
    - current character_anchor != prev character_anchor: Ä�á»•i vai -> CINEMATIC_CUT
    - character_asset_ref khÃ¡c nhÃ³m nhÃ¢n váº­t: Ä�á»•i vai -> CINEMATIC_CUT
    - current character_anchor == 'none' hoáº·c rá»—ng: Cáº£nh váº­t/Ä‘áº¡o cá»¥ -> CINEMATIC_CUT
    - current character_anchor == prev character_anchor (vÃ  khÃ¡c 'none'): CÃ¹ng nhÃ¢n váº­t -> CONTINUOUS_TAKE
    ú^(ep\d+_scene\d+)_shot(\d+)$ÚCINEMATIC_CUTr   r   Ú_shotÚ02drw   Úep01Nr»   rÆ   rž   r.   c                 ól   — t          | ¦  «        j                             ¦   «         }dD ]
}||v r|c S Œ|S ©N)	r½   r¼   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   ©r   Ústemrg   )rž   Únrµ   s      r*   Ú_char_groupz'classify_shot_take.<locals>._char_group8  sI   € Ý�T‘
”
”×%Ò%Ñ'Ô'ˆAð Hð ð �Ø˜�6�6Ø�H�H�Hð àˆHr,   rº   rs   c                 ó4  — t          |                      dd¦  «        ¦  «                             ¦   «         }t          |                      dd¦  «        ¦  «                             ¦   «         }d|v r|                     dd¦  «        d         }n.t	          j        d|¦  «        }|r|                     d¦  «        n|}|› d|› �}|› d|› �}d|v rd	|vsd|v rd	|vrd
S d|v r
d	|vrd|vrdS d|v rd	|vrdS d|v rd	|vrdS d|v rd	|vrdS d	|v sd|v r
d|vrd|vrdS dS )NrÅ   rÆ   rÇ   rÈ   r   rÉ   rÊ   rË   rÌ   r½   rÍ   rÎ   r¾   rÏ   rÁ   rÐ   r¿   õ   vÆ°Æ¡ng bÃ rÀ   r¼   )rD   rF   rg   rÒ   r‚   rƒ   r…   )rs   Úraw_tÚprÚaction_tÚm_aÚcomboÚfulls          r*   Ú_detect_actor_from_textz3classify_shot_take.<locals>._detect_actor_from_textP  s™  € Ý�D—H’H˜]¨BÑ/Ô/Ñ0Ô0×6Ò6Ñ8Ô8ˆÝ�—’˜/¨2Ñ.Ô.Ñ/Ô/×5Ò5Ñ7Ô7ˆØ�Eˆ>ˆ>Ø—{’{ 5¨!Ñ,Ô,¨QÔ/ˆHˆHå”)Ð1°5Ñ9Ô9ˆCØ'*Ð5�s—y’y ‘|”|�|°ˆHØÐ"Ð"˜bÐ"Ð"ˆØˆˆ˜"ˆˆˆØ˜EÐ!Ð! n¸EÐ&AÐ&AÀ|ÐW[ÐG[ÐG[Ð`nÐvzÐ`zÐ`zØ�:Ø˜DÐ Ð  ^¸4Ð%?Ð%?ÀNÐZ^ÐD^ÐD^Ø�;Ø˜TÐ!Ð! n¸DÐ&@Ð&@Ø�<Ø˜TÐ!Ð! n¸DÐ&@Ð&@Ø�;Ø˜DÐ Ð  ^¸4Ð%?Ð%?Ø�:Ø˜dÐ"Ð" n¸Ð&<Ð&<À,ÐVZÐBZÐBZÐ_lÐtxÐ_xÐ_xØ�;Øˆrr,   ÚCONTINUOUS_TAKE)r‚   rƒ   r„   r…   rE   rg   rt   rF   rD   rÛ   r   )r;   rÜ   r€   r�   Úscene_prefixr�   rŠ   r‹   Úall_ep_shotsÚ	prev_dataÚ	curr_dataÚprev_refÚcurr_refrè   Úcurr_anchorÚprev_anchorrñ   Úprev_actor_textÚcurr_actor_texts                      r*   Úclassify_shot_takerý     s:  € õ 	Œ	Ð1°7½B¼MÑJÔJ€AØð Øˆà—7’7˜1‘:”:€LÝ�1—7’7˜1‘:”:‰Œ€HØ�1‚}€}Øˆàð @Ø&Ð?Ð?¨X¸©\Ð?Ð?Ð?ˆåŒ9�[ '­2¬=Ñ9Ô9€DØ%)Ð5ˆD�JŠJ�q‰MŒM×ÒÑ!Ô!Ð!¨v€EÝ  Ñ'Ô'€LØ× Ò  ¨rÑ2Ô2€IØ&Ð2�	�	¸×8HÒ8HÈÐRTÑ8UÔ8U€Ið �}Š}Ð2°BÑ7Ô7€HØ�}Š}Ð2°BÑ7Ô7€HØð 	#�Hð 	#ð	�cð 	¥cð 	ð 	ð 	ð 	ð ˆ;�xÑ Ô  K K°Ñ$9Ô$9Ò9Ð9Ø"�?å& w°	Ñ:Ô:€KÝ& |°YÑ?Ô?€Kð �fÒÐ KÐØˆà�fÒÐ KÐØˆà�kÒ!Ð!Øˆð¥dð ­sð ð ð ð ð0 .Ð-¨iÑ8Ô8€OØ-Ð-¨iÑ8Ô8€OØð ˜?ð ¨À/Ò/QÐ/QØˆàÐr,   Ú
image_pathc           
      ó
  — | sdS t          | ¦  «        }|                     ¦   «         r|                     ¦   «         st          | ¦  «        S 	 ddl}ddl}n1# t          $ r$ t          |                     ¦   «         ¦  «        cY S w xY w|                     t          |¦  «        ¦  «        }|€!t          |                     ¦   «         ¦  «        S |j	        dd…         \  }}||dz  k    r!t          |                     ¦   «         ¦  «        S t          d|› d|› d||z  d›d	|j        › �¦  «         t          |¦  «                             ¦   «         }i d
t          dz  dz  dz  “dt          dz  dz  dz  “dt          dz  dz  dz  “dt          dz  dz  dz  “dt          dz  dz  dz  “dt          dz  dz  dz  “dt          dz  dz  dz  “d t          d!z  d z  d"z  “d#t          d!z  d#z  d$z  “d%t          d&z  d%z  d'z  “d(t          d&z  d(z  d)z  “d*t          d&z  d*z  d+z  “d,t          d-z  d,z  d.z  “d/t          d-z  d/z  d0z  “d1t          d2z  d1z  d3z  “d4t          dz  d4z  d5z  “d6t          d2z  d6z  d7z  “}	|	                     ¦   «         D ]W\  }
}|
|v rN|                     ¦   «         r:t          d8|j        › �¦  «         t          |                     ¦   «         ¦  «        c S ŒX|rÇ	 t          ¦   «         }|                     |i ¦  «        }t#          ||¦  «                             ¦   «         }|	                     ¦   «         D ]Z\  }
}|
|v rQ|                     ¦   «         r=t          d9|
› d:|j        › �¦  «         t          |                     ¦   «         ¦  «        c S Œ[n# t$          $ r Y nw xY wt&          d;z  }|                     d<d<¬=¦  «         |j        › d>|pd?› d@�}||z  }|                     |dA|j        ¬B¦  «        }|                     |dCd¦  «        }|dDz                       |j        ¦  «        }dE|z  }t7          ||z  ¦  «        }|                     ||dFf|j        ¬B¦  «        }t;          ddG|z
  dz  ¦  «        }|dd…dt=          |dG|z
  ¦  «        …f         |dd…|||z   …f<   |                     t          |¦  «        ||j         dHg¦  «         t          dI|j        › �¦  «         t          |                     ¦   «         ¦  «        S )Ju¶  
    Hard Gate báº£o Ä‘áº£m 100% Start Frame gá»­i vÃ o Video Engine Ä‘áº¡t chuáº©n 16:9 Cinema Widescreen (w >= h * 1.33).
    Náº¿u áº£nh Ä‘áº§u vÃ o cÃ³ tá»· lá»‡ dá»�c hoáº·c sai chuáº©n:
    1. Æ¯u tiÃªn map sang tá»‡p 1280x720 Master Portrait (*_720p.png) cá»§a nhÃ¢n váº­t tÆ°Æ¡ng á»©ng.
    2. Náº¿u khÃ´ng cÃ³ tá»‡p master 16:9, tá»± Ä‘á»™ng táº¡o composite 16:9 (1280x720) vá»›i ná»�n má»� Gaussian blur 30% vÃ  lÆ°u cache.
    Nr   r   gHáz®Gõ?uL         [!] Cáº¢NH BÃ�O: PhÃ¡t hiá»‡n Start Frame khÃ´ng Ä‘áº¡t chuáº©n 16:9 (r{   z	, aspect=ú.2fz): rÀ   Ú02_Vuong_Family_And_FateÚvuong_ba_50yoúvuong_ba_50yo_720p.pngr¿   Úvuong_ong_55yoúvuong_ong_55yo_720p.pngrÁ   Úvuong_quan_16yoúvuong_quan_16yo_720p.pngr½   Ú01_Main_ProtagonistsÚthuy_van_maiden_16yoúthuy_van_maiden_16yo_720p.pngr¾   Úkim_trong_18yoúkim_trong_18yo_720p.pngr¼   Úthuy_kieu_maiden_16yoúthuy_kieu_maiden_16yo_720p.pngrÂ   údam_tien_720p.pngÚsai_nhaÚ05_Imperial_Court_And_Officialsúsai_nha_720p.pngÚthang_ban_toúthang_ban_to_720p.pngÚma_giam_sinhÚ04_Brokers_And_Brothelsúma_giam_sinh_720p.pngÚtu_baútu_ba_720p.pngÚso_khanhúso_khanh_720p.pngÚ	thuc_sinhÚ03_Thuc_Sinh_And_Hoan_Thuzthuc_sinh_720p.pngÚhoan_thuzhoan_thu_720p.pngÚtu_haiÚ06_Rebellion_And_Heroztu_hai_720p.pngÚ
giac_duyenzgiac_duyen_720p.pngÚho_ton_hienzho_ton_hien_720p.pnguC         âœ“ Ä�Ã£ tá»± Ä‘á»™ng thay tháº¿ báº±ng Master 16:9 chuáº©n: u?         âœ“ Ä�Ã£ thay tháº¿ báº±ng Master 16:9 cá»§a nhÃ¢n váº­t rA   Ú_16x9_cinema_cacheTr=   r   rU   z	_16x9.jpg)é   éÐ  )Úinterpolation)é3   r'  gffffffæ?g     €†@r%  r$  é_   u9         âœ“ Ä�Ã£ táº¡o 16:9 Cinema Composite thÃ nh cÃ´ng: )!r   rh   r›   rD   rB   ÚnumpyÚImportErrorÚresolveÚimreadÚshaperQ   rž   rg   ÚCHARACTERS_DIRr‡   rt   rF   rÛ   rP   rM   rN   ræ   ÚresizeÚINTER_CUBICÚGaussianBlurÚastypeÚuint8rE   ÚINTER_LANCZOS4rK   ÚminrO   ÚIMWRITE_JPEG_QUALITY)rþ   r;   r-   rB   ÚnpÚimgÚhÚwÚp_lowerÚchar_maprµ   Úmaster_pathrŒ   r€   ÚanchorÚ	cache_dirÚout_nameÚout_pathÚbgÚscaleÚnew_wÚfgÚx_offsets                          r*   Úensure_16x9_start_framerG  p  s)  € ð ð ØˆtÝˆZÑÔ€AØ�8Š8‰:Œ:ð ˜QŸYšY™[œ[ð Ý�:‰ŒÐð Øˆ
ˆ
ˆ
ØÐÐÐÐøÝð  ð  ð  Ý�1—9’9‘;”;ÑÔÐÐÐð øøøð �*Š*•S˜‘V”VÑ
Ô
€CØ
€{Ý�1—9’9‘;”;ÑÔÐàŒ9�R�a�RŒ=�D€A€qØˆA�‰H‚}€}å�1—9’9‘;”;ÑÔÐõ 
Ð
}ÐYZÐ
}Ð
}Ð]^Ð
}Ð
}ÐijÐklÑilÐ
}Ð
}Ð
}ÐuvÔu{Ð
}Ð
}Ñ~Ô~Ð~õ �!‰fŒf�lŠl‰nŒn€GðØ•NÐ%?Ñ?À/ÑQÐTlÑlðà•^Ð&@Ñ@ÐCSÑSÐVoÑoðð 	•nÐ'AÑAÐDUÑUÐXrÑrðð 	•NÐ%;Ñ;Ð>TÑTÐWvÑvð	ð
 	•^Ð&<Ñ<Ð?OÑOÐRkÑkðð 	•^Ð&<Ñ<Ð?VÑVÐYyÑyðð 	•NÐ%?Ñ?À*ÑLÐObÑbðð 	•>Ð$EÑEÈ	ÑQÐTfÑfðð 	�Ð)JÑJÈ^Ñ[Ð^uÑuðð 	�Ð)BÑBÀ^ÑSÐVmÑmðð 	•Ð";Ñ;¸gÑEÐHXÑXðð 	•NÐ%>Ñ>ÀÑKÐNaÑaðð 	•^Ð&AÑAÀKÑOÐRfÑfðð 	•NÐ%@Ñ@À:ÑMÐPcÑcðð 	•.Ð#:Ñ:¸XÑEÐHYÑYðð  	•nÐ'AÑAÀLÑPÐShÑhð!ð" 	•~Ð(?Ñ?À-ÑOÐRhÑhð#€Hð* #Ÿ.š.Ñ*Ô*ð .ð .‰ˆˆ;Ø�ˆ<ˆ<˜K×.Ò.Ñ0Ô0ˆ<ÝÐjÐXcÔXhÐjÐjÑkÔkÐkÝ�{×*Ò*Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-øð ð 
ð		Ý!‘O”OˆEØŸ	š	 '¨2Ñ.Ô.ˆIÝ)¨'°9Ñ=Ô=×CÒCÑEÔEˆFØ"*§.¢.Ñ"2Ô"2ð 6ð 6‘��;Ø˜�;�; ;×#5Ò#5Ñ#7Ô#7�;ÝÐsÐ\]ÐsÐsÐalÔaqÐsÐsÑtÔtÐtÝ˜{×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ð5Ð5øð6øõ ð 	ð 	ð 	ØˆDð	øøøõ Ð 4Ñ4€IØ‡O‚O˜D¨4€OÑ0Ô0Ð0Ø”&Ð8Ð8˜7Ð- gÐ8Ð8Ð8€HØ˜8Ñ#€Hð 
�Š�C˜°C´OˆÑ	DÔ	D€BØ	×	Ò	˜"˜h¨Ñ	*Ô	*€BØ
ˆs‰(×	Ò	˜2œ8Ñ	$Ô	$€Bð �A‰I€EÝ��E‘	‰NŒN€EØ	�Š�C˜% ˜°SÔ5GˆÑ	HÔ	H€BÝ�1�t˜e‘|¨Ñ)Ñ*Ô*€HØ')¨!¨!¨!Ð-I­c°%¸À¹Ñ.IÔ.IÐ-IÐ*IÔ'J€B€q€q€qˆ(�8˜eÑ#Ð
#Ð#Ñ$à‡K‚K•�H‘”˜r CÔ$<¸bÐ#AÑBÔBÐBÝ	Ð
UÀhÄmÐ
UÐ
UÑVÔVÐVÝˆx×ÒÑ!Ô!Ñ"Ô"Ð"s+   ÁA Á+BÂBËB3N ÎN Î
N!Î N!ÚportraitÚanchor_or_nameÚ	view_typec           
      ób  — | r| dk    rdS |                       ¦   «                              ¦   «         }i dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddœ¥}|                     ¦   «         D ]]\  }}||v rTt          t                               d|› d |› d!�¦  «        ¦  «        }|r$|d"                              ¦   «         r
|d"         c S Œ^t          t                               d#|› d$|› d!�¦  «        ¦  «        }|r"|d"                              ¦   «         r|d"         S dS )%u¡   
    TÃ¬m gÃ³c nhÃ¬n chuáº©n (portrait, front, profile, back) tá»« kho Character Turnaround Sheet
    trong 04_Assets/characters/<group>/<character>/views/.
    rº   NrÃ   Útieu_dong_kim_trongrÄ   Úquan_gia_kim_trongr¾   r  r¼   r  r½   r	  rÁ   r  r¿   r  rÀ   r  rÂ   r  r  r  r  r  r  r  r  r!  r"  )r!  r"  ú**/z	/views/*_z.pngr   ú**/*z
*/views/*_)rg   r2   r‡   r¥   r.  rš   rh   )rI  rJ  Úcleanr<  r|   Úfolder_nameÚcandss          r*   Úfind_character_turnaround_viewrS  Ð  s  € ð
 ð ˜^¨vÒ5Ð5ØˆtØ× Ò Ñ"Ô"×(Ò(Ñ*Ô*€EðØÐ*ðàÐ(ðð 	Ð%ðð 	Ð,ð	ð
 	Ð*ðð 	Ð'ðð 	Ð%ðð 	�Oðð 	�Jðð 	�9ðð 	˜ðð 	˜ðð 	�ðð 	�Jðð 	�[ðð  	�Jð!ð" 	�(ð#ð$ #Ø$ð'ð ð €Hð. %ŸNšNÑ,Ô,ð  ð  Ñˆˆ[Ø�%ˆ<ˆ<Ý�×,Ò,Ð-X°;Ð-XÐ-XÈÐ-XÐ-XÐ-XÑYÔYÑZÔZˆEØð  ˜˜qœŸšÑ*Ô*ð  Ø˜Q”x���øõ •×$Ò$Ð%L¨EÐ%LÐ%L¸YÐ%LÐ%LÐ%LÑMÔMÑNÔN€EØð ��q”—’Ñ"Ô"ð Ø�QŒxˆàˆ4r,   r>  c                 óŽ  — | r| dk    rdS |                       ¦   «                              ¦   «         }d|v r&t          dz  dz  dz  }|                     ¦   «         r|S d|v r&t          dz  dz  dz  }|                     ¦   «         r|S d	|v r2d
|vr.d|vr*d|vr&t          dz  dz  dz  }|                     ¦   «         r|S d|v r*d|vr&t          dz  dz  dz  }|                     ¦   «         r|S d|v r*d|vr&t          dz  dz  dz  }|                     ¦   «         r|S d|v r.d|vr*d
|vr&t          dz  dz  dz  }|                     ¦   «         r|S d|v r&t          dz  dz  dz  }|                     ¦   «         r|S d|v r*d
|vr&t          dz  dz  dz  }|                     ¦   «         r|S d
|v r*d	|vr&t          dz  dz  dz  }|                     ¦   «         r|S d|v r&t          d z  dz  d!z  }|                     ¦   «         r|S d"|v r&t          d z  d"z  d#z  }|                     ¦   «         r|S d$|v r&t          d%z  d$z  d&z  }|                     ¦   «         r|S d'|v r&t          d%z  d'z  d(z  }|                     ¦   «         r|S d)|v r&t          d%z  d)z  d*z  }|                     ¦   «         r|S t                               d+|› d,�¦  «        D ]}|c S dS )-uí   
    Ã�nh xáº¡ character_anchor thÃ nh Ä‘Æ°á»�ng dáº«n áº£nh chÃ¢n dung chuáº©n trong 04_Assets/characters/<group>/<character>/.
    Æ¯u tiÃªn tuyá»‡t Ä‘á»‘i tá»‡p Master 16:9 (*_720p.png) Ä‘á»ƒ báº£o toÃ n Visual DNA Ä‘iá»‡n áº£nh.
    rº   NrÃ   r  rL  ztieu_dong_kim_trong_720p.pngrM  zquan_gia_kim_trong_720p.pngr¾   r¼   rÄ   r  r  r  r¿   r  r  r  rÀ   r  r  rÁ   r  r  rÂ   r  r½   r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  rO  z	*720p.png)rg   r2   r.  rh   rš   )r>  rJ  rP  Úcandr-   s        r*   Ú&resolve_character_portrait_from_anchorrV  þ  sÉ  € ð
 ð �V˜vÒ%Ð%Øˆtà�LŠL‰NŒN× Ò Ñ"Ô"€Eð �eÐÐÝÐ :Ñ:Ð=RÑRÐUsÑsˆØ�;Š;‰=Œ=ð 	ØˆKà˜uÐ$Ð$ÝÐ :Ñ:Ð=QÑQÐTqÑqˆØ�;Š;‰=Œ=ð 	ØˆKð �eÐÐ °5Ð 8Ð 8¸[ÐPUÐ=UÐ=UÐZdÐlqÐZqÐZqÝÐ 6Ñ6Ð9IÑIÐLeÑeˆØ�;Š;‰=Œ=ð 	ØˆKà�eÐÐ 	°Ð 6Ð 6ÝÐ :Ñ:Ð=MÑMÐPiÑiˆØ�;Š;‰=Œ=ð 	ØˆKà�UÐÐ˜y°Ð5Ð5ÝÐ :Ñ:¸_ÑLÐOgÑgˆØ�;Š;‰=Œ=ð 	ØˆKà�uÐÐ °%Ð!7Ð!7¸KÈuÐ<TÐ<TÝÐ :Ñ:Ð=NÑNÐQkÑkˆØ�;Š;‰=Œ=ð 	ØˆKà�UÐÐÝÐ :Ñ:¸ZÑGÐJ]Ñ]ˆØ�;Š;‰=Œ=ð 	ØˆKà�UÐÐ˜{°%Ð7Ð7ÝÐ 6Ñ6Ð9OÑOÐRqÑqˆØ�;Š;‰=Œ=ð 	ØˆKà�eÐÐ °5Ð 8Ð 8ÝÐ 6Ñ6Ð9PÑPÐSsÑsˆØ�;Š;‰=Œ=ð 	ØˆKà�EÐÐÝÐ AÑAÀIÑMÐPbÑbˆØ�;Š;‰=Œ=ð 	ØˆKà˜ÐÐÝÐ AÑAÀNÑRÐUlÑlˆØ�;Š;‰=Œ=ð 	ØˆKà˜ÐÐÝÐ 9Ñ9¸NÑJÐMdÑdˆØ�;Š;‰=Œ=ð 	ØˆKà�%ÐÐÝÐ 9Ñ9¸GÑCÐFVÑVˆØ�;Š;‰=Œ=ð 	ØˆKà�UÐÐÝÐ 9Ñ9¸JÑFÐI\Ñ\ˆØ�;Š;‰=Œ=ð 	ØˆKõ × Ò Ð!8¨Ð!8Ð!8Ð!8Ñ9Ô9ð ð ˆØˆˆˆàˆ4r,   rß   Ú	take_typeÚresolved_pathc                 ó  ‡‡‡— |€i }t          |                     dd¦  «        ¦  «                             ¦   «         }|dk    rdS |dk    r'|r%dt          |¦  «                             ¦   «         v rdS t          | |¦  «        }t          |                     d	d¦  «        ¦  «                             ¦   «         Št          |                     d
d¦  «        ¦  «                             ¦   «         }t          |                     dd¦  «        ¦  «                             ¦   «         Š| › d‰› d|› d‰› �Št	          ˆfd„dD ¦   «         ¦  «        }d|v p|ot	          ˆfd„dD ¦   «         ¦  «         }| s|dk    ot	          ˆfd„dD ¦   «         ¦  «         }	g d¢}
t	          ˆˆfd„|
D ¦   «         ¦  «        ot	          ˆfd„dD ¦   «         ¦  «         }|	s|s|rdS |                     d¦  «        }|s t	          ˆfd„dD ¦   «         ¦  «        rd}nd}d|fS ) uü  
    PhÃ¢n loáº¡i chiáº¿n lÆ°á»£c Start Frame theo chuáº©n ma tráº­n KieuStory:
    1. TEXT_TO_VIDEO: Shot má»Ÿ mÃ n khÃ´ng cÃ³ frame tham chiáº¿u hoáº·c prompt Text-to-Video
    2. HEAD_TAIL_PREV_FRAME: Continuous Take cÃ¹ng nhÃ¢n váº­t
    3. CHARACTER_TURNAROUND_VIEW: Cáº­n cáº£nh/MCU/ChÃ¢n dung/Ä�á»•i vai Ä‘Æ¡n nhÃ¢n váº­t
    4. GEMINI_BANANA_KEYFRAME: Cáº£nh toÃ n, Ä‘áº¡i cáº£nh, cáº£nh nhiá»�u nhÃ¢n váº­t, phong cáº£nh/Ä‘áº¡o cá»¥
    
    Tráº£ vá»�: (strategy_name, view_type_if_turnaround)
    NÚmoderÆ   ztext-to-video)ÚTEXT_TO_VIDEONrò   Úclean_frame_239)ÚHEAD_TAIL_PREV_FRAMENrÅ   rÇ   Úcamera_motionrÊ   c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   ©r~   ÚkwÚtitles     €r*   ú	<genexpr>z0classify_start_frame_strategy.<locals>.<genexpr>y  s?   øè è € ð  dð  d b�b˜E�kð  dð  dð  dð  dð  dð  dr,   )ztwo-shotu   trung cáº£nh Ä‘Ã´iu   hai vá»£ chá»“ngu   hai chá»‹ emu   Ä‘Ã´i lá»©au
   song hÃ nhu   Ä‘oÃ n ngÆ°á»�iú+c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   r`  s     €r*   rc  z0classify_start_frame_strategy.<locals>.<genexpr>z  sH   øè è € ð  @]ð  @]ÐPRÀÀeÀð  @]ð  @]ð  @]ð  @]ð  @]ð  @]r,   )õ   cáº­n cáº£nhúclose-upÚmcuÚcuÚentranceõ   bÆ°á»›c vÃ orº   c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   )r~   rµ   Úcombineds     €r*   rc  z0classify_start_frame_strategy.<locals>.<genexpr>{  sH   øè è € ð  FKð  FKÐXYÀaÈ8Àmð  FKð  FKð  FKð  FKð  FKð  FKr,   )rÌ   rÍ   rË   rÏ   rÐ   rê   u   Ä‘áº¡m tiÃªn)u   toÃ n cáº£nhz	wide shotzextreme wideÚaerialu   Ä‘áº¡i cáº£nhu   kinh thÃ nhu   báº§u trá»�iu   dÃ²ng sÃ´ngu   sÃ´ng biáº¿cu   cáº£nh rá»™ngu   khung cáº£nhu   phá»‘ thá»‹u   quÃ¢n lÃ­nhu   hÃ nh Ä‘á»™ngc              3   ó(   •K  — | ]}|‰v p|‰v V — Œd S r7   r&   )r~   ra  Úcamerarb  s     €€r*   rc  z0classify_start_frame_strategy.<locals>.<genexpr>~  s0   øè è € ÐAÐA°"�"˜�+Ð-  v ÐAÐAÐAÐAÐAÐAr,   c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   r`  s     €r*   rc  z0classify_start_frame_strategy.<locals>.<genexpr>~  sI   øè è € ð  NEð  NEÐ^`ÈbÐTYÈkð  NEð  NEð  NEð  NEð  NEð  NEr,   )rf  rg  rh  ri  õ
   chÃ¢n dungrH  rj  rk  )ÚGEMINI_BANANA_KEYFRAMENÚturnaround_viewc              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   )r~   ra  rm  s     €r*   rc  z0classify_start_frame_strategy.<locals>.<genexpr>†  s?   øè è € ð  Xð  X "ˆr�Xˆ~ð  Xð  Xð  Xð  Xð  Xð  Xr,   ©rk  rj  z	full bodyu   Ä‘á»©ngu   toÃ n thÃ¢nu
   bÃ¡i chÃ ou	   bÃ¡i táº¡u   xuáº¥t hÃ nhÚfrontrH  ÚCHARACTER_TURNAROUND_VIEW)rD   rF   rg   rÛ   Úany)r;   r€   rW  rX  rZ  r>  r)   Úis_two_shotÚis_multi_charÚis_scenery_or_propÚwide_kwsÚis_wideÚdesired_viewrp  rm  rb  s                @@@r*   Úclassify_start_frame_strategyr€  X  sX  øøø€ ð ÐØˆ	åˆy�}Š}˜V RÑ(Ô(Ñ)Ô)×/Ò/Ñ1Ô1€DØˆÒÐØ$Ð$àÐ%Ò%Ð%¨-Ð%Ð<MÕQTÐUbÑQcÔQc×QiÒQiÑQkÔQkÐ<kÐ<kØ+Ð+õ " '¨9Ñ5Ô5€FÝ�	—’˜m¨RÑ0Ô0Ñ1Ô1×7Ò7Ñ9Ô9€EÝ�—’˜°Ñ3Ô3Ñ4Ô4×:Ò:Ñ<Ô<€FÝ�—’˜°Ñ3Ô3Ñ4Ô4×:Ò:Ñ<Ô<€FØÐ5Ð5˜EÐ5Ð5 FÐ5Ð5¨VÐ5Ð5€Hõ ð  dð  dð  dð  dð  -cð  dñ  dô  dñ  dô  d€KØ˜F�]ð  ^¨ð  )]½Cð  @]ð  @]ð  @]ð  @]ð  W\ð  @]ñ  @]ô  @]ñ  =]ô  =]ð  9]€MØ$˜*Ð8¨°&Ò(8ð  KÅ#ð  FKð  FKð  FKð  FKð  ^Jð  FKñ  FKô  FKñ  CKô  CKð  ?KÐð fð  fð  f€HÝÐAÐAÐAÐAÐA¸ÐAÑAÔAÑAÔAð  EÍ#ð  NEð  NEð  NEð  NEð  eDð  NEñ  NEô  NEñ  KEô  KEð  GE€Gàð .˜]ð .¨gð .Ø-Ð-ð —=’=Ð!2Ñ3Ô3€LØð &Ýð  Xð  Xð  Xð  Xð  )Wð  Xñ  Xô  Xñ  Xô  Xð 	&Ø"ˆLˆLà%ˆLà&¨Ð4Ð4r,   Úexplicit_frameÚreturn_classificationÚreturn_strategyc                 óf)  ‡I— |rmt           j                             |¦  «        rNt          t	          |¦  «                             ¦   «         ¦  «        }t          || ¬¦  «        }|r|ddfS |r|dfn|S t          | |¬¦  «        }t          j	        d| t          j
        ¦  «        }|r|                     d¦  «        nd}|r"t          |                     d¦  «        ¦  «        nd}	t          | z  d	z  }
|
                     ¦   «         st          | z  d
z  }
|
                     ¦   «         st          | › d�z  }
|
                     ¦   «         st          | › d�z  }
|
                     ¦   «         rc|dk    s|	dk    rWt          |
                     ¦   «         ¦  «        }t          || ¬¦  «        }|rt          | |||¬¦  «        \  }}|||fS |r||fn|S |dk    �r¢|�rŸ|	dk    �r˜|› d|	dz
  d›�}t          |¦  «        }|�r{t          j	        d| t          j
        ¦  «        }|r'|                     d¦  «                             ¦   «         nd}t#          |¦  «        }|                     |i ¦  «        }|�|n|                     | i ¦  «        }|                     dd¦  «        }|                     dd¦  «        }dt          dt          fd„}d}|r|r ||¦  «         ||¦  «        k    rd}t'          | |¦  «        }t'          ||¦  «        }|r|r|dk    r|dk    r||k    rd}|sWt          |                     ¦   «         ¦  «        }t          || ¬¦  «        }|rt          | |||¬¦  «        \  }}|||fS |r||fn|S d}t'          | |¦  «        }|r5t          |                     dd¦  «        ¦  «                             ¦   «         nd}|r5t          |                     dd¦  «        ¦  «                             ¦   «         nd}|r|                     d¦  «        nd}|sY|rW|› d|› �                     ¦   «         ŠIt)          ˆIfd„d D ¦   «         ¦  «        rd!}n t)          ˆIfd"„d#D ¦   «         ¦  «        rd$}nd$}d%|v r|                     d%d¦  «        d         }n.t          j	        d&|¦  «        }|r|                     d¦  «        n|}|› d|› �} |› d|› �}!d'|!v od(|!vod)|!v}"d(|!v sd)|!v od'|!v}#d*|!v od(|!v}$d+|!v od(|!vod,|!vod-|!v}%d,|!v sd-|!v sd.|!v od(|!vod+|!v}&d/| v rd(| vpd/|!v od(|!v}'t-          |o|dk    ¦  «        }(|rd0|v nd})|( p|)}*d1|v rd2|vrd3|vrd4|vp|*o|"}+d2|v rd1|vp|*o|#},d5|v rd2|vrd6|vp|*o|$}-d7|v rd2|vrd6|vp|*o|%}.d8|v rd2|vrd6|vp|*o|&}/d9|v rd2|vp|*o|'}0d}1|rã|                     d¦  «        s|                     d:¦  «        dk    rµt          |                     dd¦  «        ¦  «        p|}2t/          |2¦  «        }3|3r6|3                     ¦   «         r"t          |3                     ¦   «         ¦  «        }1nIt1          |2|pd$¦  «        }4|4r5|4                     ¦   «         r!t          |4                     ¦   «         ¦  «        }1|                     d¦  «        }5|1�sŸ|5�rœt          |5¦  «                             ¦   «         }6|+rd2|6v rd;}5n,|,rd1|6v rd<}5n#|-rd2|6v rd=}5n|.rd2|6v rd>}5n|/rd2|6v rd?}5n|0rd2|6v rd@}5t2          |5z  }7|7                     ¦   «         r#t          |7                     ¦   «         ¦  «        }1�nt	          |5¦  «        j        }8t7          t8                               dA|8› �¦  «        ¦  «        }9|9r(t          |9dB                              ¦   «         ¦  «        }1n�d>d?d=d=dCdCdDdEœ}:|8|:v rFt2          |:|8         z  };|;                     ¦   «         r!t          |;                     ¦   «         ¦  «        }1nI|5|:v rEt2          |:|5         z  };|;                     ¦   «         r!t          |;                     ¦   «         ¦  «        }1|1sJ|rHt/          ||¬F¦  «        }<|<r5|<                     ¦   «         r!t          |<                     ¦   «         ¦  «        }1|1�s|                     dGd¦  «        }=|=rû|dk    rit          j	        dH|=t          j
        ¦  «        }>|>rG|>                     d¦  «        }?t          |?¦  «        }@|@r!t          |@                     ¦   «         ¦  «        }1t2          |=z  }A|A                     ¦   «         rn|A                     ¦   «         rZ|Aj                             ¦   «         }B|+rd2|Bv p|,od1|Bv p|-od2|Bv p|.od2|Bv p|0od2|Bv }C|Cs!t          |A                     ¦   «         ¦  «        }1|1�rû|1                     ¦   «         }D|+rPd2|Dv rLt/          d1|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1�n•|,rPd1|Dv rLt/          d2|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1�nC|-rOd2|Dv rKt/          d5|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1nò|.rOd2|Dv rKt/          d7|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1n¡|/rOd2|Dv rKt/          d8|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1nP|0rNd2|Dv rJt/          d9|¬F¦  «        }E|Er5|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        nd}1|1�sM|+rJt/          d1|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�n|,rJt/          d2|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�nµ|-rJt/          d5|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�ni|.rJt/          d7|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�n|/rJt/          d8|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�nÑ|0rJt/          d9|¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1�n…dI|v s-dJt          |5¦  «                             ¦   «         v s
|rIdK|v rE|	dLv rAt          dMz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�n|ršdN|v sdO|v r’t          dP|	› �z  d	z  t          dP|	› �z  dQz  t          dP|	› �z  dRz  t2          dSz  dTz  dP|	› dU�z  t          dVz  dP|	› �z  dQz  g}G|GD ]9}E|E                     ¦   «         r#t          |E                     ¦   «         ¦  «        }1 nŒ:�nw|rndW|v rjt          | z  d	z  t          | z  dXz  t2          dSz  dTz  | › dU�z  g}G|GD ]9}E|E                     ¦   «         r#t          |E                     ¦   «         ¦  «        }1 nŒ:�n| dYk    s#dZt          |5¦  «                             ¦   «         v rGt2          dSz  dTz  d[z  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�n—| d\k    s#d]t          |5¦  «                             ¦   «         v rGt2          dSz  dTz  d^z  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�n'| d_k    s#d`t          |5¦  «                             ¦   «         v rGt2          dSz  dTz  daz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�n·| dbk    s#dct          |5¦  «                             ¦   «         v rGt2          dSz  dTz  ddz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�nG| dek    s#dft          |5¦  «                             ¦   «         v rGt2          dSz  dTz  dgz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�n×| dhv s#dit          |5¦  «                             ¦   «         v rGt2          dSz  dTz  djz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1�ni| dkv sFdlt          |5¦  «                             ¦   «         v s#dmt          |5¦  «                             ¦   «         v rFt2          dSz  dTz  dnz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1nÙ| dov s#dpt          |5¦  «                             ¦   «         v rFt2          dSz  dTz  dqz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1nl| drv s#dst          |5¦  «                             ¦   «         v rEt2          dSz  dTz  dqz  }E|E                     ¦   «         r!t          |E                     ¦   «         ¦  «        }1|dk    �r�|1�r�|�rŠ|	dk    �rƒ|› d|	dz
  d›�}t          |z  }Ht          |H¦  «                             ¦   «         |1                     ¦   «         v �r8d}1|rHt/          ||¬F¦  «        }F|Fr5|F                     ¦   «         r!t          |F                     ¦   «         ¦  «        }1|1sz|rxdN|v sdO|v rpt          dP|	› �z  d	z  t          dP|	› �z  dQz  t2          dSz  dTz  dP|	› dU�z  g}G|GD ]9}E|E                     ¦   «         r#t          |E                     ¦   «         ¦  «        }1 nŒ:np|1sn|rldW|v rht          | z  d	z  t          | z  dXz  t2          dSz  dTz  | › dU�z  g}G|GD ]9}E|E                     ¦   «         r#t          |E                     ¦   «         ¦  «        }1 nŒ:|1rt          |1| ¬¦  «        }1|rt          | |||1¬¦  «        \  }}|1||fS |r|1|fS |1S )tu  
    XÃ¡c Ä‘á»‹nh tá»± Ä‘á»™ng Start Frame cho má»™t Shot vá»›i cÆ¡ cháº¿ phÃ¢n loáº¡i CÃº MÃ¡y & Chiáº¿n LÆ°á»£c Start Frame:
    - Cinematic Cut (shot_num == 1 hoáº·c Ä‘á»•i nhÃ¢n váº­t):
      Náº¡p Start Frame Ä‘á»™c láº­p tá»« Character Turnaround Sheet hoáº·c Gemini Banana Keyframe. TUYá»†T Ä�á»�I KHÃ”NG dÃ¹ng prev_tail.
    - Continuous Take (cÃ¹ng nhÃ¢n váº­t ná»‘i tiáº¿p):
      Náº¡p Tail Frame cá»§a shot trÆ°á»›c (clean_frame_239.jpg).
    - return_strategy: Tráº£ vá»� (resolved_path, take_type, start_frame_strategy)
    )r;   rß   rx  ©r€   rÞ   r   Nr   zstart_frame_720p.pngzstart_frame.pngz
_start.jpgz
_start.png)rW  rX  rò   rà   rá   rw   râ   r»   rÆ   rÔ   r.   c                 ól   — t          | ¦  «        j                             ¦   «         }dD ]
}||v r|c S Œ|S rä   rå   )rÔ   rç   rµ   s      r*   Ú
_get_groupz'resolve_start_frame.<locals>._get_groupÉ  sI   € Ý˜‘I”I”N×(Ò(Ñ*Ô*�ð Lð !ð !�AØ˜A�v�vØ ˜˜˜ð à�r,   FTrº   rÅ   rÇ   rt  rÊ   c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   ©r~   ra  Ú
combo_texts     €r*   rc  z&resolve_start_frame.<locals>.<genexpr>í  s@   øè è € ð  Zð  Z Bˆr�ZÐð  Zð  Zð  Zð  Zð  Zð  Zr,   rv  rw  c              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r&   r‰  s     €r*   rc  z&resolve_start_frame.<locals>.<genexpr>ï  s@   øè è € ð  pð  p b��zÐ!ð  pð  pð  pð  pð  pð  pr,   )
rf  rg  rh  ri  rr  rH  u
   Ã¡nh máº¯tu   gÆ°Æ¡ng máº·tu   khuÃ´n máº·tu   ná»¥ cÆ°á»�irH  rÈ   rÉ   rÍ   rÌ   rÎ   rÏ   rÐ   rê   u   máº«u thÃ¢nu   bÃ  vÆ°Æ¡ngrË   rd  r¾   r¼   rÃ   rÄ   rÁ   r  r¿   rÀ   r½   Ústart_frame_strategyzP04_Assets/characters/01_Main_Protagonists/kim_trong_18yo/kim_trong_18yo_720p.pngz^04_Assets/characters/01_Main_Protagonists/thuy_kieu_maiden_16yo/thuy_kieu_maiden_16yo_720p.pngzV04_Assets/characters/02_Vuong_Family_And_Fate/vuong_quan_16yo/vuong_quan_16yo_720p.pngzT04_Assets/characters/02_Vuong_Family_And_Fate/vuong_ong_55yo/vuong_ong_55yo_720p.pngzR04_Assets/characters/02_Vuong_Family_And_Fate/vuong_ba_50yo/vuong_ba_50yo_720p.pngz\04_Assets/characters/01_Main_Protagonists/thuy_van_maiden_16yo/thuy_van_maiden_16yo_720p.pngrN  r   zM04_Assets/characters/05_Imperial_Court_And_Officials/sai_nha/sai_nha_720p.pngz404_Assets/keyframes/crowd_qingming_festival_720p.png)z!vuong_ong_patriarch_55yo_720p.pngz vuong_ba_matriarch_50yo_720p.pngzvuong_quan_young_14yo_720p.pngzvuong_quan_14yo_720p.pngz)imperial_guards_brutal_officials_720p.pngzsai_nha_feudal_guards_720p.pngú crowd_qingming_festival_720p.png)rJ  Úreference_start_framez(ep\d+_scene\d+_shot\d+)Úquan_chung_thanh_minhÚcrowd_qingmingÚscene04)r   r   é   é   é   r�  Úscene00ÚprologueÚprologue_shotzframe_000.jpgzclean_frame_000.jpgr   Úbackgroundsz	_720p.pngÚprologue_shot4Úscene01r@   Úep01_scene05_shot07Úsuoi_ngoc_rang_lieuzsuoi_ngoc_rang_lieu_720p.pngÚep01_scene05_shot10Úmo_dam_tienzmo_dam_tien_co_ua_720p.pngÚep01_scene06_shot01Úhoang_hon_rang_lieuzhoang_hon_rang_lieu_720p.pngÚep01_scene06_shot02Úduong_mon_hoang_honzduong_mon_hoang_hon_720p.pngÚep01_scene08_shot01Úbuc_tuong_hoaz buc_tuong_hoa_vuon_thuy_720p.png)Úep01_scene11_shot01Úep01_scene11_shot02Úgoc_lieu_vuon_thuyzvuon_thuy_spring_720p.png)Úep01_scene12_shot01Úep01_scene12_shot02Úcong_chinh_gia_trangÚstormz vuong_family_gate_storm_720p.png)Úep01_scene13_shot01Úep01_scene13_shot02Úchiaroscuroz%vuong_chiaroscuro_livingroom_720p.png)Úep01_scene15_shot01Úep01_scene15_shot02Úgian_tho)ÚosÚpathrh   rD   r   r+  rG  rý   r‚   rƒ   r„   r…   rE   rM   r€  r§   rg   rt   rF   rÛ   ry  rÒ   ÚboolrV  rS  ÚBASE_DIRrž   r¥   r.  rš   r›   )Jr;   r€   r�  r‚  rƒ  ÚresrW  r�   ró   r�   Údedicated_startÚstratÚvtyperÜ   Ú	prev_tailrŠ   r‹   rô   rõ   rö   r÷   rø   r‡  Úsafeguard_violatedÚcurr_anchor_checkÚprev_anchor_checkrù   rÖ   r)   r  r×   rØ   rÙ   rÚ   Útitle_kt_onlyÚtitle_tk_onlyÚtitle_vq_onlyÚtitle_vo_onlyÚtitle_vb_onlyÚtitle_tv_onlyÚ
has_anchorÚis_compound_anchorÚallow_title_overrideÚis_kim_trongÚis_thuy_kieuÚis_vuong_quanÚis_vuong_ongÚis_vuong_baÚis_thuy_vanrX  Útarget_charÚportrait_masterÚta_viewÚ	asset_refÚ	ref_lowerÚ
asset_pathÚfnameÚ
char_candsÚ	alias_mapÚ
alias_pathrH  Úref_sfÚm_refÚref_shot_idÚref_tailÚref_pathÚref_nameÚ	violationÚ	res_lowerrU  r-   Ú	cand_listÚprev_tail_dirrŠ  sJ                                                                            @r*   Úresolve_start_framerá  Ž  sh  ø€ ð ð H�"œ'Ÿ.š.¨Ñ8Ô8ð HÝ•$�~Ñ&Ô&×.Ò.Ñ0Ô0Ñ1Ô1ˆÝ% c°7Ð;Ñ;Ô;ˆØð 	GØ˜Ð*EÐFÐFØ)>ÐG��_Ð%Ð%ÀCÐGå" 7°iÐ@Ñ@Ô@€Iå
Œ	Ð1°7½B¼MÑJÔJ€AØ!"Ð,�1—7’7˜1‘:”:�:¨€LØ"#Ð*�s�1—7’7˜1‘:”:‰Œˆ¨€Hõ $ gÑ-Ð0FÑF€OØ×!Ò!Ñ#Ô#ð FÝ'¨'Ñ1Ð4EÑEˆØ×!Ò!Ñ#Ô#ð AÝ'¨WÐ*@Ð*@Ð*@Ñ@ˆØ×!Ò!Ñ#Ô#ð AÝ'¨WÐ*@Ð*@Ð*@Ñ@ˆØ×ÒÑÔð B Y°/Ò%AÐ%AÀXÐQRÂ]À]Ý�/×)Ò)Ñ+Ô+Ñ,Ô,ˆÝ% c°7Ð;Ñ;Ô;ˆØð 	+Ý8¸À)ÐW`ÐpsÐtÑtÔt‰LˆE�5Ø˜ EÐ*Ð*Ø#8ÐA��YÐÐ¸cÐAð Ð%Ò%Ñ%¨,Ñ%¸8Àaº<¹<Ø&Ð?Ð?¨X¸©\Ð?Ð?Ð?ˆÝ# LÑ1Ô1ˆ	Øñ #	,å”9˜[¨'µ2´=ÑAÔAˆDØ-1Ð=�D—J’J˜q‘M”M×'Ò'Ñ)Ô)Ð)°vˆEÝ(¨Ñ/Ô/ˆLØ$×(Ò(¨°rÑ:Ô:ˆIØ%.Ð%:˜	˜	À×@PÒ@PÐQXÐZ\Ñ@]Ô@]ˆIà —}’}Ð%:¸BÑ?Ô?ˆHØ —}’}Ð%:¸BÑ?Ô?ˆHð¥ð ­ð ð ð ð ð "'ÐØð *˜Hð *¨¨°HÑ)=Ô)=ÀÀÈHÑAUÔAUÒ)UÐ)UØ%)Ð"å 4°W¸iÑ HÔ HÐÝ 4°\À9Ñ MÔ MÐØ ð *Ð%6ð *Ð;LÐPVÒ;VÐ;VÐ[lÐpvÒ[vÐ[vð  |Mð  Qbò  |bð  |bØ%)Ð"à%ð ,Ý˜)×+Ò+Ñ-Ô-Ñ.Ô.�Ý-¨c¸7ÐCÑCÔC�Ø"ð 3Ý#@ÀÈ)Ð_hÐx{Ð#|Ñ#|Ô#|‘L�E˜5Ø ¨EÐ2Ð2Ø+@ÐI˜˜YÐ'Ð'ÀcÐIà+�	õ ' w°	Ñ:Ô:€KØAJÐR•�I—M’M -°Ñ4Ô4Ñ5Ô5×;Ò;Ñ=Ô=Ð=ÐPR€IØ@IÐQ�S�—’˜°Ñ3Ô3Ñ4Ô4×:Ò:Ñ<Ô<Ð<Èr€Fð 8AÐJ�9—=’=Ð!2Ñ3Ô3Ð3Àd€LØð &˜Ið &Ø!Ð,Ð, FÐ,Ð,×2Ò2Ñ4Ô4ˆ
Ýð  Zð  Zð  Zð  Zð  +Yð  Zñ  Zô  Zñ  Zô  Zð 	&Ø"ˆLˆLÝð  pð  pð  pð  pð  -oð  pñ  pô  pñ  pô  pð 	&Ø%ˆLˆLà%ˆLð �	ÐÐØ—o’o e¨QÑ/Ô/°Ô2ˆˆå”9Ð2°IÑ>Ô>ˆØ+3ÐB�h—n’n QÑ'Ô'Ð'¸ˆà$Ð/Ð/ vÐ/Ð/€OØ Ð+Ð+ 6Ð+Ð+€Mà" mÐ3ð  D¸ÈmÐ8[ð  DÐ`nð  wDð  aD€MØ$¨Ð5ÐX¸È=Ð9Xð  AÐ^kð  tAð  _A€MØ# }Ð4Ð\¸È}Ð9\€MØ# }Ð4ð  k¸È}Ð9\ð  kÐanð  wDð  bDð  kð  IVð  ^kð  Ik€Mà	˜-Ð	'Ð	k¨=¸MÐ+IÐ	kÈ]Ð^kÐMkð 	TØ˜mÐ+ð	TØ0>ÀmÐ0Sð ð
 
˜Ð	(Ð	R¨^À?Ð-Rð 	PØ	˜Ð	&Ð	N¨>ÀÐ+Nð õ
 �kÐ; k°VÒ&;Ñ<Ô<€JØ1<ÐG˜# Ð,Ð,À%ÐØ *˜NÐAÐ/AÐà ;Ð.ð  W°;ÀkÐ3Qð  WÐVaÐitÐVtð  Wð  zDð  LWð  zWð  Dð  ]qð  ]Cð  vC€LØ ;Ð.ÐQ°;ÀkÐ3QÐ~ÐWkÐW}Ðp}€LØ! [Ð0Ðt°[ÈÐ5SÐtÐXaÐitÐXtð  bð  {Oð  {að  Ta€MØ ;Ð.Ðr°;ÀkÐ3QÐrÐV_ÐgrÐVrð  `ð  yMð  y_ð  R_€LØ Ð,Ðp°ÀKÐ1OÐpÐT]ÐepÐTpð  ^ð  wKð  w]ð  P]€KØ Ð,ÐO°ÀKÐ1OÐ|ÐUiÐU{Ðn{€KØ#'€Mð ð 7�i—m’mÐ$5Ñ6Ô6ð 7¸)¿-º-ÐH^Ñ:_Ô:_Ðc~Ò:~Ð:~Ý˜)Ÿ-š-Ð(=¸rÑBÔBÑCÔCÐRÀ{ˆÝ@ÀÑMÔMˆØð 	7˜×5Ò5Ñ7Ô7ð 	7Ý × 7Ò 7Ñ 9Ô 9Ñ:Ô:ˆMˆMå4°[À,ÐB\ÐR\Ñ]Ô]ˆGØð 7˜7Ÿ>š>Ñ+Ô+ð 7Ý # G§O¢OÑ$5Ô$5Ñ 6Ô 6�à—’Ð3Ñ4Ô4€IØñ *B˜Yñ *BÝ˜	‘N”N×(Ò(Ñ*Ô*ˆ	àð 	w˜K¨9Ð4Ð4ØjˆIˆIØð 		w˜k¨YÐ6Ð6ØxˆIˆIØð 	w˜{¨iÐ7Ð7ØpˆIˆIØð 	w˜k¨YÐ6Ð6ØnˆIˆIØð 	w˜[¨IÐ5Ð5ØlˆIˆIØð 	w˜[¨IÐ5Ð5ØvˆIå 	Ñ)ˆ
Ø×ÒÑÔð 	BÝ 
× 2Ò 2Ñ 4Ô 4Ñ5Ô5ˆM‰Mõ ˜‘O”OÔ(ˆEÝ�n×1Ò1°-¸°-°-Ñ@Ô@ÑAÔAˆJØð BÝ # J¨q¤M×$9Ò$9Ñ$;Ô$;Ñ <Ô <��ð :Pð 9Mð 7Oð 1Ið BQð 7FØ8nðð �	ð ˜IÐ%Ð%Ý!)¨I°eÔ,<Ñ!<�JØ!×(Ò(Ñ*Ô*ð BÝ(+¨J×,>Ò,>Ñ,@Ô,@Ñ(AÔ(A˜øØ )Ð+Ð+Ý!)¨I°iÔ,@Ñ!@�JØ!×(Ò(Ñ*Ô*ð BÝ(+¨J×,>Ò,>Ñ,@Ô,@Ñ(AÔ(A˜ð ð 4˜[ð 4Ý9¸+ÐQ]Ð^Ñ^Ô^ˆØð 	4˜ŸšÑ)Ô)ð 	4Ý × 0Ò 0Ñ 2Ô 2Ñ3Ô3ˆMð ñ <Ø—’Ð6¸Ñ;Ô;ˆØð 	<ØÐ-Ò-Ð-Ýœ	Ð"=¸vÅrÄ}ÑUÔU�Øð @Ø"'§+¢+¨a¡.¤.�KÝ.¨{Ñ;Ô;�HØð @Ý(+¨H×,<Ò,<Ñ,>Ô,>Ñ(?Ô(?˜Ý &Ñ(ˆHØ�ŠÑ Ô ð 
< X×%5Ò%5Ñ%7Ô%7ð 
<Ø#œ=×.Ò.Ñ0Ô0�à!Ð= k°XÐ&=ð >Ø!Ð= k°XÐ&=ð>à"Ð> {°hÐ'>ð>ð "Ð= k°XÐ&=ð>ð !Ð< [°HÐ%<ð ð !ð <Ý$'¨×(8Ò(8Ñ(:Ô(:Ñ$;Ô$;�Mð ñ TØ!×'Ò'Ñ)Ô)ˆ	Øð 	T˜K¨9Ð4Ð4Ý9¸+ÐQ]Ð^Ñ^Ô^ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆM‰MØð 	T˜k¨YÐ6Ð6Ý9¸+ÐQ]Ð^Ñ^Ô^ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆM‰MØð 	T˜{¨iÐ7Ð7Ý9¸,ÐR^Ð_Ñ_Ô_ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆMˆMØð 	T˜k¨YÐ6Ð6Ý9¸+ÐQ]Ð^Ñ^Ô^ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆMˆMØð 	T˜[¨IÐ5Ð5Ý9¸*ÐP\Ð]Ñ]Ô]ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆMˆMØð 	T˜[¨IÐ5Ð5Ý9¸*ÐP\Ð]Ñ]Ô]ˆDØ37ÐS¸D¿KºK¹M¼MÐS�C §¢¡¤Ñ/Ô/Ð/ÈtˆMð ñ JBØð I	BÝ6°{ÈlÐ[Ñ[Ô[ˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùØð F	BÝ6°{ÈlÐ[Ñ[Ô[ˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùØð C	BÝ6°|È|Ð\Ñ\Ô\ˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùØð @	BÝ6°{ÈlÐ[Ñ[Ô[ˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùØð =	BÝ6°zÈ\ÐZÑZÔZˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùØð :	BÝ6°zÈ\ÐZÑZÔZˆAØÐA�Q—X’X‘Z”ZÐAµ°Q·Y²Y±[´[Ñ1AÔ1A ùà$¨Ð3Ð3Ð7GÍ3ÈyÉ>Ì>×K_ÒK_ÑKaÔKaÐ7aÐ7aÐfrÐ7að  xAð  EQð  xQð  xQð  V^ð  brð  Vrð  VrÝ Ð#EÑEˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùàð 2	B˜y¨LÐ8Ð8¸JÈ,Ð<VÐ<VåÐ :°Ð :Ð :Ñ:Ð=SÑSÝÐ :°Ð :Ð :Ñ:¸_ÑLÝÐ :°Ð :Ð :Ñ:Ð=RÑRÝ˜;Ñ&¨Ñ6Ð9\ÈÐ9\Ð9\Ð9\Ñ\ÝÐ 0Ñ0Ð3MÀ8Ð3MÐ3MÑMÐP_Ñ_ðˆIð "ð ð �Ø—;’;‘=”=ð Ý$'¨¯ª©¬Ñ$7Ô$7�MØ�Eðùð ð %	B˜i¨<Ð7Ð7å Ñ'Ð*@Ñ@Ý Ñ'Ð*?Ñ?Ý˜;Ñ&¨Ñ6¸GÐ9NÐ9NÐ9NÑNðˆIð
 "ð ð �Ø—;’;‘=”=ð Ý$'¨¯ª©¬Ñ$7Ô$7�MØ�Eðùð Ð-Ò-Ð-Ð1FÍ#ÈiÉ.Ì.×J^ÒJ^ÑJ`ÔJ`Ð1`Ð1`Ý˜kÑ)¨MÑ9Ð<ZÑZˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐ-Ò-Ð-°Å#ÀiÁ.Ä.×BVÒBVÑBXÔBXÐ1XÐ1XÝ˜kÑ)¨MÑ9Ð<XÑXˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐ-Ò-Ð-Ð1FÍ#ÈiÉ.Ì.×J^ÒJ^ÑJ`ÔJ`Ð1`Ð1`Ý˜kÑ)¨MÑ9Ð<ZÑZˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐ-Ò-Ð-Ð1FÍ#ÈiÉ.Ì.×J^ÒJ^ÑJ`ÔJ`Ð1`Ð1`Ý˜kÑ)¨MÑ9Ð<ZÑZˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐ-Ò-Ð-°ÅCÈ	ÁNÄN×DXÒDXÑDZÔDZÐ1ZÐ1ZÝ˜kÑ)¨MÑ9Ð<^Ñ^ˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐFÐFÐFÐJ^ÕbeÐfoÑbpÔbp×bvÒbvÑbxÔbxÐJxÐJxÝ˜kÑ)¨MÑ9Ð<WÑWˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mùØÐFÐFÐFÐJ`ÕdgÐhqÑdrÔdr×dxÒdxÑdzÔdzÐJzÐJzð  Fõ  JMð  NWñ  JXô  JX÷  J^ò  J^ñ  J`ô  J`ð  `ð  `Ý˜kÑ)¨MÑ9Ð<^Ñ^ˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜møØÐFÐFÐFÈ-Õ[^Ð_hÑ[iÔ[i×[oÒ[oÑ[qÔ[qÐJqÐJqÝ˜kÑ)¨MÑ9Ð<cÑcˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜møØÐFÐFÐFÈ*ÕX[Ð\eÑXfÔXf×XlÒXlÑXnÔXnÐJnÐJnÝ˜kÑ)¨MÑ9Ð<cÑcˆDØ�{Š{‰}Œ}ÐA­c°$·,²,±.´.Ñ.AÔ.A˜mð �OÒ#Ñ#¨Ñ#¸,Ñ#È8ÐVWÊ<É<Ø&Ð?Ð?¨X¸©\Ð?Ð?Ð?ˆÝ%¨Ñ4ˆÝˆ}ÑÔ×#Ò#Ñ%Ô%¨×)<Ò)<Ñ)>Ô)>Ð>Ñ>Ø ˆMØð 5Ý:¸;ÐR^Ð_Ñ_Ô_�Øð 5˜Ÿš™œð 5Ý$'¨¯	ª	©¬Ñ$4Ô$4�MØ ð  \ð °yÀLÐ7PÐ7PÐT^ÐbnÐTnÐTnå!Ð$>°HÐ$>Ð$>Ñ>ÐAWÑWÝ!Ð$>°HÐ$>Ð$>Ñ>ÀÑPÝ˜{Ñ*¨]Ñ:Ð=`ÈXÐ=`Ð=`Ð=`Ñ`ð�	ð
 &ð ð �DØ—{’{‘}”}ð Ý(+¨D¯LªL©N¬NÑ(;Ô(;˜Ø˜ðøð #ð 	 |ð 	¸	À\Ð8QÐ8Qå! GÑ+Ð.DÑDÝ! GÑ+Ð.CÑCÝ˜{Ñ*¨]Ñ:ÀÐ=RÐ=RÐ=RÑRð�	ð
 &ð ð �DØ—{’{‘}”}ð Ý(+¨D¯LªL©N¬NÑ(;Ô(;˜Ø˜ðð
 ð PÝ/°ÀwÐOÑOÔOˆàð 1Ý4°W¸iÐS\ÐlyÐzÑzÔz‰ˆˆuØ˜y¨%Ð0Ð0Øð *Ø˜yÐ)Ð)ØÐr,   Úbanana_promptsc                 ó.   — |€i }t          | |d¬¦  «        S )uˆ   
    Giao diá»‡n chuáº©n hÃ³a v2 tráº£ vá»� (start_frame_path, take_type).
    take_type: 'CINEMATIC_CUT' hoáº·c 'CONTINUOUS_TAKE'.
    NT)r‚  ©rá  ©r;   r€   râ  s      r*   Úresolve_start_frame_v2ræ  ý  s$   € ð ÐØˆ	Ý˜w¨	ÈÐNÑNÔNÐNr,   c                 ó.   — |€i }t          | |d¬¦  «        S )uß   
    Giao diá»‡n chuáº©n hÃ³a v3 tráº£ vá»� (start_frame_path, take_type, start_frame_strategy).
    start_frame_strategy: 'CHARACTER_TURNAROUND_VIEW', 'GEMINI_BANANA_KEYFRAME', 'HEAD_TAIL_PREV_FRAME', 'TEXT_TO_VIDEO'.
    NT)rƒ  rä  rå  s      r*   Úresolve_start_frame_v3rè    s$   € ð ÐØˆ	Ý˜w¨	À4ÐHÑHÔHÐHr,   c           
      óü  — t          | ¬¦  «        }t          |¦  «        }d}i }|                     ¦   «         D ]}\  }}t          j        d|t          j        ¦  «        }|r|                     d¦  «        nd}||vrg ||<   t          |¦  «        du}	|	r|dz  }||                              ||	|f¦  «         Œ~| rd|  	                    ¦   «         › �nd}
t          d	¦  «         t          d
|
› �¦  «         t          d¦  «         t          d|› d�¦  «         |dk    r
d||z  d›d�nd}t          d|› d|› d|› �¦  «         | r|                      ¦   «         › d�nd}t          t                               |¦  «        ¦  «        t          t                               |¦  «        ¦  «        z   }t          dt          |¦  «        › d�¦  «         t          d¦  «         t          dd›ddd›ddd›dd › �¦  «         t          d¦  «         t!          |                     ¦   «         ¦  «        D ]È\  }}t          |¦  «        }t#          d!„ |D ¦   «         ¦  «        }|dk    r|› d"|› d#||z  d$›d�nd%}t          |› d&�z  }|                     ¦   «         st          |› d'�z  }|                     ¦   «         st          |› d(�z  }|                     ¦   «         rd)nd*}t          |d›d|d›d|d›d|› �¦  «         ŒÉt          d+¦  «         dS ),ut   Hiá»ƒn thá»‹ báº£ng tá»•ng káº¿t tiáº¿n Ä‘á»™ sáº£n xuáº¥t toÃ n bá»™ cÃ¡c táº­p phim hoáº·c má»™t táº­p cá»¥ thá»ƒ.rq   r   z^(ep\d+_scene\d+)r   Úspecial_promptsNu	    - Táº¬P rÆ   zO
==============================================================================uR   ðŸŽ¬ THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - BÃ�O CÃ�O TIáº¾N Ä�á»˜ Sáº¢N XUáº¤TzN==============================================================================u!   Tá»•ng sá»‘ shot Ä‘á»‹nh nghÄ©a: z shotsú(z.1%ú)z(0%)u   Sá»‘ shot Ä‘Ã£ render:       z / rÊ   ú*master*.mp4u   Sá»‘ Video Master hoÃ n táº¥t: z videozN------------------------------------------------------------------------------u   Cáº¢NH / PHÃ‚N Ä�Oáº Nú<24ú | u	   Sá»� SHOTú<8u   TIáº¾N Ä�á»˜z<12u   TRáº NG THÃ�I MASTERc              3   ó&   K  — | ]\  }}}|¯d V — ŒdS )r   Nr&   )r~   r   Údones      r*   rc  z)show_production_status.<locals>.<genexpr>=  s-   è è € Ð;Ð;™:˜1˜d A°dÐ;�QÐ;Ð;Ð;Ð;Ð;Ð;r,   ú/ú (z.0%z0/0z_master.mp4z_master_50s.mp4z_cinematic_master.mp4u   âœ“ Ä�Ãƒ CÃ“ MASTERu   â�³ Ä�ang sáº£n xuáº¥tzO==============================================================================
)rt   Úlenr‡   r‚   rƒ   r„   r…   r£   rˆ   ÚupperrQ   rg   r¥   r™   rš   ÚEXPORTS_DIRÚsortedÚsumrh   )rb   rŒ   Útotal_shotsÚrendered_countÚ
scenes_mapr;   r€   r�   ru   Úis_renderedÚ	ep_headerÚ	pct_totalrŽ   ÚmastersÚ	shot_listÚn_shotsÚn_doneÚpctÚmaster_fileÚmaster_statuss                       r*   Úshow_production_statusr    s¦  € å ZÐ0Ñ0Ô0€EÝ�e‘*”*€KØ€NØ€Jà#Ÿkšk™mœmð 	Gð 	GÑˆ�ÝŒIÐ*¨GµR´]ÑCÔCˆØ!"Ð9�1—7’7˜1‘:”:�:Ð(9ˆØ˜:Ð%Ð%Ø#%ˆJ�xÑ å)¨'Ñ2Ô2¸$Ð>ˆØð 	 Ø˜aÑˆNØ�8Ô×#Ò# W¨k¸9Ð$EÑFÔFÐFÐFà4>ÐFÐ0˜J×,Ò,Ñ.Ô.Ð0Ð0Ð0ÀB€IÝ	ˆ/ÑÔÐÝ	Ð
jÐ_hÐ
jÐ
jÑkÔkÐkÝ	ˆ(�O„O€OÝ	Ð
A¨kÐ
AÐ
AÐ
AÑBÔBÐBØ;FÈº?¸?Ð7�N [Ñ0Ð7Ð7Ð7Ð7Ð7ÐPV€IÝ	Ð
V¨.Ð
VÐ
V¸[Ð
VÐ
VÈ9Ð
VÐ
VÑWÔWÐWð 6@ÐS�×!Ò!Ñ#Ô#Ð1Ð1Ð1Ð1À^€GÝ•:—?’? 7Ñ+Ô+Ñ,Ô,­tµK×4DÒ4DÀWÑ4MÔ4MÑ/NÔ/NÑN€GÝ	Ð
@­C°©L¬LÐ
@Ð
@Ð
@ÑAÔAÐAÝ	ˆ(�O„O€OÝ	Ð%Ð
pÐ
pÐ
p¨kÐ
pÐ
pÐ
pÀÐ
pÐ
pÐ
pÐXnÐ
pÐ
pÑqÔqÐqÝ	ˆ(�O„O€Oå% j×&6Ò&6Ñ&8Ô&8Ñ9Ô9ð Nð NÑˆ�)Ý�i‘.”.ˆÝÐ;Ð;¨Ð;Ñ;Ô;Ñ;Ô;ˆØ>EÈºk¸k�Ð:Ð:˜'Ð:Ð: V¨G¡^Ð:Ð:Ð:Ð:Ð:Èuˆõ ! hÐ#;Ð#;Ð#;Ñ;ˆØ×!Ò!Ñ#Ô#ð 	DÝ$¨(Ð'CÐ'CÐ'CÑCˆKØ×!Ò!Ñ#Ô#ð 	KÝ%¨8Ð(JÐ(JÐ(JÑJˆKØ1<×1CÒ1CÑ1EÔ1EÐcÐ-Ð-ÐKcˆå�ÐLÐLÐL 'ÐLÐLÐL°ÐLÐLÐL¸]ÐLÐLÑMÔMÐMÐMå	ˆ/ÑÔÐÐÐr,   c                 ó|  ‡ — t          |¬¦  «        }‰ r!ˆ fd„|                     ¦   «         D ¦   «         }n!t          |                     ¦   «         ¦  «        }|rd|                     ¦   «         › �nd}t	          d¦  «         t	          dt          |¦  «        › d�‰ rd‰ › �n|z   ¦  «         t	          d	¦  «         t	          d
d›ddd›ddd›ddd›ddd›d�
¦  «         t	          d¦  «         |D ]¿\  }}t          ||¦  «        dk    rdnd}|                     dd¦  «        › d�}t          |¦  «        rdnd}	t          ||¦  «        }
|
rt          |
¦  «        j        dd…         d z   nd!}|                     d"d¦  «        dd#…         }t	          |d›d$|d%›d&|d›d|d›d|	d›d|› �¦  «         ŒÀt	          d'¦  «         dS )(u"   Liá»‡t kÃª chi tiáº¿t tá»«ng shot.rq   c                 óH   •— g | ]\  }}|                      ‰¦  «        ¯||f‘ŒS r&   )Ú
startswith)r~   r'   r(   ru   s      €r*   r�   z"list_shots_cmd.<locals>.<listcomp>Q  s3   ø€ Ð\Ð\Ð\¡J C¨À3Ç>Â>ÐRZÑC[ÔC[Ð\�C˜�<Ð\Ð\Ð\r,   u    Táº¬P rÆ   za
================================================================================================u   DANH SÃ�CH SHOT (z shots)u    CHO PHÃ‚N Cáº¢NH: z`================================================================================================u   MÃƒ SHOTrî  rï  ÚENGINErð  u   THá»œI LÆ¯á»¢NGz<10zSTART FRAMEz<14ÚRENDERu    | TIÃŠU Ä�á»€z`------------------------------------------------------------------------------------------------Ú
gradio_ltxÚLTXÚMUSEÚduration_secé
   Úsu   âœ“ XONGu   â€”Nr”  z..u	   ChÆ°a cÃ³rÅ   é    z | [z<4z] | za================================================================================================
)rt   r‡   r¥   rö  rQ   rõ  r!   rF   r£   rá  r   rž   )ru   rb   rŒ   r�   rþ  r;   r€   Úengine_labelÚdurationÚ	has_videoÚstart_frameÚsf_labelrb  s   `            r*   Úlist_shots_cmdr  M  s:  ø€ å ZÐ0Ñ0Ô0€EØð &Ø\Ð\Ð\Ð\°%·+²+±-´-Ð\Ñ\Ô\ˆˆå�u—{’{‘}”}Ñ%Ô%ˆà2<ÐDÐ.˜*×*Ò*Ñ,Ô,Ð.Ð.Ð.À"€IÝ	ˆ/ÑÔÐÝ	Ð
3�c '™lœlÐ
3Ð
3Ð
3Ð[cÐ7rÐ7WÈXÐ7WÐ7WÐ7WÐirÑ
sÑtÔtÐtÝ	ˆ(�O„O€OÝ	ˆZÐ
|Ð
|Ð
| Ð
|Ð
|Ð
|Ð0AÐ
|Ð
|Ð
|È-Ð
|Ð
|Ð
|Ð`hÐ
|Ð
|Ð
|Ð
|Ñ}Ô}Ð}Ý	ˆ(�O„O€Oà%ð tð tÑˆ�Ý 4°W¸iÑ HÔ HÈLÒ XÐ X�u�uÐ^dˆØ—m’m N°BÑ7Ô7Ð:Ð:Ð:ˆÝ"5°gÑ">Ô">ÐI�J�JÀEˆ	Ý)¨'°9Ñ=Ô=ˆØ9DÐU•4˜Ñ$Ô$Ô)¨#¨2¨#Ô.°Ñ5Ð5È+ˆØ—’˜m¨RÑ0Ô0°°"°Ô5ˆÝ�ÐrÐrÐr ,ÐrÐrÐr°xÐrÐrÐrÈÐrÐrÐrÐYbÐrÐrÐrÐkpÐrÐrÑsÔsÐsÐså	ˆ/ÑÔÐÐÐr,   Úinput_videoÚoutput_videoc                 óÖ  — t          | ¦  «                             ¦   «         }|                     ¦   «         st          d|› �¦  «         dS |r!t          |¦  «                             ¦   «         n|}|                     |j        › dt          j        ¦   «         › |j        › �¦  «        }t          ¦   «         }|ddt          |¦  «        dddd	d
dddddddddddt          |¦  «        g}t          d|j        › d�¦  «         t          j        |dd¬¦  «        }|j        dk    ry|                     ¦   «         re|                     ¦   «         j        dk    rHddl} |j        t          |¦  «        t          |¦  «        ¦  «         t          d|j        › �¦  «         dS t          d|j        › �¦  «         |                     ¦   «         r&	 |                     ¦   «          n# t*          $ r Y nw xY wdS )u	  
    Ä�áº£o ngÆ°á»£c video vÃ  audio báº±ng FFmpeg (-vf reverse -af areverse).
    Báº£o toÃ n cháº¥t lÆ°á»£ng video libx264 crf 18 vÃ  Ã¢m thanh AAC 192k 48000Hz.
    Náº¿u output_video khÃ´ng Ä‘Æ°á»£c chá»‰ Ä‘á»‹nh, ghi Ä‘Ã¨ an toÃ n lÃªn chÃ­nh input_video.
    u#   [!] KhÃ´ng tÃ¬m tháº¥y file video: FÚ
_rev_temp_ú-yú-iz-vfr—   z-afÚareverseú-c:vÚlibx264ú-crfÚ18ú-presetÚslowú-c:aÚaacú-b:aÚ192kú-arÚ48000u+   
ðŸ”„ Ä�ang thá»±c thi Reverse Motion cho: ú...T©Úcapture_outputÚtextr   r“   Nu9   [âœ“] Ä�Ã£ Ä‘áº£o ngÆ°á»£c video vÃ  audio thÃ nh cÃ´ng: u+   [!] Lá»—i khi reverse video báº±ng FFmpeg:
)r   r+  rh   rQ   Ú	with_nameræ   r²  ÚgetpidÚsuffixr\   rD   rž   Ú
subprocessÚrunÚ
returncoderœ   r�   ÚshutilÚmoveÚstderrÚunlinkrP   )	r  r  Úin_pathrA  Útemp_outÚ
ffmpeg_exeÚcmdr¶  r7  s	            r*   Úreverse_video_filer?  h  s  € õ �;ÑÔ×'Ò'Ñ)Ô)€GØ�>Š>ÑÔð ÝÐ=°GÐ=Ð=Ñ>Ô>Ð>Øˆuà/;ÐH�t�LÑ!Ô!×)Ò)Ñ+Ô+Ð+À€HØ× Ò  G¤LÐ!YÐ!Y½B¼I¹K¼KÐ!YÈÌÐ!YÐ!YÑZÔZ€Hå‘”€Jà�DØ�c�'‰lŒlØˆyØˆzØ�	Ø�Ø�6Ø�Ø�ØˆwÝˆH‰Œð€Cõ 
Ð
J¸¼Ð
JÐ
JÐ
JÑKÔKÐKÝ
Œ.˜¨T¸Ð
=Ñ
=Ô
=€CØ
„~˜ÒÐ˜xŸšÑ0Ô0Ð°X·]²]±_´_Ô5LÈtÒ5SÐ5SØˆˆˆØˆŒ•C˜‘M”M¥3 x¡=¤=Ñ1Ô1Ð1ÝÐYÈ(Ì-ÐYÐYÑZÔZÐZØˆtåÐI¸S¼ZÐIÐIÑJÔJÐJØ�?Š?ÑÔð 	ðØ—’Ñ!Ô!Ð!Ð!øÝð ð ð Ø�ðøøøàˆus   ÇG Ç
G&Ç%G&r%   TÚautoÚinput_frameÚprompt_overrideÚsession_nameÚdownload_dirÚreverse_motionÚenable_criticÚmax_retakesÚdry_runÚengineÚpacing_3beatc                 ó–  — t          ¦   «         }|                     | i ¦  «        }|p|                     d¦  «        }|st          d| › �¦  «         dS t          | |¦  «        }|
r4t          �-|                     dd¦  «        }t	          j        |||¬¦  «        }t          |¦  «        }|€#t          |                     dd¦  «        ¦  «        }t          | ||¦  «        }d}t          j
        d	| t          j        ¦  «        }|rz|                     d
¦  «        }t          |                     d¦  «        ¦  «        }|d
k    r=|› d|d
z
  d›�}t          |¦  «        }|r!t          |                     ¦   «         ¦  «        }t"          €t          d¦  «         dS |	dk    rt%          | ||¦  «        n|	}t          d| › d�¦  «         t          d|                     ¦   «         › d|	dk    rdnd› d�¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|
rdnd› �¦  «         d}|}||k    �rßt#          | ||||||||	¬ ¦	  «	        \  }}|st          d!| › d"|d
z   › d�¦  «         dS t          | ¦  «        }|st          d#| › �¦  «         dS |rt(          €t+          || ¦  «         d$S t)          | t          |¦  «        ||¬%¦  «        }t          d&| › d'|j        d(›d)|j        › �¦  «         |j        d*k    r9|j        d+k    r.t+          || ¦  «         t          d,| › d-|j        d(›d.�¦  «         d$S |d
z  }||k    r­t          d/|› d0|› d1| › d2|j        › d3�	¦  «         d}t4          �lt7          |d4d¦  «        r[t5          j        ||j        ||¬5¦  «        \  }} | r9t          d6t=          | ¦  «        › d7d8                     | ¦  «        › �¦  «         |}d$}|s|j        r|› d9|j        › d:�}n!t          d;| › d<|› d=|j        d(›d�¦  «         dS ||k    �°ßdS )>u†   Thá»±c thi render 1 shot Ä‘Æ¡n láº» qua Engine phÃ¹ há»£p (Muse.ai hoáº·c Gradio LTX-Video) kÃ¨m Shot Gate vÃ  FlowKit Prompt Healing.rÇ   u(   [!] KhÃ´ng tÃ¬m tháº¥y prompt cho shot: FNr^  rÆ   )r^  Úcharacter_namerE  rÞ   r   r   rà   rá   u/   [!] Lá»—i: run_shot module khÃ´ng kháº£ dá»¥ng.r@  u*   
ðŸš€ Ä�ang kÃ­ch hoáº¡t Orchestrator cho ú:u      â€¢ Target Engine:  rô  u   Tá»± Ä‘á»™ng phÃ¢n loáº¡iu   Thá»§ cÃ´ngrì  u      â€¢ Worker Session: u      â€¢ Start Frame:    u      â€¢ Prev Video:     u      â€¢ Reverse Motion: u      â€¢ Enable Critic:  u      â€¢ FlowKit Pacing: ú3-Beat FormulaÚStandardr   )rC  rD  rE  rH  rI  u#   [!] Tháº¥t báº¡i render táº¡i shot u    (láº§n u7   [!] KhÃ´ng tÃ¬m tháº¥y file video sau khi render shot: T)r;   r:   Úexpected_characterr)   u      ðŸ“Š Antigravity Shot Gate (ú): Score = r   z | Approved = gš™™™™™é?ÚRETAKE_SHOTu      [âœ“] Shot u"    Ä�áº T CHUáº¨N Shot Gate (Score: z)!u      ðŸ”„ [RETAKE ró  z] Shot u    khÃ´ng Ä‘áº¡t chuáº©n (u,   ). KÃ­ch hoáº¡t Diagnostic Prompt Healing...Údetected_errors)Úoriginal_promptrS  rL  Úcycleu&         ðŸ©¹ [PROMPT HEALER] Ä�Ã£ tiÃªm u    phÃ¡c Ä‘á»“: z, z [Critique Fix: ú]z	[!] Shot u"    khÃ´ng vÆ°á»£t qua Shot Gate sau u    láº§n retake (Score: ) rt   rF   rQ   rÛ   r   Úformat_3beat_promptr   r´  rá  r‚   rƒ   r„   r…   rE   r£   rD   r+  r   r!   rö  r   rY   Úoverall_scoreÚapprovedÚsuggested_actionÚcritique_notesr   ÚgetattrÚheal_promptrS  rõ  Újoin)!r;   rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rŒ   r€   r)   Úexpected_charÚ
cam_motionÚresolved_frameÚ
prev_videor�   ró   r�   rÜ   ÚpvÚassigned_engineÚretake_attemptÚcurrent_promptÚsuccessÚ
tail_frameÚtarget_videoÚverdictÚ	healed_okÚhealed_pÚ	therapiess!                                    r*   Úrender_single_shotrn  •  s
  € õ ‰OŒO€EØ—	’	˜' 2Ñ&Ô&€IàÐ> 	§¢¨oÑ >Ô >€FØð ÝÐB¸ÐBÐBÑCÔCÐCØˆuå(¨°)Ñ<Ô<€Mð ð 
Õ*Ð6Ø—]’] ?°BÑ7Ô7ˆ
Ý#Ô7ØØ$Ø(ð
ñ 
ô 
ˆõ   Ñ'Ô'€FàÐÝ˜iŸmšmÐ,<¸eÑDÔDÑEÔEˆå(¨°)¸[ÑIÔI€Nð €JÝ
Œ	Ð1°7½B¼MÑJÔJ€AØð /Ø—w’w˜q‘z”zˆÝ�q—w’w˜q‘z”z‘?”?ˆØ�aŠ<ˆ<Ø*ÐCÐC°¸A±ÐCÐCÐCˆLÝ$ \Ñ2Ô2ˆBØð /Ý  §¢¡¤Ñ.Ô.�
åÐ ÝÐ?Ñ@Ô@Ð@ØˆuàJPÐTZÒJZÐJZÕ*¨7°I¸vÑFÔFÐFÐ`f€OÝ	Ð
B¸Ð
BÐ
BÐ
BÑCÔCÐCÝ	ð  E O×$9Ò$9Ñ$;Ô$;ð  Eð  EÐ^dÐhnÒ^nÐ^nÐ?ZÐ?Zð  uBð  Eð  Eð  Eñ  Fô  Fð  FÝ	Ð
2 LÐ
2Ð
2Ñ3Ô3Ð3Ý	Ð
4 NÐ
4Ð
4Ñ5Ô5Ð5Ý	Ð
0 JÐ
0Ð
0Ñ1Ô1Ð1Ý	Ð
4 NÐ
4Ð
4Ñ5Ô5Ð5Ý	Ð
3 MÐ
3Ð
3Ñ4Ô4Ð4Ý	Ð
V¸Ð$TÐ$4Ð$4È*Ð
VÐ
VÑWÔWÐWà€NØ€Nà
˜KÒ
'Ñ
'Ý/ØØØØØ%Ø%Ø)ØØð

ñ 

ô 

Ñˆ�ð ð 	ÝÐ^¸Ð^Ð^ÈÐZ[ÑI[Ð^Ð^Ð^Ñ_Ô_Ð_Ø�5å*¨7Ñ3Ô3ˆØð 	ÝÐUÈGÐUÐUÑVÔVÐVØ�5àð 	Õ 2Ð :å ¨gÑ6Ô6Ð6Ø�4å$ØÝ˜<Ñ(Ô(Ø,Ø!ð	
ñ 
ô 
ˆõ 	Ð°ÐÐÀGÔDYÐÐÐÐmtÔm}ÐÐñ  	Aô  	Að  	AàÔ  CÒ'Ð'¨GÔ,DÈÒ,UÐ,Uå ¨gÑ6Ô6Ð6ÝÐk 7ÐkÐkÈgÔNcÐkÐkÐkÐkÑlÔlÐlØ�4à˜aÑˆNØ Ò,Ð,Ýð  t¨ð  tð  t¸+ð  tð  tÈgð  tð  tÐovô  pFð  tð  tð  tñ  uô  uð  uØ!�	Ý)Ð5½'À'ÐK\Ð^bÑ:cÔ:cÐ5Ý*@Ô*LØ(6Ø(/Ô(?Ø'4Ø,ð	+ñ +ô +Ñ'�H˜ið !ð )ÝÐ{ÅsÈ9Á~Ä~Ð{Ð{Ðei×enÒenÐoxÑeyÔeyÐ{Ð{Ñ|Ô|Ð|Ø)1˜Ø$(˜	Ø ð Z WÔ%;ð ZØ(.Ð%YÐ%YÀÔ@VÐ%YÐ%YÐ%Y�Nøåð  M 'ð  Mð  MÈ[ð  Mð  MÐpwô  qFð  Mð  Mð  Mð  Mñ  Nô  Nð  NØ�uðw ˜KÒ
'Ñ
'ðz ˆ5r,   Úauto_concatc
                 óÒ  — t          | ¦  «        }
|
st          d| › �¦  «         dS t          d¦  «         t          d| › �¦  «         t          d|                     ¦   «         › �¦  «         t          d|› �¦  «         t          dt          |
¦  «        › �¦  «         t          d|rd	nd
› �¦  «         t          d|	rdnd› �¦  «         t          d¦  «         t	          |
d¦  «        D ]·\  }\  }}t          d|› dt          |
¦  «        › d|› �¦  «         t          |¦  «        }|rK|sIt          d|j        › d�¦  «         t          |¦  «        }|st          d¦  «         t          ||¦  «         Œ‰t          ||||||||	¬¦  «        }|st          d|› �¦  «          dS Œ¸t          d| › d�¦  «         |r‰t          �‚d„ |
D ¦   «         }t          |¦  «        t          |
¦  «        k    rVt          | |¦  «        }t          d| › d|j        d›d|j        › �¦  «         |j        st          d | › d!|j        › �¦  «         dS |r(t          d"| › d#�¦  «         t          | |¬$¦  «        }|duS d%S )&u;  
    Render tá»± Ä‘á»™ng toÃ n bá»™ cÃ¡c shot trong 1 cáº£nh (Scene) theo chuá»—i Head-Tail liÃªn hoÃ n kÃ¨m Scene Gate.
    Há»— trá»£ Ä‘á»‹nh tuyáº¿n engine: auto (tá»± Ä‘á»™ng), muse (cáº£nh toÃ n), gradio_ltx (cáº­n cáº£nh).
    Há»— trá»£ chuáº©n hÃ³a nhá»‹p Ä‘iá»‡u FlowKit Cinematic 3-Beat Shot Formula.
    u-   [!] KhÃ´ng tÃ¬m tháº¥y shot nÃ o cho cáº£nh: FzG
======================================================================uF   ðŸŽ¬ Báº®T Ä�áº¦U CHUá»–I Sáº¢N XUáº¤T Tá»° Ä�á»˜NG BATCH CHO Cáº¢NH: z   Engine Routing: z   Worker Session: u      Sá»‘ lÆ°á»£ng shot:  z   Critic Gate:    u   Báº¬Tu   Táº®Tz   FlowKit Pacing: rN  rO  zF======================================================================r   z
>>> [ró  u   ] Xá»¬ LÃ� SHOT: u3       [âœ“] Shot Ä‘Ã£ Ä‘Æ°á»£c render trÆ°á»›c Ä‘Ã³: u   . Bá»� qua render.u>       TrÃ­ch xuáº¥t bá»• sung Tail Frame tá»« video sáºµn cÃ³...)rC  rD  rF  rG  rH  rI  rJ  u/   [!] Dá»«ng chuá»—i batch vÃ¬ lá»—i táº¡i shot: u"   
[âœ“] TOÃ€N Bá»˜ CÃ�C SHOT Cá»¦A u    Ä�Ãƒ HOÃ€N Táº¤T!Nc                 ój   — g | ]0\  }}t          |¦  «        ¯t          t          |¦  «        ¦  «        ‘Œ1S r&   )r£   rD   )r~   r'   r   s      r*   r�   z&batch_render_scene.<locals>.<listcomp>Z  s<   € ÐpÐpÐp¹f¸cÀ1ÕWjÐknÑWoÔWoÐp�CÕ 3°CÑ 8Ô 8Ñ9Ô9ÐpÐpÐpr,   õ!   
ðŸ�›ï¸� Antigravity Scene Gate (rQ  r   ú | Action = u/   [!] Scene Gate tá»« chá»‘i phÃª duyá»‡t cáº£nh rA   u7   
ðŸ”— Tá»± Ä‘á»™ng kÃ­ch hoáº¡t ghÃ©p ná»‘i Master cho r-  )rF  T)r‘   rQ   rö  rõ  Ú	enumerater£   rž   r§   rY   rn  r   rX  rZ  rY  r[  Úconcat_scene_shots)ru   r5   ro  rC  rD  rF  rG  rH  rI  rJ  Úscene_shotsÚidxr;   r€   r:   rh  rg  Úshot_video_pathsÚscene_verdictÚ
res_masters                       r*   Úbatch_render_scener{    sV  € õ" & hÑ/Ô/€KØð ÝÐH¸hÐHÐHÑIÔIÐIØˆuå	ˆ/ÑÔÐÝ	Ð
]ÐS[Ð
]Ð
]Ñ^Ô^Ð^Ý	Ð
0 §¢¡¤Ð
0Ð
0Ñ1Ô1Ð1Ý	Ð
. Ð
.Ð
.Ñ/Ô/Ð/Ý	Ð
7¥S¨Ñ%5Ô%5Ð
7Ð
7Ñ8Ô8Ð8Ý	Ð
G¨=Ð E  ¸gÐ
GÐ
GÑHÔHÐHÝ	Ð
R°LÐ PÐ 0Ð 0ÀjÐ
RÐ
RÑSÔSÐSÝ	ˆ(�O„O€Oå%.¨{¸AÑ%>Ô%>ð ð Ñ!ˆÑ!ˆg�yÝÐJ˜ÐJÐJ�c +Ñ.Ô.ÐJÐJÀÐJÐJÑKÔKÐKÝ(¨Ñ1Ô1ˆ
àð 	˜eð 	ÝÐkÈ
ÌÐkÐkÐkÑlÔlÐlå(¨Ñ1Ô1ˆJØð 9ÝÐWÑXÔXÐXÝ# J°Ñ8Ô8Ð8Øõ %ØØ%Ø%Ø'Ø#ØØØ%ð	
ñ 	
ô 	
ˆð ð 	ÝÐMÀGÐMÐMÑNÔNÐNØ�5�5ð	õ 
Ð
L°Ð
LÐ
LÐ
LÑMÔMÐMð ð Õ,Ð8ØpÐpÈÐpÑpÔpÐÝÐÑ Ô ¥C¨Ñ$4Ô$4Ò4Ð4Ý/°Ð:JÑKÔKˆMÝð  Z°xð  Zð  ZÈMÔLgð  Zð  Zð  Zð  zGô  zXð  Zð  Zñ  [ô  [ð  [Ø Ô)ð ÝÐrÈÐrÐrÐTaÔTpÐrÐrÑsÔsÐsØ�uàð &ÝÐVÈÐVÐVÐVÑWÔWÐWÝ'¨ÀÐNÑNÔNˆ
Ø Ð%Ð%àˆ4r,   ú.mp4Úbase_dirræ   r3  c                 óÒ  — |                       dd¬¦  «         t          j        dt          j        |¦  «        › dt          j        |¦  «        › d�¦  «        }g }|                      |› d|› �¦  «        D ]S}|                     |j        ¦  «        }|r5|                     t          | 	                    d¦  «        ¦  «        ¦  «         ŒT|rt          |¦  «        dz   nd}| |› d|› |› �z  S )	u–   
    Sinh Ä‘Æ°á»�ng dáº«n file theo chuáº©n versioning _v<N> (báº¯t Ä‘áº§u tá»« _v1).
    Náº¿u Ä‘Ã£ cÃ³ _v1, tá»± Ä‘á»™ng tÄƒng lÃªn _v2, _v3...
    Tr=   rx   z_v(\d+)ú$ú*r   Ú_v)rN   r‚   r†   r˜   rš   rŸ   rž   rˆ   rE   r…   rK   )r}  ræ   r3  rŽ   Úexisting_versionsrn   r�   Únext_vers           r*   Úresolve_versioned_pathr„  j  sù   € ð
 ‡N‚N˜4¨$€NÑ/Ô/Ð/ÝŒjÐJ�bœi¨™oœoÐJÐJµb´iÀÑ6GÔ6GÐJÐJÐJÑKÔK€GØÐØ�]Š]˜dÐ-Ð- VÐ-Ð-Ñ.Ô.ð 6ð 6ˆØ�MŠM˜!œ&Ñ!Ô!ˆØð 	6Ø×$Ò$¥S¨¯ª°©¬¡_¤_Ñ5Ô5Ð5øØ->ÐE�sÐ$Ñ%Ô%¨Ñ)Ð)ÀA€HØ˜Ð3Ð3 Ð3¨6Ð3Ð3Ñ3Ð3r,   Úasset_name_or_pathc                 ó°  — | sdS t          | ¦  «        }|                     ¦   «         r(|                     ¦   «         r|                     ¦   «         S |j        }t
          dz  t
          dz  t
          dz  t
          dz  dz  t          g}|D ]Í}|                     ¦   «         sŒ||z  }|                     ¦   «         r*|                     ¦   «         r|                     ¦   «         c S |                     d¦  «        D ]]}|j                             ¦   «         |                     ¦   «         k    r,|                     ¦   «         r|                     ¦   «         c c S Œ^ŒÎdS )uŠ  
    TÃ¬m kiáº¿m vÃ  Ä‘á»‹nh vá»‹ Ä‘Æ°á»�ng dáº«n file Ã¢m thanh (BGM, Ambience, Foley)
    xuyÃªn suá»‘t cÃ¡c thÆ° má»¥c tÃ i nguyÃªn chuáº©n:
    1. Ä�Æ°á»�ng dáº«n tuyá»‡t Ä‘á»‘i hoáº·c tÆ°Æ¡ng Ä‘á»‘i trá»±c tiáº¿p (náº¿u file tá»“n táº¡i)
    2. 04_Assets/audio/
    3. 04_Assets/audio_sfx/
    4. 04_Assets/audio_voice/
    5. 04_Assets/archive/audio/
    6. ThÆ° má»¥c gá»‘c dá»± Ã¡n
    NÚaudioÚ	audio_sfxÚaudio_voiceÚarchiver€  )	r   rh   r›   r+  rž   Ú
ASSETS_DIRrµ  rš   rg   )r…  r-   rž   Úsearch_dirsÚdÚ	candidatern   s          r*   Úresolve_audio_assetr�  z  sX  € ð ð ØˆtÝÐÑ Ô €AØ‡x‚x�z„zð �a—i’i‘k”kð Ø�yŠy‰{Œ{ÐàŒ6€Då�WÑÝ�[Ñ Ý�]Ñ"Ý�YÑ Ñ(Ýð€Kð ð 	#ð 	#ˆØ�xŠx‰zŒzð 	ØØ˜‘Hˆ	Ø×ÒÑÔð 	' )×"3Ò"3Ñ"5Ô"5ð 	'Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&à—’˜‘”ð 	#ð 	#ˆAØŒv�|Š|‰~Œ~ §¢¡¤Ò-Ð-°!·)²)±+´+Ð-Ø—y’y‘{”{Ð"Ð"Ð"Ð"Ð"øð	#ð ˆ4r,   c                 ó   — g | ]}d |d›�‘Œ	S )Ú
ep01_scenerá   r&   ©r~   Úis     r*   r�   r�      s1   € ð ð ð ØÐ�ÐÐÐðð ð r,   é   c                 ó’  — g }t                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                                | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒIt                               | › d�¦  «        D ]H}|                     ¦   «         r2|                     ¦   «         j        dk    r|                     |¦  «         ŒI|sdS dt          fd„}|                     |d	¬
¦  «         |d         S )u¯  
    TÃ¬m master video cho scene theo thá»© tá»± Æ°u tiÃªn cháº¥t lÆ°á»£ng vÃ  phiÃªn báº£n:
    1. 06_Exports/{scene_id}_master_audio_v*.mp4 (phiÃªn báº£n cao nháº¥t)
    2. 06_Exports/{scene_id}_cinematic_master_v*.mp4 (phiÃªn báº£n cao nháº¥t)
    3. 06_Exports/{scene_id}_master_v*.mp4 (phiÃªn báº£n cao nháº¥t)
    4. 04_Assets/videos/{scene_id}*master*.mp4 (phiÃªn báº£n cao nháº¥t)
    5. File unversioned tÆ°Æ¡ng á»©ng
    z_master_audio*.mp4r“   z_cinematic_master*.mp4z_master*.mp4rí  Nr-   c                 óH  — t          j        d| j        t           j        ¦  «        }|r"t	          |                     d¦  «        ¦  «        nd}| j                             ¦   «         }d|v rd}nd|v rd}n| j        t          k    rd}nd}|||  	                    ¦   «         j
        fS )	Nz_v(\d+)\.mp4$r   r   Úmaster_audior“  Úcinematic_masterr’  r   )r‚   rƒ   rž   r„   rE   r…   rg   Úparentr÷  rœ   r    )r-   r�   r¢   ÚlnameÚ
type_scores        r*   Úsort_keyz&resolve_scene_master.<locals>.sort_keyÃ  sœ   € ÝŒIÐ&¨¬µ´Ñ>Ô>ˆØ#$Ð+•�A—G’G˜A‘J”J‘”�¨!ˆØ”—’‘”ˆØ˜UÐ"Ð"ØˆJˆJØ 5Ð(Ð(ØˆJˆJØŒX�Ò$Ð$ØˆJˆJàˆJØ˜E 1§6¢6¡8¤8Ô#4Ð5Ð5r,   Tr–   r   )	r÷  rš   r›   rœ   r�   rˆ   r™   r   r‰   )ru   r¦   r-   rœ  s       r*   Úresolve_scene_masterr�  ¥  sÑ  € ð €Jå×Ò Ð=Ð=Ð=Ñ>Ô>ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øå×Ò ÐAÐAÐAÑBÔBð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øå×Ò Ð7Ð7Ð7Ñ8Ô8ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øå�_Š_ Ð6Ð6Ð6Ñ7Ô7ð !ð !ˆØ�9Š9‰;Œ;ð 	!˜1Ÿ6š6™8œ8Ô+¨dÒ2Ð2Ø×Ò˜aÑ Ô Ð øàð Øˆtð6•Dð 6ð 6ð 6ð 6ð ‡O‚O˜¨$€OÑ/Ô/Ð/Ø�aŒ=Ðr,   ç      ð?Úboundary_smoothingÚoutput_pathÚcrossfade_durrZ  c                 óü  — t          | ¦  «        }|st          d| › �¦  «         dS g }|D ]A\  }}t          |¦  «        }	|	st          d|› d�¦  «          dS |                     |	¦  «         ŒB|rit          �bd„ |D ¦   «         }
t	          | |
¦  «        }t          d| › d|j        d›d	|j        › �¦  «         |j        st          d
| › d|j        › �¦  «         dS |rt          |¦  «        }nt          t          | › d�¦  «        }t          ��	 t          ¦   «         }|dk    �r	t          |d¦  «        rùg }|D ]M\  }}t          |¦  «        }|r7t          ||¬¦  «        }|                     t          |¦  «        ||dœ¦  «         ŒNt          dt!          |¦  «        › d|j        › d�¦  «         |                     |t          |¦  «        dd¬¦  «        }|rV|                     ¦   «         rBt          d|› �¦  «         t          d|                     ¦   «         j        dz  d›d�¦  «         |S nÈd„ |D ¦   «         }
t          dt!          |¦  «        › d|› d|› d|j        › d�	¦  «         |                     |
t          |¦  «        |d|¬ ¦  «        }|rV|                     ¦   «         rBt          d!|› �¦  «         t          d|                     ¦   «         j        dz  d›d�¦  «         |S t          d"¦  «         n*# t.          $ r}t          d#|› d$�¦  «         Y d}~nd}~ww xY wt1          ¦   «         }g }g }t!          |¦  «        }t3          |¦  «        D ])\  }}	|                     d%t          |	¦  «        g¦  «         Œ*g }|D ]º}	d}	 t7          ¦   «         }|d&d'd(d)d*d+t          |	¦  «        g}t9          j        |dd¬,¦  «        }|j        d-k    rFt?          j         |j!        ¦  «        }tE          d.„ | #                    d/g ¦  «        D ¦   «         ¦  «        }n# t.          $ r d}Y nw xY w|                     |¦  «         Œ»t3          |¦  «        D ]Y\  }}|                     d0|› d1|› d2�¦  «         |r|                     d0|› d3|› d4�¦  «         Œ@|                     d5|› d4�¦  «         ŒZd6 $                    d7„ tK          |¦  «        D ¦   «         ¦  «        } d6 $                    d8„ tK          |¦  «        D ¦   «         ¦  «        }!d9 $                    |¦  «        › d9| › d:|› d;|!› d:|› d<�
}"|d=g|¢d>‘|"‘d?‘d@‘d?‘dA‘dB‘dC‘dD‘dE‘dF‘dG‘dH‘dI‘dJ‘dK‘dL‘dM‘t          |¦  «        ‘}#t          d|› dN|j        › dO�¦  «         t9          j        |#dd¬,¦  «        }$|$j        d-k    rV|                     ¦   «         rBt          d!|› �¦  «         t          d|                     ¦   «         j        dz  d›d�¦  «         |S t          dP|$j&        › �¦  «         dS )Quí  
    GhÃ©p ná»‘i táº¥t cáº£ cÃ¡c shot cá»§a Scene thÃ nh video Master liá»�n máº¡ch
    sá»­ dá»¥ng AudioContinuityEngine.stitch_with_audio_crossfade lÃ m engine chÃ­nh
    (máº·c Ä‘á»‹nh Mode A: boundary_smoothing vá»›i 30ms micro-fade curve=qsin)
    Ä‘á»ƒ báº£o toÃ n 100% Ã¢m thanh AAC, loáº¡i bá»� giáº­t cá»¥t, khÃ´ng gÃ¢y co rÃºt timeline vÃ  chuáº©n hÃ³a -14 LUFS.
    Há»— trá»£ Scene Gate tháº©m Ä‘á»‹nh trÆ°á»›c khi xuáº¥t xÆ°á»Ÿng vÃ  chuáº©n Ä‘áº·t tÃªn versioning _v<N>.mp4.
    u&   [!] KhÃ´ng tÃ¬m tháº¥y shot nÃ o cho: Nu   [!] Thiáº¿u video cho shot u   ! ChÆ°a thá»ƒ ghÃ©p master.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r&   ©rD   ©r~   Úvs     r*   r�   z&concat_scene_shots.<locals>.<listcomp>ò  s   € Ð7Ð7Ð7 a�3˜q™6œ6Ð7Ð7Ð7r,   rr  rQ  r   rs  u,   [!] Scene Gate tá»« chá»‘i ghÃ©p Master cho rA   Ú_masterÚflowkit_smartÚstitch_flowkit_smartr…  )r:   rW  r;   u.   
ðŸŽ¬ Ä�ang ghÃ©p ná»‘i FlowKit Smart Concat (z shots) -> r-  g      à?T)Ú	xfade_durÚnormalize_lufsu)   [âœ“] GHÃ‰P MASTER FLOWKIT THÃ€NH CÃ”NG: u       Dung lÆ°á»£ng: é   ú MBc                 ó,   — g | ]}t          |¦  «        ‘ŒS r&   r¤  r¥  s     r*   r�   z&concat_scene_shots.<locals>.<listcomp>  s   € Ð"?Ð"?Ð"?¨a¥3 q¡6¤6Ð"?Ð"?Ð"?r,   õ   
ðŸŽ¬ Ä�ang ghÃ©p ná»‘i u.    shot báº±ng AudioContinuityEngine crossfade (zs, mode=z) -> )r¡  r«  rZ  u!   [âœ“] GHÃ‰P MASTER THÃ€NH CÃ”NG: ug   [!] AudioContinuityEngine crossfade tháº¥t báº¡i, kÃ­ch hoáº¡t fallback FFmpeg filter_complex concat...u!   [!] Lá»—i AudioContinuityEngine (u9   ), chuyá»ƒn sang fallback FFmpeg filter_complex concat...r  z-vÚerrorz-show_entrieszstream=codec_typez-ofrj   r.  r   c              3   óH   K  — | ]}|                      d ¦  «        dk    V — ŒdS )Ú
codec_typer‡  N)rF   )r~   r  s     r*   rc  z%concat_scene_shots.<locals>.<genexpr>?  s3   è è € Ð^Ð^¸q˜AŸEšE ,Ñ/Ô/°7Ò:Ð^Ð^Ð^Ð^Ð^Ð^r,   Ústreamsú[úk:v:0]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=24[vú_norm]zF:a]aresample=48000,aformat=sample_rates=48000:channel_layouts=stereo[arV  z$aevalsrc=0:d=10.0:s=48000:c=stereo[arÆ   c                 ó   — g | ]}d |› d�‘Œ	S )ú[vr¶  r&   r’  s     r*   r�   z&concat_scene_shots.<locals>.<listcomp>M  s    € Ð9Ð9Ð9¨1˜˜Q˜˜˜Ð9Ð9Ð9r,   c                 ó   — g | ]}d |› d�‘Œ	S )z[arV  r&   r’  s     r*   r�   z&concat_scene_shots.<locals>.<listcomp>N  s    € Ð4Ð4Ð4 a˜	˜Q˜	˜	˜	Ð4Ð4Ð4r,   ú;ú	concat=n=z:v=1:a=0[v];z:v=0:a=1[a]r  ú-filter_complexú-mapú[v]ú[a]r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  u    shot thÃ nh Master (z) qua Fallback Concat...u)   [!] Lá»—i khi ghÃ©p video báº±ng FFmpeg:
)'r‘   rQ   r£   rˆ   r   rX  rZ  rY  r[  r   r„  r™   r[   Úhasattrrý   rD   rõ  rž   r©  rh   rœ   r�   Ústitch_with_audio_crossfaderP   r\   rt  Úextendr]   r4  r5  r6  rj   r±   Ústdoutry  rF   r^  Úranger9  )%ru   r   r¡  rF  rZ  rv  Úvideo_filesr;   r   r¦  Úvideo_paths_strry  Ú
target_outrI  Úshot_entriesr'   r(   Úv_pÚttrg  rX   r=  ÚinputsÚfilter_partsrç   r“  Úhas_audio_listÚhas_aÚffprobe_exeÚ	probe_cmdÚp_resÚp_dataÚv_concatÚa_concatÚconcat_filterr>  r¶  s%                                        r*   ru  ru  Õ  s•  € õ & hÑ/Ô/€KØð ÝÐA°xÐAÐAÑBÔBÐBØˆtà€KØ!ð ð ‰
ˆ�Ý Ñ(Ô(ˆØð 	ÝÐT°ÐTÐTÐTÑUÔUÐUØ�4�4Ø×Ò˜1ÑÔÐÐð ð Õ,Ð8Ø7Ð7¨;Ð7Ñ7Ô7ˆÝ+¨H°oÑFÔFˆÝð  V°8ð  Vð  VÈÔHcð  Vð  Vð  Vð  vCô  vTð  Vð  Vñ  	Wô  	Wð  	WØÔ%ð 	ÝÐkÀÐkÐkÈ]ÔMiÐkÐkÑlÔlÐlØ�4àð NÝ˜+Ñ&Ô&ˆ
ˆ
õ ,­J¸8Ð8LÐ8LÐ8LÑMÔMˆ
õ Ñ(ð%	tÝ*Ñ,Ô,ˆFØ�Ò&Ñ&­7°6Ð;QÑ+RÔ+RÐ&Ø!�Ø"-ð gð g‘J�C˜Ý-¨cÑ2Ô2�CØð gÝ/°¸uÐEÑEÔE˜Ø$×+Ò+½3¸s¹8¼8ÐRTÐadÐ,eÐ,eÑfÔfÐføÝÐzÍÈLÑHYÔHYÐzÐzÐfpÔfuÐzÐzÐzÑ{Ô{Ð{Ø ×5Ò5Ø Ý˜
‘O”OØ!Ø#'ð	 6ñ ô �ð ð &˜z×0Ò0Ñ2Ô2ð &ÝÐRÀjÐRÐRÑSÔSÐSÝÐ`°
·²Ñ0AÔ0AÔ0IÈYÑ0WÐ`Ð`Ð`Ð`ÑaÔaÐaØ%Ð%øà"?Ð"?°;Ð"?Ñ"?Ô"?�Ýð  iµ#°kÑ2BÔ2Bð  ið  iÐrð  ið  ið  JNð  ið  ið  U_ô  Udð  ið  ið  iñ  jô  jð  jØ ×<Ò<Ø#Ý˜
‘O”OØ"/Ø#'Øð =ñ ô �ð ð E˜z×0Ò0Ñ2Ô2ð EÝÐJ¸jÐJÐJÑKÔKÐKÝÐ`°
·²Ñ0AÔ0AÔ0IÈYÑ0WÐ`Ð`Ð`Ð`ÑaÔaÐaØ%Ð%åð  Dñ  Eô  Eð  EøøÝð 	tð 	tð 	tÝÐr°aÐrÐrÐrÑsÔsÐsÐsÐsÐsÐsÐsøøøøð	tøøøõ ‘”€JØ€FØ€LÝˆKÑÔ€Aå˜+Ñ&Ô&ð &ð &‰ˆˆ1Ø�Š�t�S ™VœV�nÑ%Ô%Ð%Ð%ð €NØð %ð %ˆØˆð	Ý%™-œ-ˆKà˜T 7ØÐ!4Ø�v�s 1™vœvðˆIõ
 ”N 9¸TÈÐMÑMÔMˆEØÔ 1Ò$Ð$Ýœ E¤LÑ1Ô1�ÝÐ^Ð^ÀFÇJÂJÈyÐZ\ÑD]ÔD]Ð^Ñ^Ô^Ñ^Ô^�øøÝð 	ð 	ð 	ØˆEˆEˆEð	øøøà×Ò˜eÑ$Ô$Ð$Ð$å˜nÑ-Ô-ð Mð M‰ˆˆ5Ø×Òð H�ð  Hð  HÐ~ð  Hð  Hð  Hñ	
ô 	
ð 	
ð ð 	MØ×ÒÐ q AÐ qÐ qÐmnÐ qÐ qÐ qÑrÔrÐrÐrà×ÒÐ KÀqÐ KÐ KÐ KÑLÔLÐLÐLà�wŠwÐ9Ð9µ°a±´Ð9Ñ9Ô9Ñ:Ô:€HØ�wŠwÐ4Ð4­5°©8¬8Ð4Ñ4Ô4Ñ5Ô5€HØ—x’x Ñ-Ô-ÐsÐs°ÐsÐsÀ1ÐsÐsÐRZÐsÐsÐefÐsÐsÐs€Mð 	�Dðà	ðð 	ðð )ðð 	ð	ð ð	ð
 	ðð
 ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðõ 	ˆJ‰Œð€Cõ 
Ð
g aÐ
gÐ
g¸j¼oÐ
gÐ
gÐ
gÑhÔhÐhÝ
Œ.˜¨T¸Ð
=Ñ
=Ô
=€CØ
„~˜ÒÐ˜z×0Ò0Ñ2Ô2ÐÝÐ>°*Ð>Ð>Ñ?Ô?Ð?ÝÐT J§O¢OÑ$5Ô$5Ô$=ÀÑ$KÐTÐTÐTÐTÑUÔUÐUØÐåÐG¸3¼:ÐGÐGÑHÔHÐHØˆts9   Ä
DK1 È'B9K1 Ë!K1 Ë1
LË;LÌLÍ>BPÐPÐPr—  Úbgm_pathÚambience_pathÚnaming_stylec                 óö  — t          t          t                               | › d�¦  «        ¦  «        d„ d¬¦  «        }|r	|d         }nt	          d| › �¦  «         dS |rt          |¦  «        }n| › d|› �}t          t          |¦  «        }t                               dd¬	¦  «         t          €t	          d¦  «         dS t          |¦  «        }	t          |¦  «        }
t	          d| › d|j        › d�¦  «         t          ¦   «         }|	s|
r€t	          d|	r|	j        nd› d|
r|
j        nd› d�¦  «         |                     t          |¦  «        t          |¦  «        |	rt          |	¦  «        nd
|
rt          |
¦  «        nd
dd¬¦  «        }n4|                     t          |¦  «        t          |¦  «        ddd¬¦  «        }|r(|                     ¦   «         rt	          d|› �¦  «         dS t	          d| › d�¦  «         dS )u|  
    Master Ã¢m thanh toÃ n diá»‡n cho Scene video theo tiÃªu chuáº©n YouTube Green Dollar (-14 LUFS).
    Há»— trá»£ kiáº¿n trÃºc 4-Stem (Stem 1: BGM, Stem 2: Ambience) vÃ  Two-Pass Linear Normalization.
    Tá»± Ä‘á»™ng giáº£i quyáº¿t tÃ i nguyÃªn Ã¢m thanh qua resolve_audio_asset().
    Há»— trá»£ chuáº©n Ä‘áº·t tÃªn _master_audio_v*.mp4 hoáº·c _cinematic_master_v*.mp4.
    rí  c                 ó4   — |                       ¦   «         j        S r7   )rœ   r    r4   s    r*   r+   z$master_scene_audio.<locals>.<lambda>{  s   € �a—f’f‘h”hÔ'€ r,   Tr–   r   u)   [!] KhÃ´ng tÃ¬m tháº¥y master video cho: Fr   r=   Nu5   [!] Lá»—i: AudioContinuityEngine khÃ´ng kháº£ dá»¥ng.u)   
ðŸŽµ Báº®T Ä�áº¦U MASTER Ã‚M THANH CHO: u    (Nguá»“n: rì  u!      Ã�p dá»¥ng 4-Stem Mixing: BGM=ÚNonez, Ambience=r-  ç      ,À)r:   r   Ú	stem1_bgmÚstem2_ambienceÚtarget_lufsÚtwo_passç      ð¿)rß  Ú	target_tprà  u?   [âœ“] HOÃ€N Táº¤T MASTER Ã‚M THANH! Xuáº¥t báº£n pháº©m táº¡i: u&   [!] Master Ã¢m thanh tháº¥t báº¡i cho ú.)rø  r¥   r™   rš   rQ   r   r„  r÷  rN   r[   r�  rž   Úmix_four_stemsrD   Únormalize_loudnessrh   )ru   rÖ  r×  r   rØ  Úmaster_candidatesÚmaster_videoÚ	final_outÚprefixÚresolved_bgmÚresolved_ambrI  rg  s                r*   Úmaster_scene_audiorì  k  s•  € õ Ý�Z�_Š_ Ð6Ð6Ð6Ñ7Ô7Ñ8Ô8Ø'Ð'Øðñ ô Ðð
 ð Ø(¨Ô+ˆˆåÐD¸(ÐDÐDÑEÔEÐEØˆuàð @Ý˜Ñ%Ô%ˆ	ˆ	àÐ-Ð-˜|Ð-Ð-ˆÝ*­;¸Ñ?Ô?ˆ	å×Ò˜d¨TÐÑ2Ô2Ð2åÐ$ÝÐEÑFÔFÐFØˆuå& xÑ0Ô0€LÝ& }Ñ5Ô5€Lå	Ð
`°xÐ
`Ð
`ÈLÔL]Ð
`Ð
`Ð
`ÑaÔaÐaÝ"Ñ$Ô$€Fð ð 
�|ð 
Ýð  _À|Ð2_°,Ô2CÐ2CÐY_ð  _ð  _ð  BNð  mZÐlxÔl}Ðl}ð  TZð  _ð  _ð  _ñ  	`ô  	`ð  	`Ø×'Ò'Ý˜<Ñ(Ô(Ý˜I™œØ+7ÐA•c˜,Ñ'Ô'Ð'¸TØ0<ÐF�3˜|Ñ,Ô,Ð,À$ØØð (ñ 
ô 
ˆˆð ×+Ò+Ý�ÑÔÝ�	‰NŒNØØØð ,ñ 
ô 
ˆð ð �9×#Ò#Ñ%Ô%ð ÝÐ[ÐPYÐ[Ð[Ñ\Ô\Ð\ØˆtåÐB°xÐBÐBÐBÑCÔCÐCØˆur,   râ   Ú	scene_idsÚ
check_onlyÚnormalize_finalc                 óP  ‡ — |€<‰                       ¦   «         dk    rt          }nˆ fd„t          dd¦  «        D ¦   «         }t                               dd¬¦  «         |rt          |¦  «        }n*t          t          ‰                       ¦   «         › d�¦  «        }t          d	¦  «         t          d
‰                      ¦   «         › d�¦  «         t          dt          |¦  «        › d�¦  «         t          d|› �¦  «         t          d	¦  «         g }g }|D ]¢}	t          |	¦  «        }
|
rf|
                     ¦   «         rR|                     |	|
f¦  «         t          d|	d›d|
j        › d|
                     ¦   «         j        dz  d›d�¦  «         Œy|                     |	¦  «         t          d|	d›d�¦  «         Œ£t          d¦  «         t          dt          |¦  «        › dt          |¦  «        › dt          |¦  «        › �¦  «         |rt          d¦  «         |s|ndS |rUt          d¦  «         d                     d„ |dd …         D ¦   «         ¦  «        d!z   }t          d"|› d#|j        › �¦  «         |S |r9t          d$t          |¦  «        › d%�¦  «         |D ]}	t          d&|	› �¦  «         ŒdS t#          ¦   «         }g }g }t%          |¦  «        D ]N\  }\  }}|                     d't)          |¦  «        g¦  «         |                     d(|› d)|› d*|› d+|› d,�	¦  «         ŒOt          |¦  «        }d-                     d.„ t          |¦  «        D ¦   «         ¦  «        }d/                     |¦  «        › d/|› d0|› d1�}|j        |j        › d2|j        › �z  }|d3g|¢d4‘|‘d5‘d6‘d5‘d7‘d8‘d9‘d:‘d;‘d<‘d=‘d>‘d?‘d@‘dA‘dB‘dC‘t)          |¦  «        ‘}t          dD|› dE�¦  «         t1          j        |dd¬F¦  «        }|j        dGk    s|                     ¦   «         st          dH|j        › �¦  «         dS t          dI|j        › dJ�¦  «         |�rt8          ��t          dK¦  «         t9          ¦   «         }|                     t)          |¦  «        t)          |¦  «        dLdMdNd¬O¦  «        }|r±|                     ¦   «         r�|                     ¦   «         rG	 |                     ¦   «          n1# t>          $ r$}t          dP|j        › dQ|› �¦  «         Y d}~nd}~ww xY wt          dR|› �¦  «         t          dS|                     ¦   «         j        dz  dT›dU�¦  «         |S t          dV¦  «         |S |                     ¦   «         r/tA          j!        t)          |¦  «        t)          |¦  «        ¦  «         |S )WuB  
    GhÃ©p ná»‘i táº¥t cáº£ Scene Masters cá»§a má»™t Episode thÃ nh Grand Feature Master hoÃ n chá»‰nh.
    Báº£o toÃ n 100% Ã¢m thanh AAC 48kHz qua FFmpeg filter_complex concat ([v][a])
    vÃ  chuáº©n hÃ³a Ã¢m thanh Ä‘iá»‡n áº£nh chuáº©n EBU R128 (-14 LUFS, TP -1.0 dBTP).

    Tham sá»‘:
        episode_id: MÃ£ táº­p phim (máº·c Ä‘á»‹nh: 'ep01').
        scene_ids: Danh sÃ¡ch scene_id tÃ¹y chá»�n. Náº¿u None, náº¡p 10 scenes chuáº©n (Scenes 01-10).
        output_path: Ä�Æ°á»�ng dáº«n file xuáº¥t tÃ¹y chá»‰nh. Náº¿u None, sinh versioned ep01_full_feature_master_v*.mp4.
        dry_run: Chá»‰ mÃ´ phá»�ng vÃ  in lá»‡nh FFmpeg mÃ  khÃ´ng cháº¡y render.
        check_only: Kiá»ƒm tra tÃ­nh sáºµn sÃ ng cá»§a cÃ¡c file scene masters.
        normalize_final: Thá»±c hiá»‡n Pass 2 EBU R128 Loudnorm cho video thÃ nh pháº©m.
    Nrâ   c                 ó    •— g | ]
}‰› d |d›�‘ŒS )Ú_scenerá   r&   )r~   r“  rb   s     €r*   r�   z+assemble_episode_master.<locals>.<listcomp>Ì  s*   ø€ ÐLÐLÐL¸!˜JÐ5Ð5¨aÐ5Ð5Ð5ÐLÐLÐLr,   r   é   Tr=   Ú_full_feature_masterzP================================================================================u7   ðŸŽ¬ KIEU STORY AI CINEMA â€” ASSEMBLE EPISODE MASTER (rì  u      Quy mÃ´ phÃ¢n cáº£nh: z Scenesu      Ä�Ã­ch xuáº¥t: u     [âœ“] z<18z -> rô  r¬  z.1fz MB)u     [âœ—] u#    -> CHÆ¯A CÃ“ MASTER (Thiáº¿u file)zP--------------------------------------------------------------------------------u   Tá»•ng cáº£nh: u    | Sáºµn sÃ ng: u    | Thiáº¿u: uL   [âœ“] Cháº¿ Ä‘á»™ kiá»ƒm tra (--check): BÃ¡o cÃ¡o tráº¡ng thÃ¡i hoÃ n táº¥t.u)   
[*] Cháº¿ Ä‘á»™ mÃ´ phá»�ng (--dry-run):rÊ   c                 ó(   — g | ]\  }}d |j         › �‘ŒS )z-i )rž   )r~   r   r-   s      r*   r�   z+assemble_episode_master.<locals>.<listcomp>ð  s$   € ÐOÐOÐO±$°!°Q˜~ Q¤V˜~˜~ÐOÐOÐOr,   r’  z ...u)       Lá»‡nh FFmpeg dá»± kiáº¿n: ffmpeg -y z -filter_complex ... uE   
[!] KhÃ´ng thá»ƒ ghÃ©p ná»‘i toÃ n váº¹n Episode Master khi thiáº¿u u    cáº£nh:z    - r  r´  rµ  z_norm];[zH:a:0]aresample=48000,aformat=sample_rates=48000:channel_layouts=stereo[ar¶  rÆ   c                 ó    — g | ]}d |› d|› d�‘ŒS )r¸  z_norm][ar¶  r&   r’  s     r*   r�   z+assemble_episode_master.<locals>.<listcomp>  s,   € ÐFÐFÐF¸Ð3˜qÐ3Ð3¨!Ð3Ð3Ð3ÐFÐFÐFr,   rº  r»  z:v=1:a=1[v][a]Ú_rawr  r¼  r½  r¾  r¿  r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r¯  u'    Scene Masters thÃ nh Feature Master...r.  r   u"   [!] Lá»—i khi ghÃ©p ná»‘i FFmpeg:
u   [âœ“] GhÃ©p thÃ´ thÃ nh cÃ´ng (z).ud   [*] Ä�ang chuáº©n hÃ³a Ã¢m lÆ°á»£ng EBU R128 (-14 LUFS Two-Pass) cho Feature Master hoÃ n thiá»‡n...rÜ  rá  g      "@)rß  râ  Ú
target_lrarà  u   [*] Ghi chÃº: File táº¡m u'    Ä‘Æ°á»£c giá»¯ láº¡i do Windows lock: u0   
ðŸŽ‰ HOÃ€N Táº¤T EPISODE GRAND FEATURE MASTER: u      Dung lÆ°á»£ng: r   r­  uB   [!] Chuáº©n hÃ³a Ã¢m lÆ°á»£ng tháº¥t báº¡i, giá»¯ láº¡i báº£n raw.)"rg   ÚEP01_CANONICAL_SCENESrÄ  r÷  rN   r   r„  rQ   rö  rõ  r�  rh   rˆ   rž   rœ   r�   r^  r\   rt  rÂ  rD   r™  ræ   r3  r4  r5  r6  r9  r[   rå  r:  rP   r7  r8  )rb   rí  r   rH  rî  rï  rÇ  Úavailable_scenesÚmissing_scenesÚscÚm_fileÚ
inputs_strr=  rË  rÌ  r“  r   r-   rç   Ú
v_a_inputsrÕ  Ú
raw_targetr>  r¶  rI  Únorm_okrX   s   `                          r*   Úassemble_episode_masterr  ³  sS  ø€ ð* ÐØ×ÒÑÔ Ò'Ð'Ý-ˆIˆIàLÐLÐLÐL½uÀQÈ¹|¼|ÐLÑLÔLˆIå×Ò˜d¨TÐÑ2Ô2Ð2àð fÝ˜+Ñ&Ô&ˆ
ˆ
å+­K¸J×<LÒ<LÑ<NÔ<NÐ9dÐ9dÐ9dÑeÔeˆ
å	ˆ(�O„O€OÝ	Ð
YÀJ×DTÒDTÑDVÔDVÐ
YÐ
YÐ
YÑZÔZÐZÝ	Ð
=¥c¨)¡n¤nÐ
=Ð
=Ð
=Ñ>Ô>Ð>Ý	Ð
+˜zÐ
+Ð
+Ñ,Ô,Ð,Ý	ˆ(�O„O€OàÐØ€Nàð Jð JˆÝ% bÑ)Ô)ˆØð 	J�f—m’m‘o”oð 	JØ×#Ò# R¨ LÑ1Ô1Ð1ÝÐe˜RÐeÐeÐe¨¬ÐeÐe¸¿º¹¼Ô8MÐQZÑ8[ÐeÐeÐeÐeÑfÔfÐfÐfà×!Ò! "Ñ%Ô%Ð%ÝÐH˜RÐHÐHÐHÐHÑIÔIÐIÐIå	ˆ(�O„O€OÝ	Ð
t�C 	™NœNÐ
tÐ
t½CÐ@PÑ<QÔ<QÐ
tÐ
tÕ_bÐcqÑ_rÔ_rÐ
tÐ
tÑuÔuÐuàð :ÝÐ\Ñ]Ô]Ð]Ø!/Ð9ˆzˆz°TÐ9àð ÝÐ:Ñ;Ô;Ð;Ø—X’XÐOÐOÐ:JÈ2ÈAÈ2Ô:NÐOÑOÔOÑPÔPÐSYÑYˆ
ÝÐl¸*ÐlÐlÐ[eÔ[jÐlÐlÑmÔmÐmØÐàð ÝÐtÕWZÐ[iÑWjÔWjÐtÐtÐtÑuÔuÐuØ ð 	!ð 	!ˆBÝ�-˜2�-�-Ñ Ô Ð Ð Øˆtõ ‘”€JØ€FØ€LÝÐ/Ñ0Ô0ð 
ð 
‰	ˆ‰6ˆAˆqØ�Š�t�S ™VœV�nÑ%Ô%Ð%Ø×Òðe�ð eð eÐ~ð eð eØðeð eØ[\ðeð eð eñ	
ô 	
ð 	
ð 	
õ
 	ÐÑÔ€AØ—’ÐFÐF½UÀ1¹X¼XÐFÑFÔFÑGÔG€JØ—x’x Ñ-Ô-ÐVÐV°
ÐVÐVÀQÐVÐVÐV€MØÔ"¨
¬Ð%PÐ%P¸ZÔ=NÐ%PÐ%PÑP€Jð 	�Dðà	ðð 	ðð )ðð 	ð	ð ð	ð
 	ðð
 ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðð 	ðð ðõ 	ˆJ‰Œð€Cõ 
Ð
P aÐ
PÐ
PÐ
PÑQÔQÐQÝ
Œ.˜¨T¸Ð
=Ñ
=Ô
=€CØ
„~˜ÒÐ *×"3Ò"3Ñ"5Ô"5ÐÝÐ@°C´JÐ@Ð@ÑAÔAÐAØˆtå	Ð
?¨J¬OÐ
?Ð
?Ð
?Ñ@Ô@Ð@ð ñ Õ0Ñ<ÝÐuÑvÔvÐvÝ&Ñ(Ô(ˆØ×+Ò+Ý�
‰OŒOÝ�
‰OŒOØØØØð ,ñ 
ô 
ˆð ð 	�z×(Ò(Ñ*Ô*ð 	Ø× Ò Ñ"Ô"ð sðsØ×%Ò%Ñ'Ô'Ð'Ð'øÝ ð sð sð sÝÐq°j´oÐqÐqÐnoÐqÐqÑrÔrÐrÐrÐrÐrÐrÐrøøøøðsøøøåÐRÀjÐRÐRÑSÔSÐSÝÐW z§¢Ñ'8Ô'8Ô'@ÀIÑ'NÐWÐWÐWÐWÑXÔXÐXØÐåÐVÑWÔWÐWØÐà×ÒÑÔð 	:ÝŒK�˜J™œ­¨Z©¬Ñ9Ô9Ð9ØÐs   Ó
S Ó
TÓ)TÔTc                  óÐ  — t          j        d¬¦  «        } |                      ddd¬¦  «         |                      dt          d d¬	¦  «         |                      d
ddd d¬¦  «         |                      dt          d¬¦  «         |                      dt          d d¬	¦  «         |                      dt          d d¬	¦  «         |                      dt          d¬¦  «         |                      ddd¬¦  «         |                      dt          d¬¦  «         |                      dt          d¬¦  «         |                      dt          d d¬	¦  «         |                      d t          d d!¬	¦  «         |                      d"t          d#d$¬	¦  «         |                      d%t          d d&¬	¦  «         |                      d't          d d(¬	¦  «         |                      d)d*d+dd d,¬-¦  «         |                      d.t          d/g d0¢d1¬2¦  «         |                      d3t          d4¬¦  «         |                      d5d6d d7¬8¦  «         |                      d9dd:¬¦  «         |                      d;dd<¬¦  «         |                      d=t          d>g d?¢d@¬2¦  «         |                      dAddB¬¦  «         |                      dCt          dDdDdEgdF¬2¦  «         |                      ¦   «         }|j        rt          |j        ¬G¦  «         d S |j	        r,|j	        dk    rd n|j	        }t          ||j        ¬G¦  «         d S |j        rt          |j        |j        ¬H¦  «         d S |j        r5t          |j        |j        |j        |j        |j        |j        ¬I¦  «         d S |j        r)t-          |j        |j        |j        |j        ¬J¦  «         d S |j        r0t3          |j        |j        |j        |j        |j        dK¬L¦  «         d S |j        r)t=          |j        |j        |j        |j         ¬M¦  «         d S |j!        r/tE          |j!        |j#        |j$        |j        |j%        ¬N¦  «         d S |  &                    ¦   «          d S )ONuP   THáº¬P NGÅ¨ NIÃŠN - Cá»— mÃ¡y Ä‘iá»�u phá»‘i sáº£n xuáº¥t AI Cinema tá»± Ä‘á»™ng)Údescriptionz--statusÚ
store_trueu3   Xem bÃ¡o cÃ¡o tiáº¿n Ä‘á»™ sáº£n xuáº¥t tá»•ng quan)ÚactionÚhelpz	--episodeu4   Chá»‰ Ä‘á»‹nh táº­p phim cá»¥ thá»ƒ (vd: ep01, ep02))ÚtypeÚdefaultr  z--list-shotsú?ÚALLu9   Liá»‡t kÃª danh má»¥c shot (tÃ¹y chá»�n lá»�c theo scene))ÚnargsÚconstr	  r  z--render-shotu$   Render 1 shot Ä‘Æ¡n láº» qua Muse.ai)r  r  z--input-frameu,   Start Frame chá»‰ Ä‘á»‹nh rÃµ rÃ ng cho shotz--promptu   Prompt ghi Ä‘Ã¨ (náº¿u cÃ³)z--batch-sceneuH   Render tá»± Ä‘á»™ng toÃ n bá»™ shot cá»§a 1 scene theo chuá»—i Head-Tailz--forceu6   Báº¯t buá»™c render láº¡i ká»ƒ cáº£ khi Ä‘Ã£ cÃ³ videoz--concat-sceneuM   GhÃ©p ná»‘i cÃ¡c shot Ä‘Ã£ render thÃ nh Master Scene (báº£o toÃ n Ã¢m thanh)z--master-audiou3   Master Ã¢m thanh EBU R128 -14 LUFS cho Scene Masterz--bgmu)   Ä�Æ°á»�ng dáº«n file BGM cho master-audioz
--ambienceu7   Ä�Æ°á»�ng dáº«n file Ambience (Stem 2) cho master-audioz--crossfade-durrž  u8   Thá»�i gian crossfade Ã¢m thanh giá»¯a cÃ¡c shot (giÃ¢y)z--outputu(   Ä�Æ°á»�ng dáº«n file xuáº¥t tÃ¹y chá»‰nhz--reverse-videou:   Ä�áº£o ngÆ°á»£c 1 file video (video + audio) báº±ng FFmpegz	--reversez--reverse-motionrE  u0   Báº¯t buá»™c cá»� reverse_motion khi render shot)Údestr  r	  r  z--enginer@  )r@  r%   Úmuse_apir  u’   Chá»‰ Ä‘á»‹nh engine render: auto (tá»± Ä‘á»™ng theo gÃ³c mÃ¡y), muse/muse_api (Muse2API Gateway cáº£nh toÃ n), gradio_ltx (cáº­n cáº£nh / previs))r  r	  Úchoicesr  z--assemble-episodeuU   GhÃ©p ná»‘i táº¥t cáº£ Scene Masters cá»§a 1 Episode thÃ nh Feature Master (vd: ep01)z--scenesrd  u3   Danh sÃ¡ch cáº£nh tÃ¹y chá»‰nh cho assemble-episode)r  r	  r  z--checkuC   Kiá»ƒm tra tÃ­nh sáºµn sÃ ng cÃ¡c file master mÃ  khÃ´ng thá»±c thiz	--dry-runu2   MÃ´ phá»�ng quy trÃ¬nh ghÃ©p ná»‘i vÃ  in pipelinez--moderŸ  )rŸ  Ú
acrossfadeÚmicro_crossfader¨  u   Cháº¿ Ä‘á»™ crossfade Ã¢m thanhz--pacing-3beatuU   KÃ­ch hoáº¡t Ä‘á»‹nh dáº¡ng FlowKit Cinematic 3-Beat Shot Formula (0-3s, 3-6s, 6-10s)z--naming-styler—  r˜  u,   Kiá»ƒu Ä‘áº·t tÃªn master audio xuáº¥t báº£nrq   )r  )rE  rI  rJ  )r5   rI  rJ  T)rb   rí  r   rH  rî  rï  )r¡  rZ  )rÖ  r×  r   rØ  )'ÚargparseÚArgumentParserÚadd_argumentrD   ÚfloatÚ
parse_argsÚstatusr  ÚepisodeÚ
list_shotsr  Úreverse_videor?  ÚoutputÚrender_shotrn  rA  r)   rE  rI  rJ  Úbatch_scener{  r5   Úassemble_episoder  ÚscenesrH  ÚcheckÚconcat_sceneru  r¡  rZ  r—  rì  ÚbgmÚambiencerØ  Ú
print_help)ÚparserÚargsÚscenes      r*   Úmainr)  ?  sÈ  € ÝÔ$Øfðñ ô €Fð ×Ò˜
¨<Ð>sÐÑtÔtÐtØ
×Ò˜­#°tÐBxÐÑyÔyÐyØ
×Ò˜¨c¸Èð  TOÐñ  Pô  Pð  PØ
×Ò˜­cÐ8^ÐÑ_Ô_Ð_Ø
×Ò˜­c¸4ÐFtÐÑuÔuÐuØ
×Ò˜
­°dÐA^ÐÑ_Ô_Ð_Ø
×Ò˜­cð  9CÐñ  Dô  Dð  DØ
×Ò˜	¨,Ð=uÐÑvÔvÐvØ
×ÒÐ(­sð  :IÐñ  Jô  Jð  JØ
×ÒÐ(­sÐ9nÐÑoÔoÐoØ
×Ò˜¥c°4Ð>iÐÑjÔjÐjØ
×Ò˜­3¸ÐC|ÐÑ}Ô}Ð}Ø
×ÒÐ)µ¸sð  JDÐñ  Eô  Eð  EØ
×Ò˜
­°dÐAkÐÑlÔlÐlØ
×ÒÐ)µ¸Tð  IEÐñ  Fô  Fð  FØ
×Ò˜Ð%7Ð>NÐWcÐmqð  ykÐñ  lô  lð  lØ
×Ò˜
­°fÐFpÐFpÐFpð  xLÐñ  Mô  Mð  MØ
×ÒÐ,µ3ð  >UÐñ  Vô  Vð  VØ
×Ò˜
¨#°tÐBwÐÑxÔxÐxØ
×Ò˜	¨,ð  >CÐñ  Dô  Dð  DØ
×Ò˜¨LÐ?sÐÑtÔtÐtØ
×Ò˜¥sÐ4Hð  S[ð  S[ð  S[ð  bCÐñ  Dô  Dð  DØ
×ÒÐ(°ð  E\Ðñ  ]ô  ]ð  ]Ø
×ÒÐ(­s¸NÐUcÐewÐTxð  @nÐñ  oô  oð  oà×ÒÑÔ€Dà„{ð 0Ý¨$¬,Ð7Ñ7Ô7Ð7Ð7Ð7Ø	Œð .Øœ¨5Ò0Ð0��°d´oˆÝ�u¨¬Ð6Ñ6Ô6Ð6Ð6Ð6Ø	Ô	ð +Ý˜4Ô-¸D¼KÐHÑHÔHÐHÐHÐHØ	Ô	ð )ÝØÔØÔØŒKØÔ.Ø”;ØÔ*ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 
Ô	ð  ÝØÔØ”*Ø”;ØÔ*ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 
Ô	ð ÝØÔ,Ø”kØœØ”LØ”zØ ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 
Ô	ð ÝØÔØŒKØÔ,Ø”ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 
Ô	ð 	ÝØÔØ”XØœ-ØœØÔ*ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	×ÒÑÔÐÐÐr,   Ú__main__)NN)Fr7   )rH  )Nrß   N)NFF)
NNr%   NNTr   Nr@  F)	FTr%   NTr   Nr@  F)r|  )Nrž  TrŸ  )NNNr—  )râ   NNFFT)aÚ__doc__r²  Úsysr‚   rj   r  r4  r7  Úpathlibr   Útypingr   r   r   r   r   r	   ÚplatformrÃ  Úreconfigurer9  rP   Ú__file__r+  r™  rµ  ÚPROMPTS_DIRr‹  r™   rM   r.  r÷  rf   rl   r°   Úantigravity_critic_gater   r   r   r*  Úprompt_healerr   r   r   Úcontact_sheet_enginer   Úrun_shotr   r   r    r!   r"   r#   rD   r´  r9   rY   Úcontinuity_checkerrZ   Úaudio_continuity_enginer[   r\   r]   ro   rt   r‘   r£   r§   r¨   Ú__annotations__r·   rÛ   rý   rG  rS  rV  r€  rá  ræ  rè  r  r  r?  rE   rn  r{  r„  r�  rÄ  rù  r�  r  ru  rì  r  r)  Ú__name__r&   r,   r*   ú<module>r;     s6  ððð ð ð 
€	€	€	Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ð „<�7ÒÐðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð ˆ4�‰>Œ>×!Ò!Ñ#Ô#Ô*Ô1€Ø˜Ñ(€Ø˜Ñ#€
Ø˜(Ñ"€
Ø˜[Ñ(€Ø˜lÑ*€Ø˜Ñ%€Ø˜*Ñ$€ØÐ">Ñ>Ð Ø!Ð$@Ñ@Ð ð"ØcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcøØð "ð "ð "ð"ØhÐhÐhÐhÐhÐhÐhÐhÐhÐhÐhøØð "ð "ð "Ø!ÐØ"ÐØ!ÐÐÐð"øøøøøð"øøøðØ\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\øØð ð ð ðØaÐaÐaÐaÐaÐaÐaÐaÐaÐaÐaøØð ð ð Ø!%ÐØ!ÐØÐÐÐðøøøøøðøøøð1ØFÐFÐFÐFÐFÐFÐFøØð 1ð 1ð 1ð1ØKÐKÐKÐKÐKÐKÐKøØð 1ð 1ð 1Ø,0Ð)Ð)Ð)ð1øøøøøð1øøøððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øð ð ð ð ðð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øð ð ð ð Ø ÐØJÐJÐJÐð !UÐð !}Ðð	 #ð 	¨#ð 	ð 	ð 	ð 	ð
	ð 	¨ð 	°Dð 	ÀSð 	ð 	ð 	ð 	ð 	ð 	ðøøøøøðøøøð&m ð m¨ð mð mð mð mð Dð °3ð ¸8ÀD¼>ð ð ð ð ð,!Ø8Ð8Ð8Ð8Ð8Ð8Ð8øØð !ð !ð !Ø ÐÐÐð!øøøð$ØVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVøØð $ð $ð $Ø ÐØ!Ð!€JØ#Ð#€K€K€Kð$øøøðð  (¨3¤-ð ¸4ð ð ð ð ð*ð *˜h sœmð *°t¸CÀ¸I´ð *ð *ð *ð *ðG #ð G¨$¨u°S¸$°YÔ/?Ô*@ð Gð Gð Gð Gð( ð ¨°$¬ð ð ð ð ð˜Sð  X¨d¤^ð ð ð ð ð 26Ð �h˜t C¨ Hœ~Ô.Ð 5Ð 5Ñ 5ð Cð ¨D°°c°¬Nð ð ð ð ð4*ð * #ð *°(¸4´.ð *ÈCð *ð *ð *ð *ðZTð T ð T°8¸C´=ð TÐT\Ð]aÔTbð TÐnqð Tð Tð Tð Tðn]#ð ]#¨°°s¸D°yÔ1AÔ(Bð ]#ÈXÐVYÌ]ð ]#ÐfnÐorÔfsð ]#ð ]#ð ]#ð ]#ð@+ð +°3ð +À3ð +ÐX`ÐaeÔXfð +ð +ð +ð +ð\Vð V°3ð VÀ8ÈCÄ=ð VÐ\dÐeiÔ\jð Vð Vð Vð Vðx !%Ø$Ø#'ð	35ð 35Øð35à˜Œ~ð35ð ð35ð ˜C”=ð	35ð
 ˆ3�˜”ÐÔð35ð 35ð 35ð 35ðr %)Ø"'Ø!ðlð lØðlàðlð ˜S”Mðlð  ð	lð
 ðlð ˆ8�CŒ=˜% ¨¤¨sÐ 2Ô3°U¸8ÀC¼=È#ÈsÐ;RÔ5SÐSÔTðlð lð lð lðb !%Ø%)ðOð OØðOà˜Œ~ðOð ˜T”NðOð ˆ8�CŒ=˜#ÐÔð	Oð Oð Oð Oð  !%Ø%)ðIð IØðIà˜Œ~ðIð ˜T”NðIð ˆ8�CŒ=˜#˜sÐ"Ô#ð	Ið Ið Ið Ið1ð 1 x°¤}ð 1ð 1ð 1ð 1ðhð ˜X cœ]ð ¸xÈ¼}ð ð ð ð ð6*ð * Cð *°xÀ´}ð *ÐPTð *ð *ð *ð *ð^ "&Ø%)ØØ#'Ø%)ØØØ"ØØðCð CØðCà˜#”ðCð ˜c”]ðCð ð	Cð
 ˜4”.ðCð ˜T”NðCð ðCð ðCð �dŒ^ðCð ðCð ðCð 
ðCð Cð Cð CðP ØØØ#'ØØØ"ØØðLð LØðLàðLð ðLð ð	Lð
 ˜4”.ðLð ðLð ðLð �dŒ^ðLð ðLð ðLð Lð Lð Lð^4ð 4 Tð 4°ð 4¸cð 4Ètð 4ð 4ð 4ð 4ð #¨H°S¬Mð #¸hÀt¼nð #ð #ð #ð #ðLð Ø"' %¨¨2¡,¤,ðñ ô Ð ð
- 3ð -¨8°D¬>ð -ð -ð -ð -ðd "&ØØØ$ðSð SØðSà˜#”ðSð ðSð ð	Sð
 ðSð ˆd„^ðSð Sð Sð Sðp #Ø#'Ø!%Ø&ðEð EØðEà�sŒmðEð ˜C”=ðEð ˜#”ð	Eð
 ðEð 
ðEð Eð Eð EðR Ø%)Ø!%ØØØ ðIð IØðIà˜˜Sœ	Ô"ðIð ˜#”ðIð ð	Ið
 ðIð ðIð ˆd„^ðIð Ið Ið IðXOð Oð Oðd ˆzÒÐØ€D�F„F€F€F€Fð Ðs  Á6A9 Á9BÂ BÃ
C$ Ã$D	Ã*
C5Ã4D	Ã5DÄ D	ÄDÄD	ÄD	Ä
D ÄD=Ä
D)Ä(D=Ä)D7Ä4D=Ä6D7Ä7D=Ä<D=ÅE ÅE%ÅEÅE%ÅEÅE%ÅEÅE%Å$E%Å)E: Å:F<Æ FÆF<Æ"F6Æ3F<Æ5F6Æ6F<Æ;F<ÇG ÇG)Ç(G)Ç-
G8 Ç8HÈH