From 9f060db8da39c0ca9d605f340d01088f7021fd16 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Wed, 20 Jul 2005 21:08:13 -0400 Subject: [PATCH] Added ModelConverter C# Project ~g2k --- .gitignore | 3 + ModelConverter/.gitignore | 2 + ModelConverter/App.ico | Bin 0 -> 1078 bytes ModelConverter/AssemblyInfo.cs | 58 +++++++ ModelConverter/MS3DLoader.cs | 17 ++ ModelConverter/Model.cs | 17 ++ ModelConverter/ModelConverter.csproj | 134 +++++++++++++++ ModelConverter/ModelConverter.csproj.user | 48 ++++++ ModelConverter/ModelLoader.cs | 17 ++ ModelConverter/ModelWriter.cs | 17 ++ ModelConverter/OAMLoader.cs | 17 ++ ModelConverter/OAMWriter.cs | 17 ++ ModelConverter/Startup.cs | 22 +++ oa.nsi | 191 ++++++++++++++-------- oa.sln | 8 + oa.suo | Bin 18432 -> 13312 bytes 16 files changed, 498 insertions(+), 70 deletions(-) create mode 100644 ModelConverter/.gitignore create mode 100644 ModelConverter/App.ico create mode 100644 ModelConverter/AssemblyInfo.cs create mode 100644 ModelConverter/MS3DLoader.cs create mode 100644 ModelConverter/Model.cs create mode 100644 ModelConverter/ModelConverter.csproj create mode 100644 ModelConverter/ModelConverter.csproj.user create mode 100644 ModelConverter/ModelLoader.cs create mode 100644 ModelConverter/ModelWriter.cs create mode 100644 ModelConverter/OAMLoader.cs create mode 100644 ModelConverter/OAMWriter.cs create mode 100644 ModelConverter/Startup.cs diff --git a/.gitignore b/.gitignore index 1474e7f..7b2eec2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ Debug oa.ncb +Release +OpenArena-0.1.2-alpha.exe +vc70.idb diff --git a/ModelConverter/.gitignore b/ModelConverter/.gitignore new file mode 100644 index 0000000..1746e32 --- /dev/null +++ b/ModelConverter/.gitignore @@ -0,0 +1,2 @@ +bin +obj diff --git a/ModelConverter/App.ico b/ModelConverter/App.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6 GIT binary patch literal 1078 zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1 z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<{9 literal 0 HcmV?d00001 diff --git a/ModelConverter/AssemblyInfo.cs b/ModelConverter/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/ModelConverter/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/ModelConverter/MS3DLoader.cs b/ModelConverter/MS3DLoader.cs new file mode 100644 index 0000000..78c3143 --- /dev/null +++ b/ModelConverter/MS3DLoader.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for MS3DLoader. + /// + public class MS3DLoader + { + public MS3DLoader() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/Model.cs b/ModelConverter/Model.cs new file mode 100644 index 0000000..17271a7 --- /dev/null +++ b/ModelConverter/Model.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for Model. + /// + public class Model + { + public Model() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/ModelConverter.csproj b/ModelConverter/ModelConverter.csproj new file mode 100644 index 0000000..07d2133 --- /dev/null +++ b/ModelConverter/ModelConverter.csproj @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ModelConverter/ModelConverter.csproj.user b/ModelConverter/ModelConverter.csproj.user new file mode 100644 index 0000000..dcd2b69 --- /dev/null +++ b/ModelConverter/ModelConverter.csproj.user @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/ModelConverter/ModelLoader.cs b/ModelConverter/ModelLoader.cs new file mode 100644 index 0000000..e96643d --- /dev/null +++ b/ModelConverter/ModelLoader.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for ModelLoader. + /// + public class ModelLoader + { + public ModelLoader() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/ModelWriter.cs b/ModelConverter/ModelWriter.cs new file mode 100644 index 0000000..c4f0056 --- /dev/null +++ b/ModelConverter/ModelWriter.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for ModelWriter. + /// + public class ModelWriter + { + public ModelWriter() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/OAMLoader.cs b/ModelConverter/OAMLoader.cs new file mode 100644 index 0000000..5f1eed1 --- /dev/null +++ b/ModelConverter/OAMLoader.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for OAMLoader. + /// + public class OAMLoader + { + public OAMLoader() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/OAMWriter.cs b/ModelConverter/OAMWriter.cs new file mode 100644 index 0000000..a4c292d --- /dev/null +++ b/ModelConverter/OAMWriter.cs @@ -0,0 +1,17 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for OAMWriter. + /// + public class OAMWriter + { + public OAMWriter() + { + // + // TODO: Add constructor logic here + // + } + } +} diff --git a/ModelConverter/Startup.cs b/ModelConverter/Startup.cs new file mode 100644 index 0000000..66a9127 --- /dev/null +++ b/ModelConverter/Startup.cs @@ -0,0 +1,22 @@ +using System; + +namespace ModelConverter +{ + /// + /// Summary description for Class1. + /// + class Startup + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + // + // TODO: Add code to start application here + // + System.Console.WriteLine("Poke!"); + } + } +} diff --git a/oa.nsi b/oa.nsi index 7bd4f51..d36ff67 100644 --- a/oa.nsi +++ b/oa.nsi @@ -11,17 +11,21 @@ Name "OpenArena" ; The installer icon -Icon "${NSISDIR}\contrib\Icons\setup.ico" +Icon "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico" + +; The uninstaller icon +UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico" + ; The file to write -OutFile "OpenArena-0.1.0-alpha.exe" +OutFile "OpenArena-0.1.2-alpha.exe" ; The default installation directory -InstallDir "$PROGRAMFILES\HHPS\OpenArena-0.1.0-alpha" +InstallDir "$PROGRAMFILES\HHPS\OpenArena-0.1.2-alpha" ; Registry key to check for directory (so if you install again, it will ; overwrite the old one automatically) -InstallDirRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.0-alpha "Install_Dir" +InstallDirRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha "Install_Dir" ; The text to prompt the user to enter a directory ComponentText "This will install OpenArena on your computer. Select which options you want installed." @@ -31,121 +35,170 @@ DirText "Choose a directory to install in to:" ;-------------------------------- -; The stuff to install +; Main section docs and libs Section "Base (required)" SectionIn RO - ; Set output path to the installation directory. + ;Dynamic libraries + CreateDirectory $INSTDIR SetOutPath $INSTDIR + File ".\OpenArena\bass.dll" + WriteUninstaller "uninstall.exe" - ; Put file there - File ".\bass.dll" - File ".\license.txt" - File ".\OpenArena User's Manual.doc" - File ".\OpenArena User's Manual.html" - SetOutPath $INSTDIR\OpenArena - File ".\bass.dll" - + ;Documentation + CreateDirectory "$INSTDIR\doc" + SetOutPath "$INSTDIR\doc" + File ".\doc\*.doc" + File ".\doc\*.html" + ; Write the installation path into the registry - WriteRegStr HKLM SOFTWARE\HHPS\OpenArena-0.1.0-alpha "Install_Dir" "$INSTDIR" + WriteRegStr HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha "Install_Dir" "$INSTDIR" ; Write the uninstall keys for Windows - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.0-alpha" "DisplayName" "OpenArena v0.1.0-alpha (remove only)" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.0-alpha" "UninstallString" '"$INSTDIR\uninstall.exe"' + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha" "DisplayName" "OpenArena v0.1.2-alpha (remove only)" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteUninstaller "uninstall.exe" CreateDirectory "$SMPROGRAMS\HHPS\OpenArena" SetOutPath $INSTDIR\OpenArena - CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.0-alpha.lnk" "$INSTDIR\OpenArena User's Manual.html" + CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.2-alpha.lnk" "$INSTDIR\doc\OpenArena User's Manual.html" - SectionEnd -; optional section (can be disabled by the user) +; Source Files required to create and compile a game using the OpenArena SDK Section "SDK" - SetOutPath $INSTDIR - File ".\oa.sln" - File ".\oa.vcproj" - File ".\oa.ncb" - File ".\oa.suo" - File ".\heading.txt" - SetOutPath $INSTDIR\include + CreateDirectory "$INSTDIR\sources" + SetOutPath "$INSTDIR\sources" + File ".\*.txt" + File ".\*.nsi" + File ".\oa.*" + File ".*" + File "Makefile" + + CreateDirectory "$INSTDIR\sources\lib" + SetOutPath "$INSTDIR\sources\lib" + File ".\lib\bass.lib" + + CreateDirectory "$INSTDIR\sources\include" + SetOutPath "$INSTDIR\sources\include" File ".\include\*.h" - SetOutPath $INSTDIR\lib - File ".\lib\*.lib" - SetOutPath $INSTDIR\src + + CreateDirectory "$INSTDIR\sources\src" + SetOutPath "$INSTDIR\sources\src" File ".\src\*.cpp" - SetOutPath $INSTDIR\OpenArena\oa\config + File ".\Makefile" + + CreateDirectory "$INSTDIR\sources\OpenArena" + SetOutPath "$INSTDIR\sources\OpenArena" + File ".\OpenArena\bass.dll" + + CreateDirectory "$INSTDIR\sources\OpenArena\oa" + CreateDirectory "$INSTDIR\sources\OpenArena\oa\config" + SetOutPath "$INSTDIR\sources\OpenArena\oa\config" File ".\OpenArena\oa\config\my.cfg" - CreateDirectory $INSTDIR\OpenArena\oa\maps - CreateDirectory $INSTDIR\OpenArena\oa\music\bgm - CreateDirectory $INSTDIR\OpenArena\oa\textures\menu - SetOutPath $INSTDIR\OpenArena - - CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.0-alpha.lnk" "$INSTDIR\oa.sln" + + CreateDirectory "$INSTDIR\sources\OpenArena\oa\maps" + SetOutPath "$INSTDIR\sources\OpenArena\oa\maps" + File ".\OpenArena\oa\maps\intro.map" + + CreateDirectory "$INSTDIR\sources\OpenArena\oa\music\bgm" + ;SetOutPath "$INSTDIR\sources\OpenArena\oa\music\bgm" + ;File ".\OpenArena\oa\music\bgm\*.mp3" + + CreateDirectory "$INSTDIR\sources\OpenArena\oa\textures" + SetOutPath "$INSTDIR\sources\OpenArena\oa\textures" + File ".\OpenArena\oa\textures\*.bmp" + File ".\OpenArena\oa\textures\*.tga" + CreateDirectory "$INSTDIR\sources\OpenArena\oa\textures\menu" + SetOutPath "$INSTDIR\sources\OpenArena\oa\textures\menu" + File ".\OpenArena\oa\textures\menu\*.bmp" + File ".\OpenArena\oa\textures\menu\*.tga" + + CreateDirectory "$INSTDIR\sources\ModelConverter" + SetOutPath "$INSTDIR\sources\ModelConverter" + File ".\ModelConverter\*.cs" + File ".\ModelConverter\*.ico" + File ".\ModelConverter\*.csproj" + File ".\ModelConverter\*.csproj.user" + + CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.2-alpha.lnk" "$INSTDIR\sources\oa.sln" SectionEnd Section "Media" - SetOutPath $INSTDIR\OpenArena + CreateDirectory "$INSTDIR" + SetOutPath "$INSTDIR" File ".\OpenArena\oa.exe" - SetOutPath $INSTDIR\OpenArena\oa\config + + CreateDirectory "$INSTDIR\oa" + CreateDirectory "$INSTDIR\oa\config" + SetOutPath "$INSTDIR\oa\config" File ".\OpenArena\oa\config\my.cfg" - SetOutPath $INSTDIR\OpenArena\oa\maps + + CreateDirectory "$INSTDIR\oa\maps" + SetOutPath $INSTDIR\oa\maps File ".\OpenArena\oa\maps\intro.map" File ".\OpenArena\oa\maps\oamap1.map" - SetOutPath $INSTDIR\OpenArena\oa\music\bgm + + CreateDirectory "$INSTDIR\oa\music" + CreateDirectory "$INSTDIR\oa\music\bgm" + SetOutPath $INSTDIR\oa\music\bgm File ".\OpenArena\oa\music\bgm\*.mp3" - SetOutPath $INSTDIR\OpenArena\oa\textures + + CreateDirectory "$INSTDIR\oa\textures" + SetOutPath $INSTDIR\oa\textures File ".\OpenArena\oa\textures\*.tga" File ".\OpenArena\oa\textures\*.bmp" - SetOutPath $INSTDIR\OpenArena\oa\textures\menu + + CreateDirectory "$INSTDIR\oa\textures\menu" + SetOutPath $INSTDIR\oa\textures\menu File ".\OpenArena\oa\textures\menu\*.bmp" File ".\OpenArena\oa\textures\menu\*.tga" - SetOutPath $INSTDIR\OpenArena - CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.0-alpha.lnk" "$INSTDIR\OpenArena\oa.exe" - - + SetOutPath $INSTDIR + CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.2-alpha.lnk" "$INSTDIR\oa.exe" SectionEnd ;-------------------------------- - ; Uninstaller -UninstallText "This will uninstall example2. Hit next to continue." - +UninstallText "This will uninstall OpenArena. Hit next to continue." ; Uninstall section Section "Uninstall" ; remove registry keys - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.0-alpha" - DeleteRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.0-alpha + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha" + DeleteRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha ; remove files and uninstaller - Delete /REBOOTOK $INSTDIR\OpenArena\*.* - Delete /REBOOTOK $INSTDIR\include\*.* - Delete /REBOOTOK $INSTDIR\lib\*.* - Delete /REBOOTOK $INSTDIR\src\*.* - Delete /REBOOTOK $INSTDIR\bass.dll - Delete /REBOOTOK $INSTDIR\heading.txt - Delete /REBOOTOK $INSTDIR\license.txt - Delete /REBOOTOK $INSTDIR\oa.ncb - Delete /REBOOTOK $INSTDIR\oa.sln - Delete /REBOOTOK $INSTDIR\oa.sou - Delete /REBOOTOK $INSTDIR\oa.vcproj - Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.doc" - Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.html" + Delete /REBOOTOK "$INSTDIR\oa" + Delete /REBOOTOK "$INSTDIR\sources" + Delete /REBOOTOK "$INSTDIR\doc" + Delete /REBOOTOK "$INSTDIR\*.exe" + Delete /REBOOTOK "$INSTDIR\*.dll" + + ;Delete /REBOOTOK $INSTDIR\lib\* + ;Delete /REBOOTOK $INSTDIR\src\*.* + ;Delete /REBOOTOK $INSTDIR\bass.dll + ;Delete /REBOOTOK $INSTDIR\heading.txt + ;Delete /REBOOTOK $INSTDIR\license.txt + ;Delete /REBOOTOK $INSTDIR\oa.ncb + ;Delete /REBOOTOK $INSTDIR\oa.sln + ;Delete /REBOOTOK $INSTDIR\oa.sou + ;Delete /REBOOTOK $INSTDIR\oa.vcproj + ;Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.doc" + ;Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.html" + Delete /REBOOTOK $INSTDIR\uninstall.exe ; remove shortcuts, if any - Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.0-alpha.lnk" - Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.0-alpha.lnk" - Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.0-alpha.lnk" + Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.2-alpha.lnk" + Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.2-alpha.lnk" + Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.2-alpha.lnk" ; remove directories used RMDIR /r $INSTDIR\include @@ -154,6 +207,4 @@ Section "Uninstall" RMDIR /r $INSTDIR\src RMDIR /r "$INSTDIR" - - SectionEnd \ No newline at end of file diff --git a/oa.sln b/oa.sln index 4adda6a..b992fcc 100644 --- a/oa.sln +++ b/oa.sln @@ -3,6 +3,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "oa", "oa.vcproj", "{6F5D0FF ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelConverter", "ModelConverter\ModelConverter.csproj", "{4327B7E9-B631-479B-8419-BCE37C986360}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -13,6 +17,10 @@ Global {6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug.Build.0 = Debug|Win32 {6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release.ActiveCfg = Release|Win32 {6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release.Build.0 = Release|Win32 + {4327B7E9-B631-479B-8419-BCE37C986360}.Debug.ActiveCfg = Debug|.NET + {4327B7E9-B631-479B-8419-BCE37C986360}.Debug.Build.0 = Debug|.NET + {4327B7E9-B631-479B-8419-BCE37C986360}.Release.ActiveCfg = Release|.NET + {4327B7E9-B631-479B-8419-BCE37C986360}.Release.Build.0 = Release|.NET EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/oa.suo b/oa.suo index 6e2b32d5bc5248fe027fc803a53d6294d484f5ee..442b29e8bee5f8ea6d931ecf4884bcb7484f980a 100644 GIT binary patch literal 13312 zcmeI2du&@*9mh|cW=)@4yRC(?Zl>>zCZtLFTF17;PP(j3+cjNVw!lanH+AdS!FC^0 zQ)&BWgGoI8qZ$$nu|Fm#qX-EBLIWW{-5;nE652n2m^8%xKq^SU3T!o>?>YCzkJyf# zq!BAQ*4OvkbI(1m-}{{V#+7A%{KofIy=98hgQnhG&n_^x~e#P^b$YWtTCm3%4nn8T*e^qR17D=}(&&p?GvyE13I@wnO(|L>!J^()z| zw*P#6t-K(bNDuh;z7Fv3MO*0t_2bLG*3f@08uL?g2sY zQLqNA1?#|iumNlYTKjv!eL!t*=Gp|B!N)-hP>7$?lA5@=tv5Lsi${Y;qJzQiWNO5|zM$Z4VJJB=noL9!8T)X_ zkyv6Vc_y8!KJSr3y`rvJ8j8n82a^M-q2R$-LPRk0cSjS^)PNShM5-%MR!foI{~`#% zrTuVW5>7Y;m7`W0r%ezJNx&IFI4p{O%D@o`xFb#N47Eq#k{Iutv?aahjbMpZ`r%tW zaXMxgjv3%hwb29D$^yjU!X&y^y`;=(+opJNvJ~|6&vGh?<0h-G=K=7lS20X~gUooC zpL#yR$TH05ICqvlOttyJ8DYl~-W{{i|O;xmGLxOJaTdlcXo{+JK$6uF_IU#igZd z*15{l{+IoE1~@q=0*$BPL z4?g0pMbgL%E1fob`fn+ZtDV1erF;b?$$N%AQ&tA!d7SR}?*z{x)Ce&q`RBe}aBs`E z3DjvRYmtA=UHVd~lvI@FNLT7>2fZt)DwV2z-+x#3pg2vZOl?*BesRCG-ZvP#{Bqso z^gdDlU;y^cX4eG9w@NPUX$V~2+Yk_$7T9$Um{;n~;jXrs)&`<&+X4?|$7Gw7e*NwC z$K>;_-hi{3lzv zQh@}iQvZG|7DlgUK&jMB|I#N~gKFhZ`xBSF#-!)sXgYt6PR@=o<6*1+)U%tt_d?MH z`5%|PYWrVB8}G>Ak@lnGPGHmIla-TkSF`m0-Baj)6HQ$zYOWM-_*JTXrr1cai?3UX z-xGgJPb&G(q>Fo5>9}2IS#EhEvfrbgx2ovp6YNGR?Xof6IU>AnBE2xyyqn)PqQVYq z*;~m;thU;+of0s#R1=ZlHp)8rZ!udaY2n>4HP7Q6458f%``vH7ul!y$^1?cW+F5lQ zZQMGOW7|cm#>`}k&CJ^Ox5qsDrZsAYZk<-jJ5Ri5~8ouG>-zsXX!4eE*mwo}q+>E2F>dm5r%8&5*qiyzu7H&n|3+SBk<_6+q} zyaK+TIvFh}ayMOSfx6W@I9BG%;GfQ7z6@PER z+WlY7K7Z}X&tLAcjj8LTRqNkOz5Zy&y%$dGdF9QQo;`T|hu;$4nq+y#z*{xV-6vOlEJi%p`z%*+N_ZFKjpK?rdDhJ zv{yxSn|wVgKX{a}$n(~EIc+Phs+{P*X8ZdwnjCawV81S5dmXSe8ydGc&g(Ac_2H_lbe-tFra zYcuCZ%C@-YIk_#~$1dm`c5{0$jb91iZ(JS))wI?pEG5b{X z`=2WPX2h8ot7w$9W#*fti6*-lR!)zL{TO#26jPd3u<*_rOMa8RuB%QHoc!&_qm>Pj zHIcPea@zbZaycocf(tg>I*j3po#dBS>@$icJoXj#}4a8s;q_k zc2wOCoXQpgjdt$!_IbM6(%RO(l@qCzX0-kZrGY0uiSW-qWeuj{f8_6TN;u@X`5utG zy~?|fIGh60-0V{S*9<|rcB?Y`aVZf zg$d4KPvN%8e$9&BUSFBUug=jJy5t`&7lxWH)W}gWLha)4SclSWDB;EcsWOe{p7(>!$8@sG`H4Ftz>YTejeM z!-{#3Je$RbQ>dtPX-^~P@{Iv)bh>kSW1hp#&)nhSm}Q1S0{A;D)7|**VD+_OF4oH( WQU{s2J1nnKe*Cy`?)v|^0{;cQm5O%& literal 18432 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