§
    Š>¦jô.  ã            
      ó†  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZ ddlmZmZ ddlZe
j                             de	j                             e	j                             e	j                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ dZd	„ Zdd„Zdd„Zdd„Zdd„Zdd„Z dd„Z!dd„Z"dd„Z#dS )u8  
Poe2VisualTool Game Path Resolver Unit Tests
Kiá»ƒm thá»­ toÃ n diá»‡n 4 táº§ng phÃ¢n giáº£i Ä‘Æ°á»�ng dáº«n game Path of Exile 2:
  - Táº§ng 1: Ä�á»�c tiáº¿n trÃ¬nh PathOfExile.exe Ä‘ang cháº¡y qua psutil/win32
  - Táº§ng 2: Ä�á»�c cáº¥u hÃ¬nh config.toml
  - Táº§ng 3: QuÃ©t Registry Windows & Steam library (libraryfolders.vdf) trÃªn má»�i á»• Ä‘Ä©a
  - Táº§ng 4: Há»™p thoáº¡i GUI tÆ°Æ¡ng tÃ¡c prompt_user_for_exe()
Kiá»ƒm thá»­ lÆ°u cache tá»± Ä‘á»™ng (save_game_path) vÃ  xÃ¡c thá»±c tÃ­nh toÃ n váº¹n cá»§a tá»‡p cáº¥u hÃ¬nh.
Bá»‘i cáº£nh: 13/09/2026 (Rule 2)
é    )ÚannotationsN)ÚPath)Ú	MagicMockÚpatchz..)ÚGamePathResolverÚparse_vdf_library_foldersa  
"libraryfolders"
{
	"0"
	{
		"path"		"C:\\Program Files (x86)\\Steam"
		"label"		""
		"contentid"		"123456789"
		"total_size"		"500000000000"
		"apps"
		{
			"228380"		"1000000000"
		}
	}
	"1"
	{
		"path"		"D:\\SteamLibrary"
		"label"		"Games"
		"contentid"		"987654321"
		"apps"
		{
			"2694490"		"45000000000"
		}
	}
	"2"
	{
		"path"		"E:\\Games\\Steam"
		"label"		"FastSSD"
	}
}
c                 ó	  — t          t          ¦  «        } t          | ¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}x}}| d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}x}}| d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}x}}| d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}x}}d}	t          |	¦  «        }g }
||
k    }|sÇt          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}	x}x}}
d}	t          |	¦  «        }g }
||
k    }|sÇt          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |	¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d	x}	x}x}}
d	S )ud   Kiá»ƒm tra bÃ³c tÃ¡ch chÃ­nh xÃ¡c cÃ¡c Ä‘Æ°á»�ng dáº«n thÆ° viá»‡n Steam tá»« tá»‡p VDF thá»±c táº¿.é   ©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚpaths)Úpy0Úpy1Úpy3Úpy6zassert %(py8)sÚpy8Nr   zC:\Program Files (x86)\Steam)z%(py1)s == %(py4)s)r   Úpy4úassert %(py6)sr   é   zD:\SteamLibraryé   zE:\Games\SteamÚ )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   ©r   Úpy2r   Úpy7úassert %(py9)sÚpy9zno path in this text)r   ÚMOCK_STEAM_VDF_CONTENTr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert3Ú@py_format5Ú@py_assert1Ú@py_assert6Ú@py_format8Ú@py_format10s                ú6C:\Projects\Poe2VisualTool\tests\test_path_resolver.pyÚtest_vdf_parser_multi_librariesr4   C   s3  € å%Õ&<Ñ=Ô=€EÝˆu‰:Œ:Ð˜Ðˆ:˜Š?ÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�Œ8Ð7Ð7Ð7ˆ8Ð7Ò7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7ˆ8Ð7Ð7Ñ7Ô7Õ7Ô7ˆ8Ñ7Ô7Õ7Ô7Ð7Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø�Œ8Ð)Ð)Ð)ˆ8Ð)Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ8Ð)Ð)Ñ)Ô)Õ)Ô)ˆ8Ñ)Ô)Õ)Ô)Ð)Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�Œ8Ð)Ð)Ð)ˆ8Ð)Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆ8Ð)Ð)Ñ)Ô)Õ)Ô)ˆ8Ñ)Ô)Õ)Ô)Ð)Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð &(Ð.Õ$ RÑ(Ô(Ð.¨BÐ.Ð(¨BÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð(¨BÐ.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.Õ$Ñ.Ô.Ð.Õ.Ô.Õ$Ñ.Ô.Ð.Ð.Õ.Ô. RÑ.Ô.Õ.Ô.Ð(Ñ.Ô.Õ.Ô.¨BÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø%;ÐBÕ$Ð%;Ñ<Ô<ÐBÀÐBÐ<ÀÒBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ<ÀÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBÕ$ÑBÔBÐBÕBÔBÕ$ÑBÔBÐBÐBÕBÔBÐ%;ÑBÔBÕBÔBÐ<ÑBÔBÕBÔBÀÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBó    Útmp_pathr   c           	     ól  — t          | dz  ¬¦  «        }|j        }d}| |z  } ||¦  «        }d}||u }|�st          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}x}x}x}}| dz  }
|
 
                    dd¬¦  «         |j        } ||
¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}x}}| dz  }| 
                    dd¬¦  «         |j        } ||¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}x}}| dz  }| 
                    dd¬¦  «         |j        } ||¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}x}}| dz  }| 
                    dd¬¦  «         |j        } ||¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}x}}dS )u8   Kiá»ƒm tra tÃ­nh há»£p lá»‡ cá»§a tá»‡p thá»±c thi POE2.úconfig.toml©Úconfig_pathzNonExistent.exeF©Úis)zc%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.is_valid_poe_exe
}((%(py3)s / %(py5)s))
} is %(py11)sÚresolverr6   )r   r   r   Úpy5r   Úpy11úassert %(py13)sÚpy13Nznotepad.exeÚdummyúutf-8©Úencoding)zV%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.is_valid_poe_exe
}(%(py3)s)
} is %(py8)sÚ	dummy_exe)r   r   r   r>   r   zassert %(py10)sÚpy10úPathOfExile.exeTÚpoe_exeúPathOfExileSteam.exeÚpoe_steam_exeúPathOfExile_x64.exeÚpoe_x64_exe)r   Úis_valid_poe_exer   r    r!   r"   r#   r$   r%   r&   Ú
write_text)r6   r=   r/   r)   r0   Ú@py_assert7Ú@py_assert10Ú@py_assert9Ú@py_format12Ú@py_format14rF   r+   Ú@py_format11rI   rK   rM   s                   r3   Útest_is_valid_poe_exerV   P   s(  € å¨H°}Ñ,DÐEÑEÔE€Hð Ô$ÐKÐ0AÐK XÐ0AÑ%AÐKÐ$Ð$Ð%AÑBÔBÐKÀeÐKÐBÀeÐKÐKÐKÑKÕKÔKÐKÐKÐKÐKÐBÀeÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆ8ÑKÔKÐKÕKÔKˆ8ÑKÔKÐKÐKÕKÔKÐ$ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK XÑKÔKÐKÕKÔK XÑKÔKÐKÐKÕKÔKÐ0AÑKÔKÕKÔKÐBÑKÔKÕKÔKÀeÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKð ˜=Ñ(€IØ×Ò˜¨7ÐÑ3Ô3Ð3ØÔ$Ð8Ð$Ð$ YÑ/Ô/Ð8°5Ð8Ð/°5Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð/°5Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ8Ñ8Ô8Ð8Õ8Ô8ˆ8Ñ8Ô8Ð8Ð8Õ8Ô8Ð$Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 YÑ8Ô8Ð8Õ8Ô8 YÑ8Ô8Ð8Ð8Õ8Ô8Ð/Ñ8Ô8Õ8Ô8°5Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð Ð*Ñ*€GØ×Ò�w¨ÐÑ1Ô1Ð1ØÔ$Ð5Ð$Ð$ WÑ-Ô-Ð5°Ð5Ð-°Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð-°Ð5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆ8Ñ5Ô5Ð5Õ5Ô5ˆ8Ñ5Ô5Ð5Ð5Õ5Ô5Ð$Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5 WÑ5Ô5Ð5Õ5Ô5 WÑ5Ô5Ð5Ð5Õ5Ô5Ð-Ñ5Ô5Õ5Ô5°Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð Ð5Ñ5€MØ×Ò˜W¨wÐÑ7Ô7Ð7ØÔ$Ð;Ð$Ð$ ]Ñ3Ô3Ð;°tÐ;Ð3°tÐ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð3°tÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆ8Ñ;Ô;Ð;Õ;Ô;ˆ8Ñ;Ô;Ð;Ð;Õ;Ô;Ð$Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô; ]Ñ;Ô;Ð;Õ;Ô; ]Ñ;Ô;Ð;Ð;Õ;Ô;Ð3Ñ;Ô;Õ;Ô;°tÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð Ð2Ñ2€KØ×Ò˜7¨WÐÑ5Ô5Ð5ØÔ$Ð9Ð$Ð$ [Ñ1Ô1Ð9°TÐ9Ð1°TÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð1°TÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆ8Ñ9Ô9Ð9Õ9Ô9ˆ8Ñ9Ô9Ð9Ð9Õ9Ô9Ð$Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 [Ñ9Ô9Ð9Õ9Ô9 [Ñ9Ô9Ð9Ð9Õ9Ô9Ð1Ñ9Ô9Õ9Ô9°TÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9r5   c           
     óœ  — t          | dz  ¬¦  «        }| dz  }|                     dd¬¦  «         t          ¦   «         }dt          |¦  «        ddœ|_        t          |¦  «        |j        _        t          d	|g¬
¦  «        5  |                     ¦   «         }d}||u}|s—t          j
        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}t#          |¦  «        }|j        }	 |	¦   «         }
||
k    }|�sCt          j
        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t"          ¦  «        rt          j        t"          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}	}
ddd¦  «         n# 1 swxY w Y   t          d	g ¬
¦  «        5  |j        } |¦   «         }d}	||	u }|s½t          j
        d|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}	ddd¦  «         dS # 1 swxY w Y   dS )uC   Test Táº§ng 1: Ä�á»�c tá»« tiáº¿n trÃ¬nh game Ä‘ang hoáº¡t Ä‘á»™ng.r8   r9   rH   ÚbinaryrC   rD   i90  )ÚnameÚexeÚpidzpsutil.process_iter©Úreturn_valueN©úis not©z%(py0)s is not %(py3)sÚresolved©r   r   úassert %(py5)sr>   r   ©zd%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.resolve
}()
}r   Úfake_exe©r   r   r   r>   r   r   úassert %(py11)sr?   r;   )z[%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.resolve_from_running_process
}()
} is %(py7)sr=   r   r   r   )r   rO   r   ÚstrÚinforZ   r]   r   Úresolve_from_running_processr   r    r!   r"   r#   r$   r%   r&   r   Úresolve)r6   r=   re   Ú	mock_procra   r'   r/   Ú@py_format4Ú@py_format6r0   Ú@py_assert8r)   r2   rS   r-   r(   r1   s                    r3   Ú(test_tier_1_resolve_from_running_processrp   l   s©  € å¨H°}Ñ,DÐEÑEÔE€HàÐ+Ñ+€HØ×Ò˜¨7ÐÑ3Ô3Ð3õ ‘”€IØ/½¸H¹¼ÈeÐTÐT€I„NÝ!$ X¡¤€I„MÔå	Ð$°I°;Ð	?Ñ	?Ô	?ð 4ð 4Ø×8Ò8Ñ:Ô:ˆØ#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ý�H‰~Œ~Ð3 Ô!1Ð3Ð!1Ð!1Ñ!3Ô!3Ð3ˆ~Ð!3Ò3Ð3Ð3Ñ3Õ3Ô3Ð3Ð3Ð3Ð3ˆ~Ð!3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�tÑ3Ô3Ð3Õ3Ô3�tÑ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�HÑ3Ô3Ð3Õ3Ô3�HÑ3Ô3Ð3Ð3Õ3Ô3ˆ~Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 Ñ3Ô3Ð3Õ3Ô3 Ñ3Ô3Ð3Ð3Õ3Ô3Ð!1Ñ3Ô3Õ3Ô3Ð!3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4õ 
Ð$°2Ð	6Ñ	6Ô	6ð ?ð ?ØÔ4Ð>Ð4Ð4Ñ6Ô6Ð>¸$Ð>Ð6¸$Ð>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð6¸$Ð>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>ˆxÑ>Ô>Ð>Õ>Ô>ˆxÑ>Ô>Ð>Ð>Õ>Ô>Ð4Ñ>Ô>Õ>Ô>Ð6Ñ>Ô>Õ>Ô>¸$Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s&   ÂH,J9Ê9J=Ë J=ËCOÏOÏOc           	     óÊ
  — | dz  }t          |¬¦  «        }| dz  }|                     dd¬¦  «         |j        } |¦   «         }d}||u }|s½t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|                     dd¬¦  «         |j        } |¦   «         }d}||u }|s½t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|                     dd¬¦  «         |j        } |¦   «         }d}||u }|s½t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}t          |¦  «                             dd¦  «        }
|                     d|
› d�d¬¦  «         |                     ¦   «         }d}||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}t          |¦  «        }|j        } |¦   «         }||k    }|�sCt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }	dd |	iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}}dS )!u3   Test Táº§ng 2: Ä�á»�c cáº¥u hÃ¬nh tá»« config.toml.r8   r9   rJ   rX   rC   rD   Nr;   )zR%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.resolve_from_config
}()
} is %(py7)sr=   r   r   r   z[game]
executable_path = ""
z9[game]
executable_path = "C:\\FakePath\\PathOfExile.exe"
ú\ú\\z[game]
executable_path = "z"
r^   r`   ra   rb   rc   r>   r   rd   r   re   rf   rg   r?   )r   rO   Úresolve_from_configr   r    r!   r"   r#   r$   r%   r&   rh   Úreplacer   rk   )r6   Úcfg_filer=   re   r/   r-   r0   r(   r1   r2   Úescapedra   r'   rm   rn   ro   r)   rS   s                     r3   Útest_tier_2_resolve_from_configrx   ‚   s$  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€HàÐ0Ñ0€HØ×Ò˜¨7ÐÑ3Ô3Ð3ð Ô'Ð1Ð'Ð'Ñ)Ô)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Ð1Õ1Ô1Ð'Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð ×ÒÐ8À7ÐÑKÔKÐKØÔ'Ð1Ð'Ð'Ñ)Ô)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Ð1Õ1Ô1Ð'Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð ×ÒÐYÐdkÐÑlÔlÐlØÔ'Ð1Ð'Ð'Ñ)Ô)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Õ1Ô1ˆ8Ñ1Ô1Ð1Ð1Õ1Ô1Ð'Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1õ �(‰mŒm×#Ò# D¨&Ñ1Ô1€GØ×ÒÐB°gÐBÐBÐBÈWÐÑUÔUÐUØ×+Ò+Ñ-Ô-€HØÐˆ8˜4ÐÐÐÐÕÔÐÐÐÐˆ8˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆ8ÑÔÐÕÔˆ8ÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÝ�‰>Œ>Ð/˜XÔ-Ð/Ð-Ð-Ñ/Ô/Ð/ˆ>Ð/Ò/Ð/Ð/Ñ/Õ/Ô/Ð/Ð/Ð/Ð/ˆ>Ð/Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�4Ñ/Ô/Ð/Õ/Ô/�4Ñ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�Ñ/Ô/Ð/Õ/Ô/�Ñ/Ô/Ð/Ð/Õ/Ô/ˆ>Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/˜XÑ/Ô/Ð/Õ/Ô/˜XÑ/Ô/Ð/Ð/Õ/Ô/Ð-Ñ/Ô/Õ/Ô/Ð/Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r5   c                óœ  — | dz  }t          |¬¦  «        }| dz  }|dz  }|                     d¬¦  «         |dz  }| dz  }|dz  d	z  d
z  }|                     d¬¦  «         |dz  }|                     dd¬¦  «         t          |¦  «                             dd¦  «        }	t          |¦  «                             dd¦  «        }
d|	› d|
› d�}|                     |d¬¦  «         t          j        |dd¬¦  «        5  t          j        |dg ¬¦  «        5  t          d¦  «        5 }t          dt          |¦  «        df¬¦  «        5  |                     ¦   «         }d}||u}|s—t          j	        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd |iz  }t          t          j        |¦  «        ¦  «        ‚dx}}t!          |¦  «        }|j        } |¦   «         }||k    }|�sCt          j	        d!|fd"||f¦  «        d#t          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nd#dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$t          j        |¦  «        t          j        |¦  «        d%œz  }d&d'|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )(uD   Test Táº§ng 3: QuÃ©t Steam libraryfolders.vdf vÃ  phÃ¡t hiá»‡n game.r8   r9   ÚSteamÚ	steamappsT©Úparentszlibraryfolders.vdfÚCustomLibraryÚcommonúPath of Exile 2rH   rX   rC   rD   rr   rs   zK
    "libraryfolders"
    {
        "0"
        {
            "path"      "z;"
        }
        "1"
        {
            "path"      "z"
        }
    }
    Ú_scan_windows_registryNr\   Úget_available_driveszwinreg.OpenKeyzwinreg.QueryValueExr   r^   r`   Úfoundrb   rc   r>   r   rd   r   re   rf   rg   r?   )r   ÚmkdirrO   rh   ru   r   ÚobjectÚresolve_from_system_and_steamr   r    r!   r"   r#   r$   r%   r&   r   rk   )r6   rv   r=   Ú	steam_dirÚ
steam_appsÚvdf_fileÚlib_dirÚpoe_dirre   Ústeam_escapedÚlib_escapedÚ
custom_vdfÚmock_open_keyrƒ   r'   r/   rm   rn   r0   ro   r)   r2   rS   s                          r3   Ú"test_tier_3_resolve_from_steam_vdfr�   �   s;  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€Hð ˜7Ñ"€IØ˜[Ñ(€JØ×Ò˜TÐÑ"Ô"Ð"àÐ0Ñ0€HØ˜Ñ(€GØ˜Ñ# hÑ.Ð1BÑB€GØ‡M‚M˜$€MÑÔÐØÐ*Ñ*€HØ×Ò˜¨7ÐÑ3Ô3Ð3å˜	‘N”N×*Ò*¨4°Ñ8Ô8€MÝ�g‘,”,×&Ò& t¨VÑ4Ô4€Kðð
 (ðð ð &ðð ð €Jð ×Ò˜
¨WÐÑ5Ô5Ð5õ 
Œ�hÐ 8ÀtÐ	LÑ	LÔ	Lð 1ð 1Ý	Œ�hÐ 6ÀRÐ	HÑ	HÔ	Hð1ð 1å	ÐÑ	 Ô	 ð1à$1Ý	Ð$µC¸	±N´NÀAÐ3FÐ	GÑ	GÔ	Gð1ð 1ð ×6Ò6Ñ8Ô8ˆØ Ð ˆu˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆu˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆuÑ Ô Ð Õ Ô ˆuÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ý�E‰{Œ{Ð0˜hÔ.Ð0Ð.Ð.Ñ0Ô0Ð0ˆ{Ð0Ò0Ð0Ð0Ñ0Õ0Ô0Ð0Ð0Ð0Ð0ˆ{Ð0Ð0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�tÑ0Ô0Ð0Õ0Ô0�tÑ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�EÑ0Ô0Ð0Õ0Ô0�EÑ0Ô0Ð0Ð0Õ0Ô0ˆ{Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0˜hÑ0Ô0Ð0Õ0Ô0˜hÑ0Ô0Ð0Ð0Õ0Ô0Ð.Ñ0Ô0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s   Ã:OÄN)Ä"!NÅH,M;	Í/NÍ;M?Í?NÎM?ÎNÎN)ÎNÎN)ÎNÎN)ÎOÎ)N-	Î-OÎ0N-	Î1OÏOÏOc                ó¸  — | dz  }t          |¬¦  «        }| dz  dz  }|                     d¬¦  «         |dz  }|                     dd	¬
¦  «         t          j        |dt          |¦  «        ¬¦  «        5  |                     ¦   «         }t          |¦  «        }||k    }|�st          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j
        ¦   «         v st          j        t
          ¦  «        rt          j        t
          ¦  «        nddt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}ddd¦  «         dS # 1 swxY w Y   dS )u2   Test Táº§ng 3: QuÃ©t Registry Grinding Gear Games.r8   r9   ÚGrindingGearGamesr€   Tr|   rH   rX   rC   rD   r�   r\   r   )z0%(py0)s == %(py5)s
{%(py5)s = %(py2)s(%(py3)s)
}rƒ   rh   re   )r   r   r   r>   zassert %(py7)sr   N)r   r„   rO   r   r…   rh   r†   r   r    r!   r"   r#   r$   r%   r&   )
r6   rv   r=   Úgame_dirre   rƒ   r)   r/   rn   r1   s
             r3   Ú!test_tier_3_resolve_from_registryr”   É   s4  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€HàÐ-Ñ-Ð0AÑA€HØ‡N‚N˜4€NÑ Ô Ð ØÐ+Ñ+€HØ×Ò˜¨7ÐÑ3Ô3Ð3å	Œ�hÐ 8ÅsÈ8Á}Ä}Ð	UÑ	UÔ	Uð &ð &Ø×6Ò6Ñ8Ô8ˆÝ˜H™œÐ%ˆu˜Ò%Ð%Ð%Ñ%Õ%Ô%Ð%Ð%Ð%Ð%ˆu˜Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆuÑ%Ô%Ð%Õ%Ô%ˆuÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�Ñ%Ô%Ð%Õ%Ô%�Ñ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%˜HÑ%Ô%Ð%Õ%Ô%˜HÑ%Ô%Ð%Ð%Õ%Ô%˜Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   Á4EGÇGÇGc           
     ó*
  — | dz  }t          |¬¦  «        }| dz  }|                     dd¬¦  «         t          dt          |¦  «        ¬¦  «        5  |                     ¦   «         }d	}||u}|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}}t          |¦  «        }|j        }	 |	¦   «         }
||
k    }|�sCt          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |	¦  «        t          j
        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}	}
|                     d¬¦  «        }d}||v }|s—t          j        d|fd||f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}}|j        }||v }|sÕt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}}d	d	d	¦  «         n# 1 swxY w Y   t          dd ¬¦  «        5  |                     ¦   «         }d	}||u }|s—t          j        d!|fd"||f¦  «        d#t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd#t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}}d	d	d	¦  «         d	S # 1 swxY w Y   d	S )$u=   Test Táº§ng 4: Há»™p thoáº¡i GUI tÆ°Æ¡ng tÃ¡c ngÆ°á»�i dÃ¹ng.r8   r9   rJ   rX   rC   rD   z"tkinter.filedialog.askopenfilenamer\   Nr^   r`   Úchosenrb   rc   r>   r   rd   r   re   rf   rg   r?   Úexecutable_path©Úin©z%(py1)s in %(py3)sÚcfg_content©r   r   )z,%(py2)s
{%(py2)s = %(py0)s.name
} in %(py4)s)r   r   r   r   r   r   r;   ©z%(py0)s is %(py3)sÚchosen_cancel)r   rO   r   rh   Úprompt_user_for_exer   r    r!   r"   r#   r$   r%   r&   r   rk   Ú	read_textrY   )r6   rv   r=   re   r–   r'   r/   rm   rn   r0   ro   r)   r2   rS   r›   r,   r-   r.   r*   rž   s                       r3   Útest_tier_4_prompt_user_for_exer¡   Ø   s+  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€HàÐ0Ñ0€HØ×Ò˜¨7ÐÑ3Ô3Ð3õ 
Ð3Å#ÀhÁ-Ä-Ð	PÑ	PÔ	Pð ,ð ,Ø×-Ò-Ñ/Ô/ˆØ!Ð!ˆv˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆv˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆvÑ!Ô!Ð!Õ!Ô!ˆvÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ý�F‰|Œ|Ð1˜xÔ/Ð1Ð/Ð/Ñ1Ô1Ð1ˆ|Ð1Ò1Ð1Ð1Ñ1Õ1Ô1Ð1Ð1Ð1Ð1ˆ|Ð1Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�tÑ1Ô1Ð1Õ1Ô1�tÑ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�FÑ1Ô1Ð1Õ1Ô1�FÑ1Ô1Ð1Ð1Õ1Ô1ˆ|Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1˜xÑ1Ô1Ð1Õ1Ô1˜xÑ1Ô1Ð1Ð1Õ1Ô1Ð/Ñ1Ô1Õ1Ô1Ð1Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð ×(Ò(°'Ð(Ñ:Ô:ˆØ Ð/Ð  KÐ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð  KÐ/Ñ/Ô/Õ/Ô/Ð Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ KÑ/Ô/Ð/Õ/Ô/ KÑ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ØŒ}Ð+ˆ} Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆ} Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Ð+Õ+Ô+ˆ}Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ Ñ+Ô+Ð+Õ+Ô+ Ñ+Ô+Ð+Ð+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,õ 
Ð3À"Ð	EÑ	EÔ	Eð %ð %Ø ×4Ò4Ñ6Ô6ˆØ $Ð$ˆ} Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ} Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s&   ÁOP'Ð'P+Ð.P+ÑB8TÔTÔTc                ó€  — | dz  }t          |¬¦  «        }d}|                     |d¬¦  «         | dz  }|                     dd¬¦  «         |                     |¦  «        }d}||u }|s—t          j        d	|fd
||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}}|                     d¬¦  «        }
d}||
v }|s—t          j        d|fd||
f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nddœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}}d}||
v }|s—t          j        d|fd||
f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nddœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}}d}||
v }|s—t          j        d|fd||
f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nddœz  }dd|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}}g }t          |¦  «        }|j        }d}d} |||¦  «        }||
v }|}|st          |¦  «        }||
v }|}|�s±t          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nddœz  }dd|iz  }|                     |¦  «         |�st          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndd œz  }d!d"|iz  }|                     |¦  «         t          j        |d#¦  «        i z  }d$d%|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}x}x}}|j        } |¦   «         }|j        } |¦   «         }t          |¦  «        }||k    }|�sit          j        d&|fd'||f¦  «        d(t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd(t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d)œz  }d*d+|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}}dS ),u_   Kiá»ƒm tra save_game_path báº£o tá»“n nguyÃªn váº¹n cÃ¡c thiáº¿t láº­p khÃ¡c trong config.toml.r8   r9   u¥   # Config gá»‘c
[game]
executable_path = ""
launch_arguments = "--nologo"

[visual]
zoom_cap = 6.5
disable_fog = true

[inspector]
enabled = true
dwell_time_ms = 220
rC   rD   rH   rX   Tr;   r�   Úsuccessrb   rc   r>   Nzzoom_cap = 6.5r˜   rš   Úupdated_contentrœ   zdwell_time_ms = 220zdisable_fog = truerr   rs   )zx%(py13)s
{%(py13)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py2)s(%(py3)s)
}.replace
}(%(py9)s, %(py11)s)
} in %(py15)srh   re   )r   r   r>   r   r   r?   rA   Úpy15z%(py17)sÚpy17)z5%(py22)s
{%(py22)s = %(py19)s(%(py20)s)
} in %(py24)s)Úpy19Úpy20Úpy22Úpy24z%(py26)sÚpy26r   zassert %(py29)sÚpy29r   )z¨%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.resolve_from_config
}()
} == %(py13)s
{%(py13)s = %(py6)s(%(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s.resolve
}()
})
}r=   )r   r   r   r   r   r   r?   rA   zassert %(py15)sr¥   )r   rO   Úsave_game_pathr   r    r!   r"   r#   r$   r%   r&   r    rh   ru   ÚappendÚ_format_booloprt   rk   )r6   rv   r=   Úoriginal_configre   r£   r'   r/   rm   rn   r¤   r,   r)   r0   ro   rQ   Ú@py_assert12Ú@py_assert14Ú@py_assert21Ú@py_assert23Ú@py_format16Ú@py_format18Ú@py_format25Ú@py_format27Ú@py_format28Ú@py_format30r-   r(   rT   s                                r3   Ú,test_save_game_path_preserves_other_sectionsr»   ñ   sÀ  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€Hð€Oð ×Ò˜°'ÐÑ:Ô:Ð:àÐ+Ñ+€HØ×Ò˜¨7ÐÑ3Ô3Ð3ð ×%Ò% hÑ/Ô/€GØÐˆ7�dˆ?ÐÐÐÕÔÐÐÐÐˆ7�dÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×(Ò(°'Ð(Ñ:Ô:€OØÐ.Ð˜Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð˜Ð.Ñ.Ô.Õ.Ô.ÐÑ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜Ñ.Ô.Ð.Õ.Ô.˜Ñ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ø Ð3Ð  OÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð  OÐ3Ñ3Ô3Õ3Ô3Ð Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 OÑ3Ô3Ð3Õ3Ô3 OÑ3Ô3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3ØÐ2Ð ?Ð2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð ?Ð2Ñ2Ô2Õ2Ô2ÐÑ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2 ?Ñ2Ô2Ð2Õ2Ô2 ?Ñ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2ØeÐe�3ˆx‰=Œ=Ðeˆ=Ô Ðe Ðe vÐeÐ Ð   vÑ.Ô.ÐeÐ.°/ÐAÐeÐeÐeÐeÐeÅSÈÁ]Ä]ÐeÀ]ÐVeÐEeÐeÐeÐeÐeÑeÕeÔeÐeÐeÐeÐeÐ.°/ÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe�3ÑeÔeÐeÕeÔe�3ÑeÔeÐeÐeÐeÕeÔeÑeÔeÐeÐeÕeÔeˆxÑeÔeÐeÕeÔeˆxÑeÔeÐeÐeÕeÔeˆ=ÑeÔeÕeÔeÐ ÑeÔeÕeÔe ÑeÔeÕeÔe vÑeÔeÕeÔeÐ.ÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe°/ÑeÔeÐeÕeÔe°/ÑeÔeÐeÐeÐeÐeÑeÐeÐeÐeÐeÐeÑeÐeÐe×eÒeÐeÑeÔeÐeÐeÑeÕeÔeÐeÐeÐeÐeÀ]ÐVeÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔeÅSÑeÔeÐeÕeÔeÅSÑeÔeÐeÐeÐeÕeÔeÑeÔeÐeÐeÕeÔeÈÑeÔeÐeÕeÔeÈÑeÔeÐeÐeÕeÔeÀ]ÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔeÐVeÑeÔeÐeÕeÔeÐVeÑeÔeÐeÐeÐeÐeÑeÐeÐeÐeÐeÐeÑeÐeÐe×eÒeÐeÑeÔeÐeÕeÔeÐeÐeÑeÔeÐeÑeÐeÐeÐeÐeÐeÑeÐeÕeÕeÔeÐeÑeÔeÑeÔeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeð Ô'ÐDÐ'Ð'Ñ)Ô)ÐD°Ô1AÐDÐ1AÐ1AÑ1CÔ1CÐD­SÐ1CÑ-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ˆ8ÑDÔDÐDÕDÔDˆ8ÑDÔDÐDÐDÕDÔDÐ'ÑDÔDÕDÔDÐ)ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD­SÑDÔDÐDÕDÔD­SÑDÔDÐDÐDÐDÕDÔDÑDÔDÐDÐDÕDÔD°ÑDÔDÐDÕDÔD°ÑDÔDÐDÐDÕDÔDÐ1AÑDÔDÕDÔDÐ1CÑDÔDÕDÔDÐ-DÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDr5   c                óP  — | dz  }t          |¬¦  «        }| dz  dz  }|j                             ¦   «          |                     dd¬¦  «         | dz  dz  }|j                             ¦   «          |                     dd¬¦  «         | d	z  d
z  }|j                             ¦   «          |                     d	d¬¦  «         | dz  dz  }|j                             ¦   «          |                     dd¬¦  «         t	          j        |dt          |¦  «        ¬¦  «        5  t	          j        |dt          |¦  «        ¬¦  «        5  |j        } |¦   «         }t          |¦  «        }	||	k    }
|
�sCt          j	        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t	          j        |dd¬¦  «        5  t	          j        |dt          |¦  «        ¬¦  «        5  |j        } |¦   «         }t          |¦  «        }	||	k    }
|
�sCt          j	        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t	          j        |dd¬¦  «        5  t	          j        |dd¬¦  «        5  t	          j        |dt          |¦  «        ¬¦  «        5  |j        } |¦   «         }t          |¦  «        }	||	k    }
|
�sCt          j	        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   t	          j        |dd¬¦  «        5  t	          j        |dd¬¦  «        5  t	          j        |dd¬¦  «        5  t	          j        |dt          |¦  «        ¬¦  «        5  |j        }d} ||¬¦  «        }
t          |¦  «        }|
|k    }|�sVt          j	        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d œz  }d!d"|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )#u>   Kiá»ƒm tra thá»© tá»± Æ°u tiÃªn 4 táº§ng cá»§a hÃ m resolve().r8   r9   ÚprocrH   rC   rD   ÚcfgrJ   ÚsysrL   Úguirj   r\   rt   r   )zd%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.resolve
}()
} == %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}r=   rh   Úproc_exe)r   r   r   r   r   r   rg   r?   NÚcfg_exer†   Úsys_exerŸ   T)Úallow_prompt)zz%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.resolve
}(allow_prompt=%(py4)s)
} == %(py11)s
{%(py11)s = %(py8)s(%(py9)s)
}Úgui_exe)r   r   r   r   r   r   r?   r@   rA   )r   Úparentr„   rO   r   r…   rh   rk   r   r    r!   r"   r#   r$   r%   r&   )r6   rv   r=   rÁ   rÂ   rÃ   rÅ   r/   r-   ro   r(   r2   rS   rQ   rP   rT   s                   r3   Útest_resolve_waterfall_priorityrÇ     s]  € à˜-Ñ'€HÝ¨HÐ5Ñ5Ô5€Hà˜&Ñ Ð#4Ñ4€HØ„O×ÒÑÔÐØ×Ò˜¨ÐÑ1Ô1Ð1à˜ÑÐ!7Ñ7€GØ„N×ÒÑÔÐØ×Ò�u wÐÑ/Ô/Ð/à˜ÑÐ!6Ñ6€GØ„N×ÒÑÔÐØ×Ò�u wÐÑ/Ô/Ð/à˜ÑÐ!2Ñ2€GØ„N×ÒÑÔÐØ×Ò�u wÐÑ/Ô/Ð/õ 
Œ�hÐ >ÍSÐQYÉ]Ì]Ð	[Ñ	[Ô	[ð 3ð 3Ý	Œ�hÐ 5ÅCÈÁLÄLÐ	QÑ	QÔ	Qð3ð 3àÔÐ2ÐÐÑ!Ô!Ð2¥S¨¡]¤]Ð2Ð! ]Ò2Ð2Ð2Ñ2Õ2Ô2Ð2Ð2Ð2Ð2Ð! ]Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆxÑ2Ô2Ð2Õ2Ô2ˆxÑ2Ô2Ð2Ð2Õ2Ô2ÐÑ2Ô2Õ2Ô2Ð!Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¥SÑ2Ô2Ð2Õ2Ô2¥SÑ2Ô2Ð2Ð2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨Ñ2Ô2Ð2Õ2Ô2¨Ñ2Ô2Ð2Ð2Õ2Ô2 ]Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3õ
 
Œ�hÐ >ÈTÐ	RÑ	RÔ	Rð 2ð 2Ý	Œ�hÐ 5ÅCÈÁLÄLÐ	QÑ	QÔ	Qð2ð 2àÔÐ1ÐÐÑ!Ô!Ð1¥S¨¡\¤\Ð1Ð! \Ò1Ð1Ð1Ñ1Õ1Ô1Ð1Ð1Ð1Ð1Ð! \Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Ð1Õ1Ô1ÐÑ1Ô1Õ1Ô1Ð!Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¥SÑ1Ô1Ð1Õ1Ô1¥SÑ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨Ñ1Ô1Ð1Õ1Ô1¨Ñ1Ô1Ð1Ð1Õ1Ô1 \Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2õ
 
Œ�hÐ >ÈTÐ	RÑ	RÔ	Rð 2ð 2Ý	Œ�hÐ 5ÀDÐ	IÑ	IÔ	Ið2ð 2å	Œ�hÐ ?ÍcÐRYÉlÌlÐ	[Ñ	[Ô	[ð2ð 2ð ÔÐ1ÐÐÑ!Ô!Ð1¥S¨¡\¤\Ð1Ð! \Ò1Ð1Ð1Ñ1Õ1Ô1Ð1Ð1Ð1Ð1Ð! \Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Õ1Ô1ˆxÑ1Ô1Ð1Ð1Õ1Ô1ÐÑ1Ô1Õ1Ô1Ð!Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¥SÑ1Ô1Ð1Õ1Ô1¥SÑ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨Ñ1Ô1Ð1Õ1Ô1¨Ñ1Ô1Ð1Ð1Õ1Ô1 \Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2õ 
Œ�hÐ >ÈTÐ	RÑ	RÔ	Rð Cð CÝ	Œ�hÐ 5ÀDÐ	IÑ	IÔ	IðCð Cå	Œ�hÐ ?ÈdÐ	SÑ	SÔ	SðCð Cõ 
Œ�hÐ 5ÅCÈÁLÄLÐ	QÑ	QÔ	QðCð Cð ÔÐB¨TÐBÐÐ¨TÐ2Ñ2Ô2ÐBµc¸'±l´lÐBÐ2°lÒBÐBÐBÑBÕBÔBÐBÐBÐBÐBÐ2°lÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBˆxÑBÔBÐBÕBÔBˆxÑBÔBÐBÐBÕBÔBÐÑBÔBÕBÔB¨TÑBÔBÕBÔBÐ2ÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBµcÑBÔBÐBÕBÔBµcÑBÔBÐBÐBÐBÕBÔBÑBÔBÐBÐBÕBÔB¸'ÑBÔBÐBÕBÔB¸'ÑBÔBÐBÐBÕBÔB°lÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBð	Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð CsH  Ä%KÄ?E5K Ê4KË K	ËKËK	ËKËKËKË9%R6ÌE5RÒR6ÒR#	Ò#R6Ò&R#	Ò'R6Ò6R:Ò=R:Ó[Ó0%Z-ÔE5ZÚ
Z-ÚZÚZ-ÚZÚZ-Ú![Ú-Z1	Ú1[Ú4Z1	Ú5[Û[Û[Û&dÛ>dÜ%c,Ü;Fc	ã	c,ãcãc,ãcãc,ã dã,c0ã0dã3c0ã4dã7däd	ädä
d	ädädä"d)r6   r   )$Ú__doc__Ú
__future__r   Úbuiltinsr!   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úosr¿   Úpathlibr   Úunittest.mockr   r   ÚpytestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Ú src.assistant.game_path_resolverr   r   r   r4   rV   rp   rx   r�   r”   r¡   r»   rÇ   © r5   r3   ú<module>rÚ      s­  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rà XÐ XÐ XÐ XÐ XÐ XÐ XÐ XðÐ ðJ
Cð 
Cð 
Cð:ð :ð :ð :ð8?ð ?ð ?ð ?ð,0ð 0ð 0ð 0ð6)1ð )1ð )1ð )1ðX&ð &ð &ð &ð%ð %ð %ð %ð2#Eð #Eð #Eð #EðL*Cð *Cð *Cð *Cð *Cð *Cr5   