From fcd430d65918ef825a4e7cd9fd4953e89820009a Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 09:16:26 +0900 Subject: [PATCH 1/6] Increment version to 1.26.29. Update signed Windows drivers --- Translations/Language.ar.xml | 2 +- Translations/Language.be.xml | 2 +- Translations/Language.bg.xml | 2 +- Translations/Language.ca.xml | 2 +- Translations/Language.co.xml | 2 +- Translations/Language.cs.xml | 2 +- Translations/Language.da.xml | 2 +- Translations/Language.de.xml | 2 +- Translations/Language.el.xml | 2 +- Translations/Language.es.xml | 2 +- Translations/Language.et.xml | 2 +- Translations/Language.eu.xml | 2 +- Translations/Language.fa.xml | 2 +- Translations/Language.fi.xml | 2 +- Translations/Language.fr.xml | 2 +- Translations/Language.he.xml | 2 +- Translations/Language.hu.xml | 2 +- Translations/Language.id.xml | 2 +- Translations/Language.it.xml | 2 +- Translations/Language.ja.xml | 2 +- Translations/Language.ka.xml | 2 +- Translations/Language.ko.xml | 2 +- Translations/Language.lv.xml | 2 +- Translations/Language.my.xml | 2 +- Translations/Language.nb.xml | 2 +- Translations/Language.nl.xml | 2 +- Translations/Language.nn.xml | 2 +- Translations/Language.pl.xml | 2 +- Translations/Language.pt-br.xml | 2 +- Translations/Language.ro.xml | 2 +- Translations/Language.ru.xml | 4 ++-- Translations/Language.sk.xml | 2 +- Translations/Language.sl.xml | 2 +- Translations/Language.sv.xml | 2 +- Translations/Language.th.xml | 2 +- Translations/Language.tr.xml | 2 +- Translations/Language.uk.xml | 2 +- Translations/Language.uz.xml | 2 +- Translations/Language.vi.xml | 2 +- Translations/Language.zh-cn.xml | 2 +- Translations/Language.zh-hk.xml | 2 +- Translations/Language.zh-tw.xml | 2 +- src/Build/CMakeLists.txt | 4 ++-- src/COMReg/COMReg.rc | 8 ++++---- src/Common/Language.xml | 2 +- src/Common/Tcdefs.h | 6 +++--- src/Driver/Driver.rc | 8 ++++---- src/Driver/Driver.vcxproj | 16 ++++++++-------- src/ExpandVolume/ExpandVolume.rc | 8 ++++---- src/Format/Format.rc | 8 ++++---- src/FormatDLL/FormatDLL.rc | 8 ++++---- src/Mount/Mount.rc | 8 ++++---- src/Release/Setup Files/Product64.wxs | 4 ++-- src/Release/Setup Files/ProductARM64.wxs | 4 ++-- src/Release/Setup Files/veracrypt-arm64.cat | Bin 11983 -> 11983 bytes src/Release/Setup Files/veracrypt-arm64.sys | Bin 458424 -> 458424 bytes src/Release/Setup Files/veracrypt-x64.cat | Bin 12022 -> 12019 bytes src/Release/Setup Files/veracrypt-x64.sys | Bin 665280 -> 665272 bytes src/Release/Setup Files/veracrypt.Inf | 2 +- src/Setup/MacOSX/veracrypt.pkgproj | 4 ++-- src/Setup/MacOSX/veracrypt_Legacy.pkgproj | 2 +- src/Setup/MacOSX/veracrypt_fuse-t.pkgproj | 4 ++-- src/Setup/Portable.rc | 8 ++++---- src/Setup/Setup.rc | 8 ++++---- src/SetupDLL/Setup.rc | 8 ++++---- src/Signing/sign.bat | 4 ++-- src/Signing/sign_TESTSIGNING.bat | 4 ++-- src/Signing/sign_test.bat | 4 ++-- src/Signing/sign_test_debug.bat | 4 ++-- 69 files changed, 111 insertions(+), 111 deletions(-) diff --git a/Translations/Language.ar.xml b/Translations/Language.ar.xml index 6f8f3d4703..93c0894d8f 100644 --- a/Translations/Language.ar.xml +++ b/Translations/Language.ar.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.be.xml b/Translations/Language.be.xml index 07f6fb6a0b..cf9d1ea249 100644 --- a/Translations/Language.be.xml +++ b/Translations/Language.be.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.bg.xml b/Translations/Language.bg.xml index b48ee1a7c2..b493930f1e 100644 --- a/Translations/Language.bg.xml +++ b/Translations/Language.bg.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ca.xml b/Translations/Language.ca.xml index d777da983b..56950859ea 100644 --- a/Translations/Language.ca.xml +++ b/Translations/Language.ca.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.co.xml b/Translations/Language.co.xml index a759b24c76..014643abed 100644 --- a/Translations/Language.co.xml +++ b/Translations/Language.co.xml @@ -22,7 +22,7 @@ Information about Corsican localization: https://github.com/Patriccollu/Lingua_Corsa-Infurmatica/blob/ceppu/Prughjetti/VeraCrypt/Traduzzione.md --> - + diff --git a/Translations/Language.cs.xml b/Translations/Language.cs.xml index 6ffb5780c5..a27f882488 100644 --- a/Translations/Language.cs.xml +++ b/Translations/Language.cs.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.da.xml b/Translations/Language.da.xml index 1a8eff06ef..390664f68e 100644 --- a/Translations/Language.da.xml +++ b/Translations/Language.da.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.de.xml b/Translations/Language.de.xml index f759de0bd5..4de98a7335 100644 --- a/Translations/Language.de.xml +++ b/Translations/Language.de.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.el.xml b/Translations/Language.el.xml index 8405239a05..2aab5ab2a8 100644 --- a/Translations/Language.el.xml +++ b/Translations/Language.el.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.es.xml b/Translations/Language.es.xml index ae3a1e1510..1f4f8ffeaa 100644 --- a/Translations/Language.es.xml +++ b/Translations/Language.es.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.et.xml b/Translations/Language.et.xml index e7b0383a99..3908a3ab83 100644 --- a/Translations/Language.et.xml +++ b/Translations/Language.et.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.eu.xml b/Translations/Language.eu.xml index e8eea4ff5b..08d657a5b4 100644 --- a/Translations/Language.eu.xml +++ b/Translations/Language.eu.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.fa.xml b/Translations/Language.fa.xml index eacc297053..5c0177f3db 100644 --- a/Translations/Language.fa.xml +++ b/Translations/Language.fa.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.fi.xml b/Translations/Language.fi.xml index 4abaf40259..5b91002b69 100644 --- a/Translations/Language.fi.xml +++ b/Translations/Language.fi.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.fr.xml b/Translations/Language.fr.xml index f389c0d858..9a12f8ba8d 100644 --- a/Translations/Language.fr.xml +++ b/Translations/Language.fr.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.he.xml b/Translations/Language.he.xml index 4dbd7a93b1..b5a9b9e4a9 100644 --- a/Translations/Language.he.xml +++ b/Translations/Language.he.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.hu.xml b/Translations/Language.hu.xml index 159fdcd556..0765c0ce86 100644 --- a/Translations/Language.hu.xml +++ b/Translations/Language.hu.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.id.xml b/Translations/Language.id.xml index 499c0edadb..04c43154d1 100644 --- a/Translations/Language.id.xml +++ b/Translations/Language.id.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.it.xml b/Translations/Language.it.xml index bcd77d0de4..ad66782f17 100644 --- a/Translations/Language.it.xml +++ b/Translations/Language.it.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ja.xml b/Translations/Language.ja.xml index a18c47451e..ae0d18dae4 100644 --- a/Translations/Language.ja.xml +++ b/Translations/Language.ja.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ka.xml b/Translations/Language.ka.xml index baf2babe41..29e9da0c86 100644 --- a/Translations/Language.ka.xml +++ b/Translations/Language.ka.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ko.xml b/Translations/Language.ko.xml index 98bcb04709..a7a5a8fa25 100644 --- a/Translations/Language.ko.xml +++ b/Translations/Language.ko.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.lv.xml b/Translations/Language.lv.xml index 66e4ae245e..a5f6657607 100644 --- a/Translations/Language.lv.xml +++ b/Translations/Language.lv.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.my.xml b/Translations/Language.my.xml index 6ffb6b34ad..408617555f 100644 --- a/Translations/Language.my.xml +++ b/Translations/Language.my.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.nb.xml b/Translations/Language.nb.xml index 4d0db429ee..d1a3c00227 100644 --- a/Translations/Language.nb.xml +++ b/Translations/Language.nb.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.nl.xml b/Translations/Language.nl.xml index 07cdc48e2f..73affaf79a 100644 --- a/Translations/Language.nl.xml +++ b/Translations/Language.nl.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.nn.xml b/Translations/Language.nn.xml index 4e567044c3..92d2551ab9 100644 --- a/Translations/Language.nn.xml +++ b/Translations/Language.nn.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.pl.xml b/Translations/Language.pl.xml index b39942a742..cd13f8303c 100644 --- a/Translations/Language.pl.xml +++ b/Translations/Language.pl.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.pt-br.xml b/Translations/Language.pt-br.xml index dc05b40924..b2716fa25e 100644 --- a/Translations/Language.pt-br.xml +++ b/Translations/Language.pt-br.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ro.xml b/Translations/Language.ro.xml index fe5f2aa879..c41712bdf6 100644 --- a/Translations/Language.ro.xml +++ b/Translations/Language.ro.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.ru.xml b/Translations/Language.ru.xml index 8efeb997c4..f66d32a329 100644 --- a/Translations/Language.ru.xml +++ b/Translations/Language.ru.xml @@ -1,7 +1,7 @@ - - + + diff --git a/Translations/Language.sk.xml b/Translations/Language.sk.xml index b668ad12a2..3f89228ef8 100644 --- a/Translations/Language.sk.xml +++ b/Translations/Language.sk.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.sl.xml b/Translations/Language.sl.xml index bb698d70c8..e705da4114 100644 --- a/Translations/Language.sl.xml +++ b/Translations/Language.sl.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.sv.xml b/Translations/Language.sv.xml index cd0e756843..a3d5713573 100644 --- a/Translations/Language.sv.xml +++ b/Translations/Language.sv.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.th.xml b/Translations/Language.th.xml index 6d928c57d1..f74894af58 100644 --- a/Translations/Language.th.xml +++ b/Translations/Language.th.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.tr.xml b/Translations/Language.tr.xml index 096d466d8f..bd713ceac4 100644 --- a/Translations/Language.tr.xml +++ b/Translations/Language.tr.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.uk.xml b/Translations/Language.uk.xml index 696d6728a7..e3934aa494 100644 --- a/Translations/Language.uk.xml +++ b/Translations/Language.uk.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.uz.xml b/Translations/Language.uz.xml index 1b2544dc99..512c62fffd 100644 --- a/Translations/Language.uz.xml +++ b/Translations/Language.uz.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.vi.xml b/Translations/Language.vi.xml index fcd8ea34b1..3809fa85f9 100644 --- a/Translations/Language.vi.xml +++ b/Translations/Language.vi.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.zh-cn.xml b/Translations/Language.zh-cn.xml index f8ca529597..72e9c6523f 100644 --- a/Translations/Language.zh-cn.xml +++ b/Translations/Language.zh-cn.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.zh-hk.xml b/Translations/Language.zh-hk.xml index a8c9cad3d6..63e8b141f0 100644 --- a/Translations/Language.zh-hk.xml +++ b/Translations/Language.zh-hk.xml @@ -1,6 +1,6 @@ - + diff --git a/Translations/Language.zh-tw.xml b/Translations/Language.zh-tw.xml index ff2a9d9703..85dbe23af4 100644 --- a/Translations/Language.zh-tw.xml +++ b/Translations/Language.zh-tw.xml @@ -1,6 +1,6 @@ - + diff --git a/src/Build/CMakeLists.txt b/src/Build/CMakeLists.txt index 02036044ac..ec287c8ca6 100644 --- a/src/Build/CMakeLists.txt +++ b/src/Build/CMakeLists.txt @@ -13,8 +13,8 @@ endif() option(VC_WITH_FUSE3 "Link against FUSE3 instead of FUSE2 when packaging" OFF) # - Set version of the package -set( FULL_VERSION "1.26.28" ) -set( VERSION "1.26.28" ) +set( FULL_VERSION "1.26.29" ) +set( VERSION "1.26.29" ) set( RELEASE "1" ) # - Set PROJECT_NAME and CONFLICT_PACKAGE values diff --git a/src/COMReg/COMReg.rc b/src/COMReg/COMReg.rc index bd6da24e47..9a95b1f024 100644 --- a/src/COMReg/COMReg.rc +++ b/src/COMReg/COMReg.rc @@ -27,8 +27,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -45,11 +45,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt COMReg" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCrypt COMReg.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Common/Language.xml b/src/Common/Language.xml index 7eda7890d4..2d30c76e00 100644 --- a/src/Common/Language.xml +++ b/src/Common/Language.xml @@ -1,6 +1,6 @@  - + diff --git a/src/Common/Tcdefs.h b/src/Common/Tcdefs.h index 26449388f4..633da5d1ea 100644 --- a/src/Common/Tcdefs.h +++ b/src/Common/Tcdefs.h @@ -59,7 +59,7 @@ extern unsigned short _rotl16(unsigned short value, unsigned char shift); #define TC_APP_NAME "VeraCrypt" // Version displayed to user -#define VERSION_STRING "1.26.28" +#define VERSION_STRING "1.26.29" #ifdef VC_EFI_CUSTOM_MODE #define VERSION_STRING_SUFFIX "-CustomEFI" @@ -73,9 +73,9 @@ extern unsigned short _rotl16(unsigned short value, unsigned char shift); #define VERSION_NUM 0x0126 // Release date -#define TC_STR_RELEASE_DATE L"April 30, 2026" +#define TC_STR_RELEASE_DATE L"June 2, 2026" #define TC_RELEASE_DATE_YEAR 2026 -#define TC_RELEASE_DATE_MONTH 4 +#define TC_RELEASE_DATE_MONTH 6 #define BYTES_PER_KB 1024LL #define BYTES_PER_MB 1048576LL diff --git a/src/Driver/Driver.rc b/src/Driver/Driver.rc index c68ceade52..48d4815a80 100644 --- a/src/Driver/Driver.rc +++ b/src/Driver/Driver.rc @@ -27,8 +27,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -45,11 +45,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Driver" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "veracrypt.sys" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Driver/Driver.vcxproj b/src/Driver/Driver.vcxproj index 3a1e3cb33c..9a3c5955ea 100644 --- a/src/Driver/Driver.vcxproj +++ b/src/Driver/Driver.vcxproj @@ -111,8 +111,8 @@ - 1.26.28.1 - 05/22/2026 + 1.26.29.1 + 06/01/2026 fltmgr.lib;%(AdditionalDependencies);$(KernelBufferOverflowLib);$(DDK_LIB_PATH)ntoskrnl.lib;$(DDK_LIB_PATH)hal.lib;$(DDK_LIB_PATH)wmilib.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfLdr.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfDriverEntry.lib @@ -139,8 +139,8 @@ copy $(OutDir)veracrypt.inf "$(SolutionDir)Debug\Setup Files\veracrypt.inf" - 1.26.28.1 - 05/22/2026 + 1.26.29.1 + 06/01/2026 fltmgr.lib;%(AdditionalDependencies);$(KernelBufferOverflowLib);$(DDK_LIB_PATH)ntoskrnl.lib;$(DDK_LIB_PATH)hal.lib;$(DDK_LIB_PATH)wmilib.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfLdr.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfDriverEntry.lib @@ -166,8 +166,8 @@ copy $(OutDir)veracrypt.inf "$(SolutionDir)Release\Setup Files\veracrypt.inf" - 1.26.28.1 - 05/22/2026 + 1.26.29.1 + 06/01/2026 fltmgr.lib;%(AdditionalDependencies);$(KernelBufferOverflowLib);$(DDK_LIB_PATH)ntoskrnl.lib;$(DDK_LIB_PATH)hal.lib;$(DDK_LIB_PATH)wmilib.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfLdr.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfDriverEntry.lib @@ -193,8 +193,8 @@ copy $(OutDir)veracrypt.inf "$(SolutionDir)Release\Setup Files\veracrypt.inf" - 1.26.28.1 - 05/22/2026 + 1.26.29.1 + 06/01/2026 fltmgr.lib;%(AdditionalDependencies);$(KernelBufferOverflowLib);$(DDK_LIB_PATH)ntoskrnl.lib;$(DDK_LIB_PATH)hal.lib;$(DDK_LIB_PATH)wmilib.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfLdr.lib;$(KMDF_LIB_PATH)$(KMDF_VER_PATH)\WdfDriverEntry.lib diff --git a/src/ExpandVolume/ExpandVolume.rc b/src/ExpandVolume/ExpandVolume.rc index 30ef289e5d..2ad2046f46 100644 --- a/src/ExpandVolume/ExpandVolume.rc +++ b/src/ExpandVolume/ExpandVolume.rc @@ -192,8 +192,8 @@ IDR_MOUNT_RSRC_HEADER HEADER "resource.h" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -210,11 +210,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Expander" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCryptExpander.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Format/Format.rc b/src/Format/Format.rc index 6525c21c11..a83f7a28f8 100644 --- a/src/Format/Format.rc +++ b/src/Format/Format.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -46,11 +46,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Format" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCrypt Format.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/FormatDLL/FormatDLL.rc b/src/FormatDLL/FormatDLL.rc index 7c2fd43d7e..25d4287896 100644 --- a/src/FormatDLL/FormatDLL.rc +++ b/src/FormatDLL/FormatDLL.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,11 +43,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Format SDK" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCryptFormat.dll" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Mount/Mount.rc b/src/Mount/Mount.rc index 5068ab0106..1d4cbe9344 100644 --- a/src/Mount/Mount.rc +++ b/src/Mount/Mount.rc @@ -587,8 +587,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -605,11 +605,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCrypt.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Release/Setup Files/Product64.wxs b/src/Release/Setup Files/Product64.wxs index 272e424da7..6ce8274041 100644 --- a/src/Release/Setup Files/Product64.wxs +++ b/src/Release/Setup Files/Product64.wxs @@ -4,7 +4,7 @@ - + @@ -13,7 +13,7 @@ - + diff --git a/src/Release/Setup Files/ProductARM64.wxs b/src/Release/Setup Files/ProductARM64.wxs index 456dfa4486..19e559f6e9 100644 --- a/src/Release/Setup Files/ProductARM64.wxs +++ b/src/Release/Setup Files/ProductARM64.wxs @@ -4,7 +4,7 @@ - + @@ -13,7 +13,7 @@ - + diff --git a/src/Release/Setup Files/veracrypt-arm64.cat b/src/Release/Setup Files/veracrypt-arm64.cat index 7f2b0dc92d969d4efd4edc239077287f3682f340..97aa1f5764ac2b2465797472c2153b1b6a23239a 100644 GIT binary patch delta 2910 zcmah~XHXLe7EU8H1EQ4BgY=$+5UNxOHL{@eqlie8Y62*Tflw3!fe-;vmnLnIAiW48 zRVe~0Rl2TpY0^dT*xS3knY$l5Z|2RL?|bjf_v6j?2Al_+Q>=x5^k0Wu3PkIX!woyP z1p5a0U}!87i$tT*s%R7~kWVl=7sAbN=2NvA#+#e3_^vsG7pEA$2|7YW-=iOc5+un$ z2n1obX`dD6gaD+gcvz$YS<7`CaecgvM9jXRJ{&^*uta;-hWoo7BpG-Lf(XU2g;~zt z`qdF}V`pX}@xqQ~;b@X^Z5g$p2`3-L#!Np1^=SWH6Y>wy_raMxQ0clkj^T-Gxm?(b zp2v2gC!%R(_vmwA8&M1Z1HhhyIsgek0n`BKlS=hph{hk8?f?;GRXt%)Cp@Mq8p6$m zc%xM-K{jwY?mf(Y^_uT_pBFxD+j){Xmkk-M58=qMpx5yDkX#1(anlv=kfvF^YnBsBDrNJlDc+Q993do{H$`AN-T4NiE=!ExXQe19 zJrP?0Gif`$x`fH}R7+yFdQjFJ*7eR0c;8(`fcZUBUU*nyWW* zeAQ+qP07-o#J#+cW`FsGmx0H`rMVHsEspDnd*MHs;dgs(qI|`rF)Z~P$J|tVeI4C2 z(@?_{xuJo5YT3`~8T($}R__F>C6OA$=thy=i2QRpj>X0@5ge6$GfBMcS!#T#-I0}5ft59K#WwFYtn71 zBCg=0OvFt2P#Tq>J7jLtw+pc)$3X=8;bG(Xl1=gHoHx8Xjx}ZA)3-}dlsm7x9*go! zQ|^z12$8;!vbslo`$-AvJVzQ~`WT$0-gH9{K7h7N_zD^tqjzz9k81c_wjF&Yije*S zuV*FQ$n2zDPAS0D$$F3*NvXt-uV_3TBw8!Mj{j2*epamL0dD-YjGF^Iuhr#y4q2}Q z`ys!1;=N^Lh0=zy^0trBO2dFFe;%@Q-P1a^Y@bsZ?q5*K;otAEY-;qxq5KwFY_@McxKzo-WGjVB~75NF8@=Ihgx=bkI&Ih@5~A z7ODks=f^dbj5v~h3(YEb>eBG9llbt-C!eQjer0&25pH>azM~eg-X1V&pRwDk>wbEa z7a}?IIM@`-vr{K$d*SXu?QP=Uk6Gl#an8PSgyO!w)i46$*D+lly@Kq3Q1Hh(=Ryhif{!tqy z5IogW7yD|^wJlsZj&C3u_C^T>&PnS$3R!P2e;~!qX_VGqRZBvzj6~4B0C80zY$?aH zQyt(>tv#z@<_Q{&5e!Ye?DXHhC;+gKor$465Vv2lVMd$~!mP9Xld+Enz0A1#lYH-^ zGesGhV)3aV<<476tNNYGm(wNRJj0mZ3(1Rf=j9T+jR=OfL*RL@ zKqJMlfmc+gLTaR4hiQwcyHLj{DryrkDU#kpvK7*EP$$&4XlyhEp54*wSL@`9D_mtb z02&hPV2jF!x{U&=npuj$y19|r0c!UC?AG{MEn2Z%Z|&Gx4(kJh`2Gb|CS$F(?3Vmv zIQ5|E{pe%4RE=PTw~5qDp`(R;Q=@Y!5FO2LJ5}qV@+^OviHM8=A1YM#$hRa+YCHU9 zPHEj{hJiF#Cnq{4RUwA{UFNKNce?`e9Gvqn7egUYDrm>Q02TC~0FsE*gtEy)fe>J< z0~-X0Qb5Wf*+5Ky)sqDvAOOjHl0YDi(tj6cJ^y5Txl8GRvX-Rm5E9~IzO~ywJ}8Y_ z{kjd$mPqh3Sq8gY7S@l+ zHMM7F&kc}nOlgxY9&mdS3UmLFPcRGuHgFX;y8`5rs|-V4X^2fLfxr(CI*V4CPi_F>c<_k`}QjqP9)j?{oKwJSvNwy<5# zXptRw%RWWi{dZ*za${EZ(!1o1^>rmwnHQ)lLoGPQ21ItEH_N5|-!pKP*F(@uQZV>- z<6#r4UEj7_vLD^2f8NPx;?z8tG-n+j4s@Zvk{3Zt((cqv;%^M;hkbOu-N!6n$+9Ir zQ>VB#pMHSVm|u;jAIT?@{^!*o&p{B8g>gcwtwuVE*=0u|K~d9l4x z{3^+^*+i>@8@posuD2_q=HmKI-;Rh+I1@>%jSwh3rs3gt#ubsif-#*Ri9;J8#895F zPa)!1;-zZTx`_^Gt^2?saW0{}OLxfTlG9)${(Q7f*%iqLLmHZ$YsYO0*FU9c4N8%Q zyyG-%)$IKI1hkHdazhse*=H6#bHHx#Y_0f4Zj|XZ79Bwk_mfg-a~Nv~r0vEm4OM^5 zdUWlxDU}@>&Q)}u=(e(GH>)jQCEz7aY#Ps~yClQde0}^mWL)WTzRzSp)tHJz%Dq#c zGuD%sm!HynsUnOAhL)zXj;}e}?2}1NJZBR%opKnrd1p*SL)Djao-HdWV{I=7V``i3x@80tne5v@b6R7UA$0ou+a7_He3D{-jYdL_SBj~@>0_oQZKGiE9H!Y@zQ%@Lyu~$P*WvlPk#Ka z;59O`aW(7uQ{fBcIf-i-tK8V3l4@K|;<7dCx1w)DYio;jrMK56{6o|)Bs-7omJBc{ Y!EEDIm34^VL9-Djp$n}QQX}&J1P;C|h5!Hn delta 2912 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 delta 2898 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 diff --git a/src/Release/Setup Files/veracrypt-x64.cat b/src/Release/Setup Files/veracrypt-x64.cat index f11982e5338aac104ab4d85406e8f69f7f11b059..a2cc05d1de54a95a398d68b4ff8e5a9bd5e45d0f 100644 GIT binary patch delta 3020 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 E0UU-^(EtDd delta 3066 zcmai$cU05K7RQqidWS&hO+cFP3n37y^scZ7vI#ASAPUlyUSa}L6onY1g8`&TFN$2p5 zW`t0P$}>mk0|~Azwp}j#ShhLNkVq@_V-KzKgR`ru11MEh1b_knG%0{zh6sj2C17)7 zL7~-V1KQk1W#vsGhuLvUBKL$GN;<$6g^6-mD`XpRx8}cz073y2=Dh3CX0M{xlW_Ck zoTN`DldbZ1O|m5V@VMW&!GKKZ4E9T!ePWmTK1+lR;_<=>WNgGwC6e)k?Ni^R!v zI|pSvTSJa1iSHzYws(H{i9`)IX~7YMc~U_VIe|{^U!~+ZI!93iNCSibsezCn)gupe zWWdotfYgtOIvE2MWd=a#KTMr$K*!r~2P(|PVGa<5j3Hn!KqvtSx5-~69LQXJ8Sje1lz&&1yz!3E7(CN{8Sx z$&*NZf_3Grm(Wjp!KvkOyJZCv7egGmNlb2_FMy4S^!8b&hxiJoeiu*UlnSe^jbPa3rL;dX+HO3Pu_j80Rwd2kkAg+b2Hpja7*r-?LtBHsir-)C_gVynaMQQ9n|b{RFDn3x0z z!^LGzpY?J9URB`l%tfdol{L}iLwF4YrAn?9P(OA65EO8d?>J1qg5cxMmI^i$7x_$;m>J_^u)KT5G)z z@2F;vJ6TmmRAd0vt57cAqKi>q2$ zm+C2e7G9(Ke)qy(79|sB^~(24!cJfW#SIy##O(}FbA;}#dNkf`&4cbIMfDkDsbwl# zur+m``Q&Ztvgm6^dw9nqe4nS3anht$z*h&$aj)^D z^udbu(39i!ybUQ`jse?#hhkzjD3AHUEKXUYsLf(1E(_b;~ z%xUIV$uS&)uEn#Xcz~<7Og?YK^Q?)NO%B$dIN3f`!QQliTe>YfF|knKk%x@BQJbEg zBDs__gp1aifDWZFN93O>dPp(PHd+XKYSHU37UQDWN4p%Pkyz+g_IdUS4YV?Ne5ORL zX$6I;_>`YEp;s>1{p7_9mH?CrOJ%OB9^`OwOV0Kp+XW*eloOY|My?VOfZ0}l@W`M$ zUGPcMlcf}%8)bF2->6|iL<@{J^`;NuitM?@Bw`>jo3d-QfcWx=v?!4NH5F()^?B%p zTB!WN{n&%_&eGk>=Aj}o%>FnE+#p2(nW_ZgRp*Phq@MU z;YbzEID_AO-R!rqT72rTa{JzU!;_m!Q;AG(KY#cC&;*byu{@5<-KKn5A}aK<9xU{+ z4lj#pU&_2Lsw8aP?p9ZG!1wck-{UEwCM(9K+guS9L6yQ^r8Z+u9%{hest$>wZv^vh zAwuY&gDn)|Vty-Sl6#s2Jubn-&8J<#UEFheMVoum;?G*y&*>(nU%D%-1FdAGu5QOdBF{mc zSMG%AVmX5p+UW8`>=I&~7Jaw4EWCci`nu7(Y<4*+cyCJ#JpZce@y)BS!>T`Wh~u&M zs(WVsdm|RMXzfM^Xk|-HN&~M%7$ZFfAVLhtsmH5-RSl5$ zNIH#=<}b;aa#{EmX@5XUfb+kl3;@&s1Pc2%K>h`QP(b&uA{vKbfr1e#zzKi_LJwLw z3IG9vj(ji(0s+5;fDZx2KYX6vKLxG9Yrh2Q|Fa!}kOO1^wj)BWl1JfnOCaeZ0>b1g z!<40*u^dkCVVdq^ZINaJp1zrz*Ylg?K+8Tz=R&<+OUOs8+rFhkwOt3kwel(Tfre^e zr{Ueeth2pQA%FshZ9GH?GMTl(Li?!ul|$@Pz8h{)XfU%)#km8Kf9RRX99(3(HICz- zKk4aMnci}e>cbeqw1iJBi_T4N42z$6IuNXNL9O&#%Gx$1{$Z`thD4aw@uG=Jt+{CR zYz-OdhB4Gm9Bq8q2W@Ra4FQ?V!3DUn*ew+@j~dE}`!`2eoa>oQ6QR=e*_8!DPamrD z18Z2?f+Q(}P^#^1@YG>Cs1d0OEP=RdnctfIcF zUZkm}EZ>RH{^5~}b)gIMmuAqH;8)d*lPB6p$+9M&0KyLj*1x`4%v=x^1Yrpv%maj3 zfY1(=82)C9({pL+&*K>|uKJvLT5^H$q>^Ilq*y2X5qTEtM3z)a#{c73Knf}`)4fIJ zA3pmIn@u7eP-?~r{^p{B6aI$D-uB#Vil9b-{qN=pW~B!~i4c&TyKDROZ+1(3<&Whf zN`Z{f&jYCEAJQgeEeKYre$y~YhCm+u&T_?i2vRnB-nq4!oJ)LGt!V$Wf&-;IU_zK#B*4vbpdyI$aX*^rl-!`UW-LQ zQ6w<6vw8`bG#!NHh6b78qcsw}`xs)2nsQunlzz@kQO|pEpOgBaH(>oSw-}! z+`nTtI5&%U^tQoAI_BZMq)~MtgF&{AyGT7R%7#&R2~Vn>(Hf6wtEt8_AHzrA9GLVs zjdl<1!x_<)8?%ShrEa8M>-p=sSjVfH$0F_PgiYf8?D$ZV1Q=PK6EsEVY`FRf~ z+(p9c3aeI%pRJchHM_~zTpD(gmof|KeYq|d;Rgdu1nm8kSdF!giHYwgMu9wNcNX>$ zXdC`go%3e(VI_-tmUI%4!e;Im?a-EK@v22lcX0WH(Qr%Vs>!D^5MQwL3EI=^9LYk~ o-Iy;-I_0l9?a~qn;PW{adxu);f@%q$?^QJ!r-jc!p_laj19)R#8vp>hu5s72I{#mvLHB*{z2C?4^r`OZ>Qr4_U0vNn{)M2t3qcE;N*{zp z&0;gdKlwR~UD3A1w?IAG#il9gb}b}8>X8&XQGu;vGXS4gNs1k>HVM!+{=?+8t58-VH6@SU`f-qo~4G}aydM|MjlT-!CwoCep?Zv!(2gEkg zl0GVjY%+_82Z=N~L+oiBGgXR}L=WS>=~5#iJ}|z>madCp5G$A|xm5n~ktmc`(#h9! z@+H$_P!?`*WoXDrT|Ng{XPN&Htn3 z8f^YT>A2I7HvhBcS*-UW)ZE=TYmwBMO0PnUzb}&5C z719QA9SdG5`G_xB>y=3TZhW~?@*v^@qwQL$pD1o%BiBh)#Xz=jowPvg%ly_$Jw#%h z24E$<^)}wwD&3PrXLe}2w94hu`=q|&BDQ^>)ZKn#Kc%~`cz0_u z=l!TO#hAKZvJ=%qs;C5A*69o@RsY9J|Lw^S%)pXzkCqApK?$Nv3FM}4FYe-o8=t@U(OjnACzoFvDirRq?OiUZR6S# z(o)giCGo%by*i1v@h`tmB(jVhQcX6a0EJJp6{o?a^#xM2y{HgcSl^SqDnJu^S=dQw z0_V?3X|dfF2$hac;(5~rraL7Ka%uP-qmz3Cgh00adY83lr%y@QeshsmF;9Hj+gQ5M z=i5AWVS`Rf4aA1L1KlcbL!XhOOwOg&>~(?U!raeD!D0^TtBS*9OLK_L&{VCf4c)zTL)w)UJ9E`8m|E)-%~ z-kg(~+AmwL^yo6whv_HQvPStM^>;Hl|*aS}V)yx}*zhA14ZNT=*;av?sXN=3r?HWD9SSaQZ70e!jiHmGANa6!L;;7PfKU?xxKD-xwhh;^9H z9Z+9+ZXsBH2L$OAiFZhd?#9r&(i2e(V{X4oHN;9R`gbUiKUq%>uCU1*>}TwE$yfY= z897K}H#z9U-gD4^x!wnGW)T3=yQeJmKJ?*rHj!gdkOLIt00r+$lWnIwv#>W`&3a8G z-YmJNiWsMsO4CH~8vFD>8YBM3hCh^QiM!achf-JZ9((mrnjroDkd1gKxjPMoA$BAkEE{BgGcQ3L#Z{3cq|1=4<9JBY}#YVK{T@Yk3sO{Atwl8j!&fi zVk%32BGq?a1~r+h9<=7wa2W&R6a87N;4Lx2x7ziFeuSy{dPa`W^u`I(=GzgHAs+z%3=F zQ%p)s=a?=!`Gqd$MY2w&2mP%e&!=_z_zz+EVa1wt@nL`K<1cHvEmw! zlT;dSXe)*l>wDhSr#z043pDFAj!C9C`J_JOdQ5@IHBSB%U#&p?s5$)5BTgo~oA5h5}@iEnOxnw#eEGq3Sg@bw&Thp)$YD}DH03sf`Yh1XT5g7cdzeBrqx6#`Fs|$2j>z zoIYxI6Klk#U6<)$#E@CZbgzdX=;<~jV=zefm=n-V!gw`^`vX@V5mubZ8=Zj`d%m#r zF$yFz#`%O5bBhca1#6uuy1gp`@I0S5A5?$CqY(YBg|FdV2GyQE3B5q&Ld? zICRv&g!GWGVl)v6!aPBP?o}&|Yf`HDp&+K<4;#I`qtcy&7YZJz^!Aw!K2}0`$E;5= z>1jjKHBtRzlH$^BvOW$Rl{PfZHS3dZ(%{kQ6Qa^lZ~Ex0kE3{VgY#f;%s>lw8!P-? z2MN?1EZ~xtR0`qK(<9ziLcvR)m}=&nX_u|_QR_iC4!ttOSYxPM@ZQE0{7L0g1(~KQ zh*v8t_|qo7+ItHNVi2L}C?eBV_(B$K<8%M!^IT{Vu5e&;&YSh&A&8uC00(6nW1)a&p2#HfAB_&W7ZiR6H zerQz~q!~@8-je_u-KG7F6Y^9sqDTFIsGyGvh>nx-Ih+czLjr`?tktnAhg3s6c70az zbv$2pSg`q?f7aOXu&TXi7x#%`B-n7x+OfvnM^u|dyG0)?s35cUxUv5+RTWV){yj&{ z3)qbY%-WxgGmooMD)~2AAPVSYS>ZwpY`4k+b5>j66!xiDl_Z86b>~#4s)!eicK1|$ z{F~@-?l83X)9f_q<)Ouk1zD74@RgvOUHTW>u~z%1hsnLh%$kERq6AT*jtJ zWWU&kg{sIAaRK{NMNWz(Y!4wvCCw5xni8Yfnboi&`*2pdV@2}C2W+J^Xna_28?p^& zrb=q0cCm|UvPH6*&oXRDo|wq$S0cNx(LJa{s={<;#Gd?|`Sy{OkUm|eHvu8jYMp^L zdTlnB$I7(Gg7TK>VoS_Prt|(KTl5NKo-$o)LAlFxuqCEJ9s7}~gQf=NluUa8=nVF~ zQE@JIW^F@6bei~cps*j0Jmxr0a%D{`li+q6k8#_JRtGlD5MOMuxy{;Uw?!c=Ul(lB z8SJbR!scfKz)V5V2qu`O1SzDE@&=7ZVIXj>sTRPQ!U?m9Y!)5A&2$%y-m`arxIPuUD z;|#O@)53}O78E#f%o5|AsD(_7^ARxM#D2ENfp~}oti*xD1^;8|S32@A*eu0vzGT)e z{q^6$T3H5rl{IlB9<~vn#6jDv?ZtXKk}V$bMrB~r@Bhz%tz`aHNKG-8wW&hfJyLIg zEckPhq3L~{s=STCu0bNqUHOLT5}RIy#H#PkmIO_s68e}GS0OtZx*&A|;rZZ_ECb0d^q_$X_J#Z#1#lKjP7O7h-MN5Lj6KuMcgovxyE-h&! zrZW>q_F#@Kq^VeswRIu)M1NM>l?;xEJPxIx7%?>xl4vX4^Xq4VbnuVy6)$v zu~pIBb_X(1KE=aW5+yAofAH~VlrkxwE28PBZ7YPpfI&i>ilcD!iPqNtLq z)nv0>ZdiA}u>S5?n=P5I2U#U%vg01aN9vQq9t4s8HlI-}MsqNqeT@e8MmF<_Aua?9 z;4sVaB$uS;S*&j@;$a-+MXV)Km5;y$y|Z{7G|3e8omqBVKT7%&kTSh;7-+ zYDDjFdXiG`GS|RZhzHo50P87BVoq8KyqCYcQZo}=^*xGr9otX&4;vq``{y8 zP5V9=Bb!x|+!pT{`_v-Sq#C|s!7D>lDgZ=6>j$Xma-VM&;fTg)y8Mc`y*ndy$a!%j zyIhA1aUf&9~-?*zK2~~-n#)k={jf?1OtlNhas>Ckr@BSp% z*>f_l-~RCvv)MFSk$3HK7CwN4IM2>fa`LeAlCKl2<+7K@H-=U`IJw#t*w=5lJ%p8L!moTc9E!(bAlTK)HDwtFz~xBc;|k~=5A zB6sEx;^*!*gCGB{B+0NEThoNBlNFMlY&a&G^%x2BOxB!w6mY-;#P_@HJeQ_#VG@P`;+4%NwQr-3VR8%9c444Cc zCK{r4BAI9id~b9af!UErH`aPI=_jq}%IeJ~?(F9ylA2u}O%m;2b%%2@FfRBc^wMKi za}0T?6@d!7sx!1njx)qYa|cfMvOk#LSTy#84H--P?ZV1&Ncq@g&Mg{6^x&NVjixgz;c z9^dGk+14~N#Ch9BCFg9Cy#JzwXZFikU^*6DXEr#UbP>O@6X{SS@GVUsf#P`9dIItA zPTj!SxxYwoLz~>T(-oK+MQaXTf+}drvL=v7N!q}UP9QnrG!{LPXvM*-^F&fjY{4c^ zBo`vm*YQ5DEK*uT`4E)1(Htzo+;sbv#fQVqN@O`$vYNB$8N|)MI;YSNoS{_U$0tJT z1QaK31i7?c$BY>y7_Ns$8Q4PBGOtO*BW~7O-r^76TjbSNv^e}*meS(Mf7|QuEh9+b zEc!l)^on@Arh?xUV{e24L6!~{f6H>P^gRe!A(pJ2Of#9dxi9@jQ879`aNcQfX)>uH zrm!KC(PuctCKC@yT*Hn{ChoycSMwGza~0L{LKW4X|CXgFcKf4DoB}Phh}E7#eu1a) z<`gjEFjGw>bHv+h-c;g|`85r;L~e1KSJ>4;N+(!x|EgfRz8gI*r1y}?|6p_FoDRYf z04IQ;fjZePa1O}K+N>d>Ff%{h!L;y@z>g)?c~u1=zr2=Cw%_@m_1^nd?^H{@hVS*V zz-h#(_7ABQd-u$Md^DF6)qxY};7OSImy$k<3WT&;x}2zNHeecQq;3R)u&ZY67PfI3 z320FX9VwBi04%yOkT0affCe#nGf~=99Ue`Y?wyE%8nn9r;^cfN{Sbx5q=QEl>w5vS zn@$>9FCK4&agAUJ(@AXAm@XCF%FV}c6Xi09^E42|3Cwy1NzObl7IhyNu(IN0Iwzb8M+BUx;65#+lhGCQD_=gZlXI7&Cbhkn(9~Pgz2^l zVc7+A-1J7Ply%~cITu&nASX7tvR+xlO>E63W|96@5*T3G$V#(Fp!>}+oP9qi`Zh_v zz_)I{IQgt;HuK3Q5y8V9zM2!c`heFx0e4ByT8hHqcW5a=E-{U3%0+ZiRUGtWI+D%E zCcZF0)?||=neJ#pr}|*lmiC2(Y-nemds(Nquf(wi`+v};S$h#Vu=^3u&DYFa|J7{9 znlL0K>*+1vOrMp?`MD`6+4MIOd>qeRzM5t2{!q?w80(MvpbG6qC3(TDz0Q;NKcTdJ zAFXrwa+c^^)d2ZAU6 znPt}cu`e@8KPN*czWracREU<$+VyN)E@>SYge$1;B|yO|O9W0nRn{4eE2pXe_8^yd zRO<@#jA=GPT5CDpA?JfCU7Zs(Zv;fOk2amChmVE>0~t zCNZFo&M@9D5mz$u4YRf_)96X4-4X2nN*>o~NqRE4QYy#f6qySt_FO%AW8VZ9H{a&A z3p+j+{rK4R-+u7BMLrMS%VZKQ2Cx{Jvg1>aY^zMFR#~KwF5n_(%0=8XgWZ#fkJ=HGryyaDjLajkj%NpAS;!Y*xg2ed38#~d zUFH!V5w_<915Q$d*k%KXiM;z2jO8~cIcBSLNAR&@GN`#PSY9%B-z}Wuud| zb&&whmjivr(7Bh*T2JKgo9)@R_{!0@2$fsm+gPT*@pfCZmTB<-9_c2}9s4d6NpT{zT%-yNRDzPY&%pNb2n`)v9m($)4% zZ!00q6BDtYJy=BQh!2@&F$wN<6=E`K?wr~5A)3%Qv~kclLTT}63qN3A zSg;|$zP4baf&JTpO$PR}1=|N$0eq5MjL}nTL^Q@0X@m3%E-XJzUuQ`-E8*=gadWCB zsBR<$pGp7g&sl^Xnwi!h8k7^I0g;R5L^RRUnjlNm2YT=}^nqr!j=_Sw z%PuhD8v9DQ*5$@U+5ow;gW}wUQSsWFVg@~Vrk-x^%K2Z!X|!@n2k1CGoe5kV5~dog z`f^gsejZ4VP2i$z)HY>3my@d1+eA4!Ja zCQmNkH)Hs=d@g~nvQmW`SJ5R1VLLYHC(_;hZD({zKP!)0GxRDFWe1QS>HU`d_7kb+ z_Zl2Zv*mXv`DG(;T>(a1_V~BncdX_LlHp`+`eKf0g7ul34@*$rQfJb${VPb@T8C4x z0*cdoOj#eGD#0yh+(4w$$W-SvTbZszF07kqFz5oSy^=&ov@ILB65F{4JF=35N@7>` zawR$7@6d^NGQ2N9A@#%;{SlIK|JKZOM=UGq7CZAZ4qExF>}S$k%wRQFkvao!;f zqN&$&bWWabV|k1bqwi&7ig@zH+~h-gVvO90a7-Zn=5VSWf2ESKbK2?m{mDS{ndMXCk0LT;iV{4lte<`e0?7jS}$ zOd9}=4!pnRd9_-n0G;UtqpL}OaXTBjngn#1-GPs3RR|bgUKvYzqLQA))20RQzi@lA zzD_=_7)P)(w{r$^)A5pN2cik`G)&?p)6##@%h>(ZBqZ}pJWdI?FUduH0NDU0t))II zz4v(DicD{{2S5uEk;}RIN~;$)GioOvV|BfEB1rV!t??~)!>+1qm3i>*qq97&C=gjY zLCd9}#H`(j{hoVR4T>~|vH5Fonjg)6T|=TJt2pMimh^QC1`Uo-wvc_(`aAF-4_1VI zC0n$X1bR%zvx7wWBG&l}?A_nI)>tKQovkHW+rh|J6m?7X5^2$m(RHMq=)h9ekwy+J z+F5p*D$2G($FQH*k>tweDpWYkdnBLZuI|t4;Dve5T-KAsI={YEnClOR*|km?X5td>|zOirVhX1 zKqPD5GLH?UOZbW;-nw34@an&K({v6;70%!&{)Y{bpEzV~GPJ3}f=uJ44e-ze{#CC+ z3Cs+LuB9wXl>-${STw?G`6gfV{_LNPMDD!j73BZ88>lehwc;xt$#BbLTUE~3OQsXA zE#p=mfgDF7(J(c@FVQeE8tZ!VaUSpH^QJqVT2XBnr0dhGAbq<@w1b-pRGRQ^my z_Fl(^Zy|AbTe5o#ajuePgQFtcX@*Yx6q_`|)Svyjg*490Pq3T_6C?L=KBa34=?|wS}B5?OU-6;PSj%Nv5gGQY*K+-fR&(}>I!KPP~U2fb5d%C z6>Q(PCEso?;&uZK*nsAnknNw!X*Bwk=uKQ?od=+k?XTgRmXPyNOpjA80qv^-k%$Q& zf}^E!R)TnbH7wgs9K?T^<8~|;1FO9qC)6Sqzn!!X(t=)u2y$NNG`a6lxyj|}7qe_H zASbt2Gqa4N3fb}Pq^{NJcxat{?9Fx(>o*U|Hb!H#9>m=dF>_lNrSTyFQ+r5&Vkz>zp^H63WkttOe0D z44&z}JBh1R58%qyvCBJ&SFp+dH>Jv9Exs}88;5RXf;0LkcMzB3lG#3vo!Lohh8zQ- zm~L%4d;1G_#h!Yk6u0?b#V1&b8=228;-guP{Ha!Yx)3lYsxND^i@4)~&cI!ys;@h6 zriEA>6{p-p{Wfm0nWh0HQ&+ZW7inoLSXHcTEQ?*Fy6t6Jp;^tW`fd_kc~mTyq3|XE zX6$|cnq)e05O`m+>C2ToB(u<;H#(t3Y2Pd0S7#K4-|Y=m`+dR;y%f-ke*|e z_Cb9dW6Aq)J14Wb`$+eOyOav2IOuZC@Kwoe+`{rdPqKXn$w6^A8)hV%ad4}W zhbzHlta%4=M>Wk*P;yCw*UfC%32dCxSkVbw{YU{UE}sPZp9$jvc3ZYDLgcW3 zZ75ET+K>2gE?aWc4z@6#G)*b3#>XbV0ursraFKMjVDJv*8z#Re@fJeIG3CRVPTtK`XGl7hezd&n@L6c_fW;VTmxZ9yn$PJ(Vw2;&vxM7HxJ>FgB3=?yY2w}iO4XZYBB znCmGrPa~o?$l#J<*4p{Ay{AZZjq@Aci^~-QZpfaUA_>@X>Yv8V4Xy%Clj^upUvQdu zxH7;G{JuCHl)&Vx-4A~@BXEn}} zKBAV*ISW<0%A1cAyZjTDcNV)y0()_mc(i)@C-0&>L+Q68Xk_g*3(7JbU%fag--60e zW~f|2?XaM3DX3d4sgT5bcT;d}ZFI7aS(~enwNg+pa3`=`h03kXokB7-bm<>NIP8X@ zR`BKkBwQyezH1WpcXxxMq z$=1tA&XJ9x*pdBmp3H?E9$rFHwe@fYv(W#`?e%P330VREWU~vqT6}Q5P0@i3Dh8yKuoROqd-%WNwl!W^T_o zvvvv_cZuB4rlXkB@%jHsP#NoSnY49@eNwSn`L7wW9tp6<%-WtT|1zm3-e9jTlb*J# zA6IbwBI|Mmdgdv+d4(i91;R3dik7uUA64X+8yjCGEmSy`Prm_O4&8QxjIO)wC^xfb zxq-zxLzifD-$s#|1)BfeDOF|G;#c^i8X>QQUrV20n|>wh#U-ruO&qp9<4HEy=D>~t zxcy}hX22|UR<^RuD56A`G4oBFon|oYEz(!~l})@w{ImxuDNKC`r?7>oFwWiC_FE*h z@}J0pI=Aq24|~B&y<}}~lV)NbGu(zdqB`4k8?$cE{Vr`tgO4FWk8ae*ZD(0v@+<#0PHZ06;!7HKki3GdM_)#OPYp!bm4mW zV_Kic@L|rdTvK(C;oIC0X_siwx#{#{+~N!^MHmA|amQ`ej$&Qzk*dzytoUG+C-Su? z;aKfx#*+ZUJra%c=*4@)Rcyze-XlG{Kfxh{*S{L$s~Gt!Ow->7#Wi^~9*#cj{lBu_ zzmr%on63LAle&#ny^p62nQZ=j(x=0w-<8{)W?@$iI?=S|HupO7<(XDn`8`QWKDKpJ z-)BJQ=1+IvzW@oriQSNtZ`wYe@A;QZc6Z@&EQpm;`xj z{u{~!T~VsTqdeFUaQ&cbZJGHo8E&0@neRRO+1MwfJ6`f!ctRRiN)mW2Nu_3O8&>5h zsZ+}y<>Xh;1D){{G(;z>&DyJ=fo5ECsba;-m*rQyo}o`kK(*D#P{#<<*{RI_fyi|c1mULvvn|2JScodeit9H=g-I(@eS*4f){oXn`$Dnu|1G7IOoz> z*D^@_QkGFhdg8g`uVt{2E-ZTv+~3UiIplpe8~B_s^{aD4;M*Y_7UiUk?MfsSy>*^- zD<{*cX^}Q-TYV6OJTOuycZJ?a(EETy)_yGJdBN;cIo>`jGe*21cA_}c821OEl1+cg zt>ZcY#`Z5smT2>vN=dF@zr7-z+<%qe0mVDm9szyAuIfd8rb0g7lUu#U^PE!Sh1cYy zC?+wO1I+!8*Zht*F<=azjf@yW=c!;&GIza1zk`sK8ArS$10=i%x$-v|3ANGuJzDf) z1@Cc=b!YG1lR)jYV=z{Z3Q)c=a>-$SUvJjFWOYA~p?Fud`~$oMi;b#}uxasovi6@y zd)L-SI3IBIG;1f~(8!}>%-Y)Q&?iXP5aYd1q_=2Sg6FSg`8YE0n+@GRWOmDG_c-k( zQ|@`?e4A^{-(4EoJ#THW8yjbcc7Z6(1&L{3MgB8>`z+raq+e~tHw;4(8WGEw_6r#l z&=>8(9GwG~h8e=sFYkX3VLDs=g>;ZqCieCVHoX$|<5x1j%9(?FUfw_c-tFxy(oEj? zYTxm*Lt8g}jGasg68ab$nZA9Ch$z#SOIy<#PKC?xNOs|8-m8nIWpnXvsbJ|$T3c+o zbPshAQw|i-7}568KEA`lB&oujBsxai%4SM57@N*+fJQrBS2W|j9x+}u<1mKk3R^b9 za|k%@W^qKX5P5otembOHaW`i(Cl&38YpcO3`inS)RUvc_Ufi4}v?`3PXM`q;V~vd{ z?IenQn8AvA<6Z4GD>_sxWm;>hvt6*0cM8tFv7AaYM1%*p5}n0&06Y4k@|i8)m#0~4V&V3*DUKE6>}eNGHDp0+SJ*W1 z?3O*PgWo<`Ri-5{8Lm~PO(lAZIcjKKmmQmUKd?#Ny)Fo4UfdrY8QzGcXsBM?$?j|D zOmUBKfCFtSiT&8VD(Flv_Oc3{P^I2AEHX%Dei^@zLLnD6(TUc=d_+;IQddRnd<$Om}(bHrIX+UK(Z1~oZ^YX0uza; zc1BN=I3-fnNEN(P$5i{Gr%}M^qi)`#Lb+AU35#1WcQt1n3`wX>7wRO=VYx2U&y5qw z+8AV-wc{^*@AN`;%!T^4OI31hmE5NP=5DPRr)i}lUmF>|(3*{MCJ~aZmSgPnG*Bsa zZ56MS{#$G>3wEWxnQ!j$CRZxC7fZf3dE{HAb^q^5PbkF(D#aLz$@Xi3$@%Co&HfNS z9O~^CAzkj6C-@0MlcMQ1a*>`+2MUXJ3P3zIUpu+rM^@}gt90xMj7+=ZTTp7NryUSc zt`%tmB~0Xsd9KImy3wlkX;5*p zcG=H->_x1n8;$2bQ+1>D>|()*iao86{q9Dit*hVR_e4P~(4G3(n1921H3tqcCb`o! zVs&G&AT$*jLM+%N8RGRn89{<(xzT*K$eK-z82Ry#J7V&1SJz$ z%un6U4z9f6x*${bC;MVn(~AzSyuVNoqC3KIkPOdIJ+{h=y5SPa=taZDM(htSEa7ri z%bP|tThH6R1)+)Hzb(|K=Y?Ix?N<73$mSsZw7n*IC$BjPD<@?)MvCJr3UCC!%5TY5 zd(&XYxo8XnQ62??WtEEA9dGJ|-wS^5roLX&_()GFnWsvkJ9h4(%X+a!83p}`h567( zT#}9Sp)JKow%>>HAB#Qqp)uZ?GpN+i1_nw@9!&U5Y;1}|wu$DafLLEztI`@yB3pqg zFuZ(eyicDayo_R|Bq_v7^eT@Q(g^mOFRj+`r zq9k%Yi0L?s)dZ#-PwqL?^>5(}yLHrc2u2|(KvA@gnb^pZ{b*ExE2`uY@(g%5X3#e- zA-5GO{&Sl5X6*pB$B(*rJwYD)UN$fq%J?m)MS_%x?7$xRfg?khw?D06wdNF`95%|6 zy4O&$AD;xGr#1M$+N{0Lb5DH}n?+Z-*sN!B{b^IrQJ{m^Z2m4bDM~jWes~A$Pd#kg zgFunJ5Js!g;rQ9)*sAnlSp6#$W>>{cQ5nCXi-*@>lrFMP#6{fybJu$z{o%5OC@lce zx`559MyuJXkgcSlysOc{^=pBK3udi+WvCQGEkDd3r*oI!CDYA9JW#@M*Ioi0m!x5= zO#q!}TMIXs*if**SV;i&z|Qb2fL7P;LM{A!YiOJL-8&_-s)68CBew>>WWB4?(E3ewLHk;a?4Ut0Ir%ZV{=Y%&@v;U_ zI@|7tJ(TlNgtx6~V=x2WOiy;QI_-i}n@0`Wj9Za4&~!FiQUkkJKJyNuH5}&P5gcDg zlhlf%W)bTYL|2G-g%(8JB)enGwk8e0iK|{sT1T^R9#{U~94UL*@R~H-z7zaSc+n;& z?KW#0u^lyOtQgN;)ud5kZ&tS!b+un`RAG*?Yb;?MYS93vU!fFp^YMx}p$80dzMYgX zeJ$*Vz1i_vv@c9WzhK%E*Jsm%X|>2;EDxoNZkP@Brit+6&Z!Oa zB7=RYP3zdNLpM>^dp^@USwtP`@AU2<8t!c)Yvnnd7g$Dz+3-3v4z~I3I@H}E2l*DA z64D(yWh%RkQuw+1=Q`A*QiPJ(#?Pz`XMS~Qa^(R=K`1c|OH~H)s6uv}0auTN>YZC_R)LwIjt*!@q zW(&JekLo=qZ2UHQSDoA~I$r*eD8Ip*OS85C8ykWhJfG!;&@LqC6ct$g`tXOo4WWUy zO(9ImLOaE()~7!;3)#XQGjOe~!Qz6P@8f<;{Px z3X8X#eX38JS>G+-OZ`vQJe1aSE7_wgb))jraBXJ{PigKLn-Pk2z8ASldJ)?YO1r{1 z`x;8C@xyT#?cfxGT*DMGx^bZQsR<9d%WSE9>wFlo27?S zKkLlnd<2Ww%5YjAZCwnf9)X=uyAEd`zi-}conc-8zjFbXun8%}@q@pHbcDzG9hmM4 zzqmnrW&;XZv_6((Lz;uLoNEMahhLKnj-YiUoAt(J5p;+MW7ph>2873Kt5CV^f;hvg zD9PeP{eTMRSv%}GW~~Zni+iV?jvuO0BWXR&(*Hu%W6L6GxbNC^mi9yN7HB&LjS~r< z68yIa>`Y`mdmc##*{+ohd*ADbmM z@G;oHSF^fJVBvpaIZbE^ULo9WLJI=NZAG(kn+&ry8b*n(utf%%1xB910Yn)-lx6Hh zQ%p`QyVDd(;TUs>qC4;s?syb!H6hWcRz-KZh-CMl&njnox1ju-?dgo6|eCZ_+Ce{zei_r%G@- zX2sH8_%{Tlu{7TGeP?*l;IPE_l;?lE$9AR%tZ55cJve(kAIbc0BY`?9UCS}?Yq;=f zWbM##oNq;nm#7833^z}&IJyBoELA-8-Bi{$o=$_0miJGT z=~U+43OkF;Vq4KroVU_j(HKp`QTUHFu?6yFoT&LP_s+DUaT?W3FjAg>n(IjeUevki zXmx%f*U`c78Ew|lj;^0zO7i1$AMTcde>V@U;1Mo!OrX2qRxL=N4Jx~4^Mm@V9#~m= z8p>3yX>R2n4Y*6TI7V-UU$3ub%UaVU_~IY8rd93wC2@6lneVs#S(P@heB+I&ZK$&- zzA}zXq?IK6dxS}CX=```PPfHD)tkL)i%srlrfWwB;taL39d-9Du8q@;)^||F>86$yL--%poib z-V3w#4r|;A7VQ9*)rmUU%~=SE8KE>ekge$iyXGf$1fXs^WI)CHp+jF=wb13v=CclM z^L~K^&)ZNbH0bRcrb?k*RdW^yEMzwEVpCGEyES2pQ)rY#7qTlU^ag%lwz)GFdQEn> zGYx4{YT(rOw>8a+L~@XV#8m zIb9$s&Dq5+bh!P#EJ&gv}1o}P;brH|3c<4 zk4f|c{!f+DWZE(izx3<2nwqMI_w$FG1wQuXUmqX-4N<ds@i>OTT-;}OipxYhAs>aOw zv?lRibA?8Wm?z=71%6BWRiyn`@gtg%*~b>De+K`o;h%i|DdnG6{1aUXpJe{&!#_f2 zd=`$uXE*=g2V#N{0&`bbvmKwy{NuNSfA-_!aEizHX9oZ5=AZnt_(T`s<97p}HMisO z70U2=^&Fq*Ac~y2_>AG7kjD7rH^V1779YPB_$=&+PoI7~hU1KYQK5p_^a(|b?$}t)so#Rcq7g*!jKfbi=0HW6pim zeY6V`RYKjgff;E5BS&%a{A*O0Vbu3kUlZYx>e*lI2{5U@x(2}7{^}zfIY7+-{u-bT z2Jj!KZVu3Qpo083P+biv??DQP8KjVmw16Ki;EV;lwvcECE0mEI&~vbQw)<`j(+>>t zz}r#DMX*wfvjiywOl4mNEA`bJqJWekYF`)x=|j}5(B!cp>Lvgmk*DP~B=Z`aRDy^a z$U|N_a;P$xl%dLCrVUlM1N{X{>aU?nH{6FQAZnO;3i1vOQ%3;29)@;yGsoddUifgO z@xH_H-(Ys*H;M}Kz;K1+#&Go#Acu}ncLX>#LP6dep>{>;uMz4nfSMx}&~v2v4pNb$ zl)m&GrDpAUr*)VCk2;kFTXfntt%~3~z)|pR;2`)ec6;Sg>U_CMzC-diI$KgPxT=B> ziz73a{~o7R!de6#U&|6ks~@3}I%CuwUA|Fl_aVYN1WxhJhbF_`b&Y{yt- zG*`wdeWc^m+ko6NPTe0sJ6_!dVB~mZ+&_<3#&&GHGPWDz)x(h&lctD5R+>8VdwV}V zBElX7-rko-%q3kt%l=zmo?(If#I~lZZ=!J41cen_Cn&u8GC`Ru_le4+rc6}kYU4zu z(K8mLn4u0+W;z;T@8OOnz%*+y0W+PDp^Rf>hSIy-3}qURWvDaJPShl&=B|^JQ5~D4 z?ygkAJLsV$iojXzl|sO_$?7KYL%>)FlCTo5*sme*VQ}~sp;ojd&Eai?VKJ68huO%V zQjwm*c1*VLb+U!8Q#dD$J*TLBduIM|3N}!tT1dvM{elpL_;$cvXH>#G#1{hAD^dwP z5Dx*&J*N^zAU+3h!v&Qv6>$#D2-gv>eNiR+bx9@cM*IWd8~lH{4T!%3Ja6oy5^IEUvyTjC{vJ)ka2f#+&747#%E z47H*&Z@Cd68F3EVVMd%0ck>{^6NHR3wO|6g>Infv*?cb|toP2eWNh#z!p~eXk+BBw z3ql$S3%*3yRh0vpmcB%aCHhg3Ys;5 zUlD$oh&rLylY4ED$!)yfJ7~dPV zBfLYLZxLGT5X(W&cM1c-QN$Mlb{mgQAl?J;8G^t$0XRO52$?*QhDgWBM6k#+WrZ5i2A>B-L0`PYPKFU%+&qYKqfyfK6=@Ltv!x29afq0Z#o1Qvezc-B)rv=GzOA&G2gHA!7^RM+DAZ zvI-6v1m2;efD3V1&;T83u!acJ*Aig^;xhnKHWJ}F%BBLY#;!aSc)mp!Biu!t@6?Xi zs5vM2hONat5+9fw;JM7*MDRkQ=^i4iLr6tM8vxz*qX6Q3b7x0EgAp$W+<%M+128fU z-A`EJUVsM>ct`U9-SUaB67(EaJ_Q=YxoMDwupczsLfDMJ2bsw&g^AFEb3l{<$c+Y0 z#9??5@VSt1z~76BPy(7#K>u@=(F6eAMBr?{1^DT_g~qvr2vG=p#L0A9R?`PZR=%Sd?KK+h59w#rYpQ5f+xfWJJ%I-Z5)1Xu&lO&+77ApY#+3FZ$p z9Ii*`f%pbM@hK4+Ax;2qB9tP23$U*VvV!;k!1o9NbFdW4GKsLFj0n+aU?rf_b5x29 zXTUiK&U$D%z^4ei5$A@J%O6DefOs09&!0r-gtGGhlU`yO1D_0d0>N)CxCmJM3Y`YN z1aQP_bYeDy7x2Ja0u77C@(^kA7nB0xO#z=Fq#Li#69s+%Bp=W)@EnF}sL%%u zHvnAYM};|vbC~E)6)ti(48QG~gNEk-mLW7n*%yEzfmG?l3&6}>)v2Pbb^|tnMYtOk zam#QfLJu^|;ah|dRP+vTYfUPYqN4497Z4N)2Yidb1?nB3Q!Pu}8E|nhHZVQ_z_ztf z59&__bc4-VG8_7zTc86Fcw^iU&90BaAesr77D@#hG{)fzgdae|VWTjrNIQqa8Xyn& z5rA_MxbV&cG~)NqebDJVz=aK|&;ZlH;Xwp0nE8OuA~Ip>p|B|eBaTGHh;vwiz&pgD zKMZ3&XWT%Zj<6l^8GvgMcw-v?J2ydR(O4>Aa8s(tP;J0G*wbq;0B%>mM&R6f2iO26 zwhkSN&O~G+0?!x&$Pjp?%K@EXg7cnoQ+!uE8bHIl0be0(Kw}*K*%FQMIG|Ij3bq5@ zNBDpSN&ypfRM9IO-bdhrDFyu89rM2*ME@YdP5oP(MSyn^>}0h9ANI!dApRI|cwee$ zt`UH}`|&=vS3bx%~X&AukwpI>VGPZ*|*nY0`sTc>;5D3-f=f zcE&|X!>8(E@xsAp>Sc~~$UUJz=MBq1a_ zXq%O~)-2tu_x7T-v?e=fB~Z(m?^ksPzw+mMLMQ(=EV^~ok#{EaUE|sNkUY2R?_To? z-zT@r-!t7{T=Z3a-=4M%$@YjfrrX)th<-l0w==qT*kE_3|CE^BpDX#gbe#J5z^1+T zAz{~CU9UH0Kik_5&Fo)&eB0Ik{PE&(`SLc)Z9gsTb@rO$ie6=(Mt7L^e9@x%cT_>e z-5&JY`e^>_BjKSJn{Qp5*U~yVtz$x<`=etv&BdFI7Y`VmaoBf2`ZHSwioTw)6ekxF37{CN<;A^Pw9@9bKK+a`e2*3F&Fs-PP~oE7i-?&rhz@ z=)~1qpZkyd;t+ZB#OTTUwk&VCrIw$%(dTY^CT(guuJOnIuWlbz1-k`Lj;q?FXX2Jg zs-MP2U*EHI`qE|7ChWC+;gGs8>8JQ9@{~Pwc4>}kuQ+adGU0Wt1KE$o)}N+okcJ_lpD!@IfKhc>KVzkXQ#MhzN;hIeCE zH28vb4#x|9Y~4oLvz}%s`+_KPPIFe$mOi6g&)^tCAA+u)^=-|c8=UH z=DzlyzA4dNU+tN7Mi%aGtD)JMIpWsD55|iduDo=a+}?b+@Ik-z^X^CO9kL)er(NUw z9Rf~n3@f%J&DPiU5qhoYF?9KZ#r_F5jx`ZZlnrvI`ghA;?neIDb-1tXl`ZQQ6ix0B zpB2$h_*&CrT-;UnPBF0qmkoM&rfctOk30<*3#BX5U$3A2`$5|gTh|I#8#a$Af86%X z%goZUq==jI>z%wX`@oc!mFq1&rD{jBx5@3**`J-MVhmcYh3+qyXi)LnbJM`O?a z##V>%2y18U-UsC?#-E*S8;hB%bXR6I)nxr(;pO>aVB4XMfocJmbvY#kWKEluVynU%l)2ueHu! zIvcb;B=11c@!>fW|ET_WO1F_WJ)^d+7`^a=yZg|Ov_w0-Pe{VzLb=b*!EKjc`|GPQ zbMpnO$#?2^s~5iJ=7awCiWanVYTCQ1jcQME!>T_uN*QOCjA4KNocqTfcX!XdXB*j7 zdJ$wBT|6Z7&60n-1}&^DyXG~0mUKD%@W5jqn~W*F|Mc*t-S+h_{OW(_eo*9;$6q|Q zp7x9;Q%1M?Fk`xXXuOv(ep6}xNwqx5jqD>`{t>o>W^M|e^ZI`1+k3mL_qiPN@;-Ym zc;NE7BPu&>d_c}d{OBnEBCYM^A6#bRqJG@1{(}UkAuFOj#ZEY>8(rYFr~0h{o&NsA zTy5UO;Wy;5AJ&JB`@7;O= zofhoE(woH>Cmija`D!+iHFp-?^2l1$taI`oXC`jTGY)y0^u(?F^Y*{%Hfp(L;Jg;c zRt)trx4XZ+diQL5gO8!=q`#9dZP;#popI>Oh>!s*u8&wYS(V%Ew`Emxe0OA>b@i)v zr(a9e?4>6goZNOJ)j0ZX;L%;~9{FW`)gDXk#?Dla4mc34$^W$=`H<5mlDqP#tMR6* zZHBdd=a6ivnS|f`WQ+L6OC=iHP2aQ$OTGpdIe^;?B_54R-)^CngyRx}# zN!2U&hL^gu4}9pkezBXo@5vqN?z6}1BmaDVw!`N!KbW>1?o{qERcL>8r(2#&$@Zd* z4}Z?t-1zR{Hb>6AJ27B)bYNq)^7WJ%)k8OTt&(?X<*EM{Q3J00`Gz%w5=@z!^3k&7 zhTuudajVNPf1xzKdicfs??Dh00}Z7nz8Khs zkZ-^3xVkRvbe<(C=IK+XQV*{Wr)ZeREt=JHKF|W#0+zv-sUixJ4;Urck_F=D<>UYX z0006Qmr5fFKp;Hdhh0Eoe>a5lcriBL+iI)673QPGWi-_W3;CHCO1hV-BMKfPnG@WJ zxa7#Rj237_x|cDED^=V|jP=TNb7I@7?ko%uYoRwI9P7Qr~PkRD^V-(hr0Q< z!khGJn|wl&CQ4%sR)4r61^3XWbq@U3YG3;KR1$w$gso zlZ2dd;6N*Z%99S?4V>*%RFYORXynT}ydIDN!@?bUgijm%RFTB9r;QDCu~@uj@c*#) z=wd9P1E?w_=YNlH%abO{@^_5Nj&O;|oCI9n7S895N5(gyAk-JtUpBA}Zmfz7ljfV zy+)|AlWWf~rcRmmzoo4#u)dsl4OJ1AB}L>;f#R*kN`?AqH} z20Pfmj=d{u9mKV)eO;aZFLzMi_x--_&-3J-E6T@}T8tYDhtY`5u=D3n#u$yapp zMdNG3lW9^@QQX98PM3U~J^mDhB>8M~o{08!@)=$BiSW{8toL;3g5$Xulhm3+leHgByoR~*TF)=Aw&C&MHF z3rXc=xU)&RCy9P+|5jSB8Y#5@PwGP<+a?NW?5+%SE+b?O?&Xq*$?`VazTmL=;2V=0BwI zRRdBvLkm$;F^Cf6>&EGQcyAW@P)wZ}YYb$~cT2s*HEio{sjKbY-b#00^X^74r#+~& zpP|zp$wpLXR8$GNtP>d)tYE9;$!6`9TKQHu$XOBRmkeI;&X++dc>UmmE;rFH*?5_K z*(-ID<{vQkzIY#cKVhE~WLsUK%oTV;wOHOh@a4AQ%Ra0n@s@$)Ny{z8Mus&jE@!jD;MN#&G@| zlNQ+IL8x?m63-g%G2L+~)w$^pj85+67X;b%=~>!~oj5K{_4yTf<@3a+y{ow!Dc|R* zKTAC!)f1cY4s@|Qh(04nnVbjB*_#5%nYo>m0>vRL{-iXTi_%HyuuX#>?HOCJsi&kF zl{Pg0-Y0Vp-S6ytA*SW; zGg2el-`6QUDu((nZe|V7Vp=+~$!DcTqAxpmR+4SztmUmKx@Q7wb580iR%6@GNp2Ed z$4;M59}`SyopiT}ZDuQHbNhU(Tn3X!96& z+BgJ?DlbY=V6**3@a~43GafZ~U6aa0u{E>40nKrmEw~}I634N|HzlvdH>F6?lSjKs z1%I(7H?acpfRp-_C!B5}p)OC1KtkNcw%-DE>lbF~fZHH=UuI5B6H$z1uJ@&CVkH)JA4=pK>(0TSY&-`i7`rcdi|d(z zgK6vr2YuN`4&s>00{}l31|X4VtkVPN!^dna$D$wyD98Z{K9I&+%g@a0%~!LQ6Nx8F z?ye$+i6zn`QGCSy`BNGpK4*g;N;SlzZ1F>>v-lT#{ZJYsy?n@qJe1rV4nC2D=JN8Y zBkrj&oo9{5*@8z>XX(u&_U56~oP|A>0;RwIRA||x$CABR$mTo-!TX1tAb>eMk@|=O zSo#yGuG@BK)T_wiD7qVtmq|l4;#Nc5 zFVZwgtY+BvRkD^u4?}@T%9f-hCz;_Z1g4Lq@~{=V8>VPf$Ef(LAy%s*mf|9V&OZ%r!c+)^@s`6B#x8X<~Ri3Sw zY8V@-ij_oP!@(x1B$Z8Kwgkm-Q77LtMl+{a)l4ypt%y}k6%QMH;#4MA4!f(yVQLM( z_E4$oh!JdkuIi&0ZCE}>wcAt7H6(9Ut+o(fus46G-et-sbox$KI{gTHoj$`gQJ><| zKDtA6N1gmam;EAHC)0hEEg;XJihmuFA97l=R?{&*`Ur$v&^W{w>*I@~j<0e`eycg~&^=E6gij%mZmXZUj{lL{PRR`ZnW_Gd%!W#)_GhNse`NY9 znV%XegF<%;rT^%z8kyiE7?GFBN2Xa@Q05t3<-R_?M4x2Tw|}Ac{D_h=y{D8<@0ep6 z*OrrqoX!Jzlx8i+;zK^@yFb?DCYAiHv5$YOZ*SD)YCZfU0k!AZU87AhEzcM}9X&Ek2Q1CQNCt3lZWsj@J0qf^jm_s8b$ zu{V2F+RW>`yJnQu0+e$5t8)BZIq7EBKh63LOHYr<`aCSH-;neMkpqYIOGpn1IgKi{ zAj}gq=u4GPaScCd78Vq|w9?zYY+xxAyz+|D?7I+MP}CO9L8H57IGSOFiIIkX5sQ>TP9D3qc<_2_&P!Lr&*LTVizaCGznCW5wty5NBl)XfNb*90jhR z%!tvsweoOw3Ot64_@>N9{2y5Z*BC{<%rT#yJHdPX249-@1{EyQi4MKuaJI=_%7F<5JQP@Za?rEGX8&SIL6CmDpef%QN;ld3qI3WE?W_c zLN1sv5ZO98={4VwC`2JKx0_#bg51?7K^`5DAWsNNlKX@w$d96XM)&A`{M@;7d^Lrm zke=38zV(!ERpslae0`O#PXue6r?PJ9p`_fEudDKPR=!Tkx1#dpG`wyo6xYHyKOb~W zNYxCdBkoCn;dg0A!=OA>v?%(st@~B3Vk35PziNQEj@3SZ)B!`Y1FF`dP53_)L&0`y z()Kf~Kd9Ou+T?sPqXJCYKMWlYt160`{vSDNw%<;)VbabwWE@eouTZ(kTv0#=O3%(S z!?r8UaKtS%N3-3ilZz6v zKZ%+dpVxdfl`h=<)%5?!zg7F2skCq8xBplExP>U+ZueKV?3>Dsen!HN-TJ0#B=%>{ zCRM0I!5^r)yj?U}y2jAWq{zRZ9*KO& zBk`KyXRziAQZ?V`CAQp=M2H*Mbw}bOE@mGci7&~{kpxy(OB}_CtgaIVK9VImLHc^I z;ZCF;H)5PfP0@p0aw1K|C(KogR1u5Uk^pfB8>S^e;vBY0OTxu|>?TJhGSQhd61`bt zXL3(;U>+`{e^~V+&<=_%Q!P>cCsBTLGzxkG8g~P1dk9Lx9)2iW8Ks;!k~SpD$N4dL zG&|se`XyH8LcHxC?#3xaK8`}qc%~zBcO@g89Hw#;@`6!|qDrpTl*LxLV%`19+PYzF z)@K@bvQiw*w!0HADLI>63Lt%~%1|s?voD{$i~{!LRAv`VoCy}dW;VJKxhUPvVy$Zs zcS8>kVkr?rCV136khEA_pIER1UgQ_?B5UbQrd#PI|E$NQlCGfC3bh_f%+-1!BT1fi zMhNHQwAC;>A96zqo5ZWFZ}6;4nn+>^>t2O;K;Mq9Li&o0*@G%XZ@*`pQm|OC;sv$8 zu?#=*McS0Xn$#g7hK>H@swA#vlLAN^F^LrikiJ&Nw4Z(Ol8&YQ7|RAWraHMLo;M`d zAd{qOnvq~tZln$X5}~yR)O38nHw1q~qct6`BW|l^?`o2>Vt1Bbiwv-TH~hbP^TZHd zn^5kRXYu{+M(YIvq$ zQ9MzL;$*|BrX*M;Rxn&nAT69ljlnC06sp8#>}eko=u}}muip0Y6O+j}ToHEdOy=L0 z1UZe(QgZUKER2EXoU3eLU$pmx74;><#dH?lkBpc88P4|fBekLqX7Lr%!zv;BoJl9Y zPLfX~@RbyD+N52LtPoRlZu=&>hFC7P$&huB+JhiUv#2mWB;TZ+$SS9jK#e`JW)+Q;DB=k4;I19+23wR1#!0e~Bn)+RNi!UbPY)(lUA9j|HS%)5nc!z)ZsbZN6LbBa87ziicBFTmS%cxE zw=}Oa^PWN6*ouRan&l5CiMAzO;h^-73p@s;bd|Y{AP==~x`3URb-68)<8ou7xD%&q z={;sY5{+GBoko(%HdRV_W8FVtxw^8Pkz|cHhE*E{B^bf_jv|x9gY4lba@79I@90Fx z>>?pZQ3)^DuF<3c_L&!>NquoVtCB`~JGp=+K_>Z79pC8)Tbf1&I4%24$vKrI@3~;+ zne9xbO~-O;$~vZ#j^azUBOPi)&z!~(f3Xj1Fow8$>eh31?kN&n(WV^dr_&V}!(r`T zgd(WPMvfs7(%m5-prKO~;Zd@U0CROU{S&Tg&^ryhv#g<%3Y(O0%yB zbJP5L79S3>qL5{8&Z@(PWf0fO&YVKuZ;DcZ51$CF3Mft-4!QiehHc0of#MlT-UUk3Ad(0?ZxU z|2@mz-1h)v1(~x}GSfKX>X!4JqI`6G;Jnk|(s)u0&bLnE(PtYre>`!Q-mGHV#uK-| z>#KN+n7Q(5d7<)Z4}Q;5)Vl3f_GUbkP!{u;KsJk2S>XgQVl#U?fy{)*YT`uVp7}Bj zhD6TkG>?$Wh4g*81^2NE#;ZHg<3f5Knfwn1SN4ej82PaA1N!M?8~>RgGigT-5QS;^ z>GsBX`}qke-7?Qt5c11v=w#cK|5@+(G3E76G}k-nN4-oti8$7r)~S5sp5~X2=CUJW zIDt<7teN&+N$*1iLRt-7cH}75ZW0Ms2Y?{tvPrvyEt*99V!!l z{pv;MO+#s;GrXEIT{{*7&DE{~h?Dc7^Me!`V>rC3Sl^lK-$|stk?DzkQT)k~m(3Kic z3N_S64X|stP25$X{Pdrc9-J}*l*S(J-=Oes>fHaM9us<5nuuIIL^Sj-Rx*XSw_9NQ z4W@jWeI6gao)&T%8_?h`DAO8s^eKh`u2Wq%R<`4W>DCHi>3MYA_)x2qb>z-D3m4uX zCpKELmRZCVHy-`7NFR&8M}RkrSaBBdcPm6(m%C8Ww@LDOzH|G;$)}8CncY+p7TDGP zn<N%Cu*{71gB;~3bzZ({(pKkvI9}!tp8RK)No&vknnrp%PHM-u{|n{{ z(UM8~3+tUjn)|!r8tO+0Q1Hqc0Vf|X?SRIWBb5`oltbLBBmg~Sl9iCwT#mQT{-jD* zXGcyP!k4pM_9rR59$(US(}|1ijUJ+qJ;`25w=mJREOyAj!u zpOVHz?o7f8C^g!t7^~TH0sbevTiP z845GEur@Pcn6&ODvI`w(Z5u1lKn!@7`?2Dg#LZb1%Q1<5DZ1RzK8d)Nk*}GwjhSgC z3AWh+lR(MiIxSL9`d83#Om>l}kYdl(lfP{Pae4E7Zkw^~v(S&y&OiIX?-%(z*s|BN zNR;Tr>dGY6zX;1tC(oIOff)}WZYs<+xlKMM(<-TolB%zhBipg1GV!gLrI60$GG|Oj z+&F@rmx-5J1m$svn8@DAB*tN1Kdct{0!){!O)%qhkfGUZ;w8fPOwGkPssm%WBs${U zH*l6;pJbaX(jCCa*eG-rC#oCH0~VGi*Wx3fBP zh+bE(4{z%%+Nu!=>4@Cjn+r|_je)L3r&9H?M5ZTz)2ncz2CY7}u}oJf5%?`OE0Lx$ z-L-fwESTLaW-h5aRLij~dO&Gahw80@lu7G}Wuud|UPu6^;XvOucvi7VTLC%zc6-K6 zzH;=j!E!Tv8_4twZ#K5MO!xQYkuLI#0braywq^EF9ud+!z_MqoWGC+3{)=aC6 zr6E%t5?qNmDhq|Cvy6G9MrI9vDjeaeT_+EAg@T4mHfzgO`D?DAZ3<(9xH2y-K+T!} zS`&3Zjbop!h#1_#K-yMQqDl7U`M~-BTi1*Y0=B-HHVW8=W^6LBQ9Nqt5T62cJPVjl zYIuzI<2nmn*wlvKAD+Oz$x`@CoHt%%!{(FD)_Z$e2x*lt59`^b`J|S3nVII3z#hkd z*2xoG(dV>**?DG0q{ws(O6x6UI*P+)n6!R~l+VBzv~SWzp(V_~NF*==y*bc#wBj>R z8##OiXnQtu0ckG1>&>n%fM?-0d%plj?hv-{7t+T4LJtTjJZki7cix35TxIgK?O%%* zl1lK4c`QUX`xu%pB%MUxK~1QTa~dXlL1S$3xwg2u7mi{+@)I@jpSWFdnw?k#`s3{H zMI>FU%myqbfte0nIj`wuG^Md`VXtw3&f?KnA7JmAu|dH8X~sqY`_zn02DZ$MO#${b zqH^pAJ^jdWhS;=Jy@CtLkJH!6?qVUl-5fX5H$inRDez?a`~6ce7G${miX50Aj{xH2 zg14J7EjJKn4oit+hbg#-#e9UK##Am|^)MWb!L|x-s#vG8)qyfzK55dnQf_RySZStN zf+#gR(gdD4YmP<{J#_qIjmzi~WUvYA z@GI%+_NW7w!RdM2n4!mzDBX+v2+v3C%&(-5&!6B>nl*pel3zLmml9w^zWdL5A2YXQ zB*XFJv#+M;hFG3C`7i|aO?Ad`Z2dCQvc~52SOBNfyo@71K~aKRPVqS((rH8|r!;Gs z&PFbbnauO`P>BJr^CwnUk?RY0cTLTo*3izTwLQ>8L z%``W}vLcJv-W51!?PRxBkS4ewbz4bl^=;XfYmW=Yme0{Sd9s!HJw~*?hn2C~ldq9qk3YY(`qVLZt`YBP{4@u>lSb~qS&25~AWbGqny`FRom64;9^$LUMzUNKT z42~+C!cqJW`yoGY$l54}@~vvPVexu6X#AhlDOUp1{Gw_o%kr&;3P;Tv;f;KQFM0>| z;x{69So0e4f5a73nD83$5Y1RP0mhyCUnvU+T!73s~2UBu?ziR&OLu75iG@qzG?X zZaaR6O`2kC%T8@14KjBom=A=B5xY5`(lv#21yGz(rJrGeKt*k`Dd&ZJ5#z)@*WibZ z0qWtPR?LjEpw5nL$m>fF%Z{v%h>%trL#N64h}w-7PrsUE+t=}2$!n&Sa+HB>-%4s*>;cZW zjy>E;Vtgh-+eT{)mZ{tw5k0G!G&9aGxQr&s6XCj&Z8x#FZ6wL6!W}Mzwy@H-!R2fR?~0wxz!|d+f+HTt^gM1%p4_i9`oEzLg1Kgy`8vNBm!5umgR3J9)U)O z+e(#PV!w0hJBx1O-Wj@44dOD~HGhp|d$*J7LEAtmrdt~K-TKO1vAZ8B#XrUTZ}Bna z;v1OV4&tSmiBc0S^mGbfc4TYTa0hV{anrVg_Gfu(kC_m*U>bG!{%{UY&nOd^N zJ4jRO*R*_bV_obZRju=tG*s&==Dd?c+4bNZ(1!*Bn6!VgzB@@TujA2X;kkg?@WdiY zNlnW~3R=XPJ=#e^`V0kDNTbH)XSvpC<_eZgKrxLyF1a#kCqxTr4}AHbN!uxeGnuYI zA-*%frkTPS4r8Y!XkeNa(r82=tWXcMBFGA<4I8(Mcu23J*uQ_^HPoJ6q&BwhN4rQs z)on_b(kw&rOJDJ7vLlBzF?VO#8Qz_?ygRd5-9JcHf-maTQzu@#_I_QZ8`VIJX7U?z z6^RpoE*!oJ2^1*R;yliG^gJl|vM`<)%jJEXLm@rDzWf3Gv5iIT#?{;eHhwqhT7Q*N z;RJhKjtRahxrJ*;K5R<4g}q6ehAcQZaYrX;6xn5!uAj^ zhq1sPfIC!BY(bNjvD7`VvwE<(dq@w-ZDDV;W>xkR8P4t<`$>1_jkxGI7th~=wF*ioC{gLMj|CYk zFy8|t**AvgajzzxO%_<`zCT}x4>^td3w{n*$`&3VzS6fEEbjn`uaJpmz@Z?Mb||wt zh z{)L@&7{}#FtmrUF22b3MkYvj~l|+=yVIz)^2HL-?if9$1myM`0IyYJ5zQve^LG_iFP{Wf-W$RN?3QeshsXf|`%s)5xgK%lahM#rf=$UM zjoKGi;bW8e8(_2|!$s26jKOo1@0faKO!7~RFEG)E1=NZ?<@`HhmLFZ8SFrX?+84~B zfcR*Z0grUKXdPxz1;o=~IFQluS7;6X5|c~Zuma*{6aT#qlXejMrGNzZIQ$P`1h#Zp z`{gaK)6S%=!R{2moPNye9wU|7Oi|DplXeHr=(!1=u_B!9BiZXB(mN^!?S}jnF?@t3M^cQfRs%4T zxOjjC#Wlbv0?L&yrcN#Qo2a zPFioA!p!tP+5HP!aE>g4gR=H{sLGbC<9VFSwlj8~)T}fPnle6wpKu(1sDkL+j?l;k zcKwS@2)AmC#rQ>sciqI{V zSWH?v2R|uauKXtrS&szRVFCQ47-u zI$G9leN>)*$57)kiB;iXKI|HlIh5NqGQ9S(L)_4w?g|#`ayv$$`&NqBWNQA;PQA5d zA=lxM3P9dDelNX)Exu0HiP@~d4IH=1*whb1{Trq!6ONj{W;so2ZlP)53nJXf#5_5H~ zcz&3SmveQZarrIob>{0ct)}v$lJ@!7*Nxqu0iBaS*`EIlBnW5r+@yTt);WCB zzi70&3zzeqeaaCuUZ%BJPzlUM4QpOPT5!oIA;q}D?Efd3=XjDRbEDPC-=6{=WY!M} z6DzQ_51}=xu?r7LWBZ#bg-lcau5c6cctj#Ax8+)vzY>b`>jdXeu6EROE@z2;;d=av z!=#0E^a$@0@ZRVVxYLi7JR)^G?`dEjPFu#6Ehv3(%^>mlQlbv5=41F+&a>pl*oq;_ zkBMuwF+3l>{!Ss6HT&R|A7=Vdbe;I4=xVm@F$r*IAD~Ro6{Wh0$maZsLf0CzSC7eH z%TdLA^I6Y&Jt1B3kmv9d(x5`5z-vh=F=-nz=_#pI<0}yIYv_RvcoG_l=xMdtI%^=uE)lG<^AK;?NEBkW82v3r=+#@U_0)#wKq{bCwxlo zi&xm~XJmxHlUPr$79D+r7)5Xv)3H?lxdzr z;8(Nu&k0kPoFM|=5aF|UPFh&cMp98+2U+tnGN}qh+N2HpBnWxnq)_Gp#gU-*0*S0G zJkdpN@>^+zu1Lp=9oT z33>-9yJhJ1j`WrACZym484A5o=ObFQVY@!!D63|VKN5fK@xw4z4hhh{(ek+i{Knp- zeZagvk%4$uHS-f31yc=gKf$UM7qaMoNNbk{2RR>b`ZQ_#;SSQ2z ze@IW!<`AC2mgeKofU6A_{x6x)bm%=!d(oJFRypG4Sn_9=xvicz&$SsDmmB2_SsD)# zWBc;_XZ-$IzLBb5Wx;oh+$1#e#>nVblIqtQ?ZP0P39p6;($gmI{~W?FHuo!OBfWjb z9(~2GcZlh~kvSFj?&I_F?D3CoFK5+F@@6DspqV<*Ce2<4wA~BUjM~F*V znnVM!>#PO{U-72A8P8u3<5kb#Fq-HJn}*{-1bla6IHE_8JUK`|8DfvNu)#BxinhhQ zRYw)wEDmN8p}X+rW)GphFt=_Hnk@D*1W?*e6qDH`3+jnywaYB%K(UxnORBTZ+|E0N zL+N%yM@#xy!~vzX8l4Md$J8_pH;`f0)Fd8ZVHIdY@c3j>Yp)c(A zZv3%6P1>8x-p_(K^@?~XO>fUWQaPq~1 zQq{*x(N)eHi^stYfMf-p*v%7#1x6BG<)ofQa!RBukt%qlj;``mPiq0Ek1V`Lg))oi zqh`-w`YO&kOfdAOGj$X*Sh_Ryapgp^wk|SF+CJxhbb1Qg=1jd?>6F}mR`T4MKXaFs zkJGr^fv=4WZ>Y`i>~VyotL11LJ=H43jw{99pZihiT2{%0dS^bo%bT37f!@ii4i znqd8ofj7vGQ^H0rpJ#98mV7vA#XOvgSz4#YJ&$26$98k4=mw3%-xfQHU5RSeG@_x#(!a`PtOavj0>*xosi8` z{iHvP6Sni3ldy8y@5D%PfJFh0;FtOJ*<4Q==rA6QVIa!0K(Opf5j*QiJ@8v-qbK$D z7|KU_T**9sE~;&Zj=HQDtCdmES*(f|jlexwcQ4vhtj^YZ(K`5H^;It#?P)rJN^@Jl zLW$0U4WEgPO_9hJQT!MX>`iM_n0J!5YXPpn^75wfUdab}8O2VCREU-6F&-_X)z}$t zTBYrSMO+jdPS$=TO%t)(M7dkE;-j zLQ;UDXdN@Lh(-C(NIy$d$tC0&@NmtbZ(KrdDOCK2H6Kmdc5ICgb@sT1Jb1pWU^JBS zi%_!!DH9pPuK0i>otSN9TFqkKaXvY$MhBE}~Yo3wQy*z3+u|TCtfZ%@5L=$;MQnRjl8hr-G7(@~%Sr*L4RC7fknj zWvCQGEjz&9rgNv@MdOV^JW;}d*Y@v=Soe^mF07#+9c%55OH6DiSYYgsA9cshaKn#Q z)viJ<{D7O=veOU$)C5-1ADpVr68&i}r)LU9KA(KpPI#BVnO)$IZMip7Riy#gjB8fK zmU*AGs!D_F2JV3NHCx#MsnOZ_(YijjA@*^8K6upGcn|EM?9U?nZN3e_4EQrEus^EO zjySeiSEG%&8CeZYk7C)?uzT%fwgI%7eFmPv@r5)_t&=q-Z5E3Qpv&+>(vkq`D*bzi z{S!d_aOCo?PHSnV%;w7fyDMca>sp4Y{k54 zP#4?GLke@0T_c;t)S!Njr=S#b^6`#1p&Kl6zMULm<7!|(Y{j1TU4U+)u8(}CSF&og zXl2L8`_OPtD_J{XCg%l~(Pq}Q7L9{(zPc85vmcFovrY->3Y{{9okl5fEi0=<-78d6 zGF$kVwEoP#Hchr`XAp#Q#x7}!<9`MlR+~=2RKKbX%g8_!VcG=`bw$4eILDxPVN#F zFMmpu|Hi9Jlh%**3c?P)lcfjIj>Ppi6{XVM` zOsl&d+NCUYgYpA$Z3hfbX>J=E5sY=d7P(3~i!BVMonf5445n51={SV8ar8lM?gTNa zL7^tw4wJ~O#IYe1&!sxD#r0@wzb8{*UCUR?4Lr*oe4hE+jI{o^;o}x+k?|p`5K1eF z7OYw*^{j0F2N%e6Tm6wE*p{R9M{$vc{dXklQGCv;S-()~V>$c?A3+wI9ZKt>ts|k- z-9HYs>u~n*`R?D=<<9oww=UokHX)_BEBhKshqxcyhUqT%jOS|iu17($*2j{pPqT5B zvkarH@N1HeVYHU?X{}*;7#$$O*nJgF{X*+*DOb6z0yx7ZC3!kg-?!X*)(U%$N&6N% zz1hFhO2-dXx(HfFlLOkHNN+Yhf`)p}Uu$kZ2(N**V$e8|@F~InjKI$HZY{eVK~t?~ zPvD${19~@W-heiPi+n)?8f0w^w2qs_5$s$8+R$Yv8u*XR5*zpkY~XX5S3_9%&)MjP zv^^dooNh=9{CjUgvvP|JlQxKVwJpA&;Q*oxC(3lTqY)-2n4N6|rLb*rB;AIW zaN8qkGY{|I6)wa@Oy|2G-h<`N*@y@q`c>x8m?l-L4N;8``Ah!9k6UvwD6ID`V+r2) zLUeyv{TVE$G0m({G^YHV@o_!VG@*B_AEuWh91QQ8(1{Y9jw54e5B%?y;usq5@~i{A zXmD6!c*^rX-eDW#B~~+*Rt+4rjt^wc_klng6|do#_|;tYG_tnyD9*Mb#Y+@Ri{a*J z8AsQ{hxIlN>TU>Y9Zx60M{+Tq`rBG*@!USQ{S^Mg9vdb$rJdl2>CzONK?$4G6b8{T zw!10yuX}YBMx~6^mH)VcYe=OBaBcCN!%($T8?K(3?x;WJ`7+ScVc zEJ=QvPT_7T_;>Tr3SQwdF@f%YTXk0gt!HOBm7mk6cf-QcQ(yKrf#%pH*5fYO)6sg1 zIKAy$HoZAbf;0YVbLwl;CW&jqV!qwBWl{?mzM%$P3+g0_C5G;aw1R|xjxew#Z4PI^ zo|ZVL;$LR8#2%N+!duaPI6|##Mcusj*TmsQt4S?Cyft2E?&b(ST@>$VuD7CXt91pI zTRsqebo#GFX3J+KQo7uOB^+@54i8i^cFj9%Rx*a~#C9c9Kj)6WfVJ@#OBX0qw)X3| zUcjL%nZ{xj*J(}Nq^rLuhOS02fKG!@scj=0+8TCCBD>X^hHDPa;OKwivFQHfmjXU* zkoOmx-G+{H|2SU}boolzU`%Q}-V5^olY*`CKJ#vi3EazcZD|dUS!Ob>)Giv6aMxJ| ze{(vJCi;raX-oYoR^$}li}O7sf}Lnf+dA&eQM6O^ek=>#3zPONtI-YyZ96uy9d)$H zmNG%b=foctV7v6n`_4NHr^_6^!6cp+m3ct zWy}?r&kW+h2DiuN7RaWyr}$qSb6G)qdJR7?V;!*0-PpMfG^k;5F0V#;;#+GD)Uqi9 z&v)YdQn26fQFe+#rtxeVC;FdPzZNX4BMq`iS1LfBN!y!^?g&w-!;W;MgKgJkK@yeW znzTn*{Z2HwOUFa9Fo1vg9ol4={it9z)h-r1sB*n?)xIO>fou=bSP5UA=aZ}UI^S}%CER8;5 z&BoHc;z+~RvDj2K`V4+*O>@xYT*l&P!tQ5KPff4?LXKwER+MpUwoBHFIe$7`= zW7W_$l_6*TS3UXH&WnG2l&`Py^;5o8mG5iiyV)BXAX_yD|A;2*6djJAt-d)$4fw|> zn+o9?xy7y)(w1aAhz#|M=rW4`rgZr{-Rb~tWImwPN#&iFXq1R4vcGDE-_t?m=^%Fc z5zWXPVGXT6kAHUZPci?z<{zN~KFR!(!apPU$G!tTt4H9I&p$yU@ri<=E9~5gPYM47 zZR4Lk`1l;>G5(pyKl%Jqdx)Q*+KI&=!Yx<}Ua%5jM19;z89SBglpSlS^uYL;hb3b(zq&!m<5S^-! z3^jwLW^mFB-k3?W{T0dxGw9x5J;N;@!}I}z-0^T!auzJq;&ed@0#n)7{z`q-2PmNZ z0JS%qYv}{j&CulG0qTYTpOL5KH6-&I994pd8puOlI%1$QnDzse!Au&cZUy@D=G6Ov zN;ljFDIju?dIIwH4^oE#ycvXc@|nY6B`nQ?u5*(>lz6do4S`0-g3g;UIXY z*$du%HG+3NJHdN_>ucu{r({kS1v+a|J~&@NXoJHtm;V7LRKhj{9^b|ihN~Z;ky<0v zZJobU9P%Op@g@od@n(xhsAE8KYXs&ypKTkd4Dr%PrH^!!dJB-dMydM%Xh*9%0t_9k zjC;jsWo(B>D`UGhT0Izf(P@e(WTmMyf3&yh5fKUyc#mu!Gv{>mbldNJ`G^IwnQcl} z-$3E4F$ya-jZt{_b&N7sZex{6Z9i6-tKY^djh-|k#SC?bGSl3Uad$%#V49_vfSFFn zP{uJdL+M>khBA$ZGt`-ACvu!pbLVl&s1A=)cU3Ck9dy?cMc^#{kb=Or@#=>08DK15 zuv_tj{Sg8m28XIBDl|agX%0&f#z&je94-KjT%MNkLqaoO$D8>&fpgN(eS+G%d*YUk=!?NF{Vbyb<91Gb&*S;tK(Ho>vJI5$CYN1(k3W z@o+#9|5I)!;so#;!g|DoODf?yLJ{IO0iRt~35PP(nL^qXl`!C{N=QTohu5yDgeAPd zb(L@eH}UTf=kUfCbNnVC{;`En!fBu_JBuyiLeCme84eP%=8(6E&Yjb z2>4{cF$l$@)j|fxAq1qW6}Y24ItrSdfOgR53&)~Pz?2@K$x;g`nTVW%H5i9P5#aQ} zM3{*92|x#^{S?HV0J|aNqX7;VAn?Zc-f#%v9pZe8@W&3Z1oV8TSb=Z|@zsEXMxzsm z4*~p$AaG6qW~UMS;~6BTA<}0&5p1Tag}#8-5jeYU0$#*{Dh<6Z1~g7I7v`|aB#Z#` zet_fPa;S&+M8L}kyhB$3YrvVo<23>M%_72yY)mm=J?vtMh+{X)6sF=Nq??9L0KP=v zqkIh*I3Epys3u_IFXlLh6Bj~(fSyD3Vj>Jc!#03gMuaJdy8?bf-~+H)LWC|$(QpPh z2RQpzOaW*(tiGJ%G2b;2F~Falhm1Tx^-42)odC}u@D7~=T)hfCM~C886JgF8BCJPz z9$>%Uh;S8U2LSHCt~?QVzD3_cxQjU7sVifn=A7Ugwm)u=_`m`HZ)ff#f(H_byNK`y zLMK#&=YvAP9uz>FZ|)lofd(Vq2zcT!5&B|e99BPSj@JY{iNHHr1Q?J{gyo>;(Cav8 z5a*`BG=x2%;TD1cfy+=Pw-jbT56%S9Oh9fla3T)li-6C8gaf`jO@woxc@0?ijCnNm z0G}anwi^Mh&zWib0Fw~-h?4ff6KYz(#RJoZBj! zZ=o>aI{^pI4o`^?j<^%xGlUYvjesMK zkQKz!04+<2;5QRXu{4tiTabuC16u*BJV&L-@B>_e;G|b8@B`vI5$A?eRlG9#g!nYT z+AoRF4rP}Ec7KIs415aUMFgK&;3D9y*XT6xcL689K__NFcmYqog+OMau_8oTyocsO zJQ46CLK@}4aWiQ^r6B`#5wF%nJQf5kpHf0CK_G> z_!*%Q%Ki%&Q4a-fX#Vs2J}C-K+_O-W84s3P!|<} zXd&RVU@BOlF%JJlSO^*pbsgu-ba|n@qkg6&2er?eM2|_ygd#XClN|! zdvoQ341_5><0=)j2s07K*-fZ#(Eq7EE7@DU_>5r zYyV?)Rd@+X9;-v$n{EGWf*W^4%4d_&u;a5yPfL&R*BQ3(FF#TH;dxBEC+b>ob4`7s zZs>Fr74P?e5vR+YFygIl3$9CsuuD&1ZsxJdPt{I%|5N{|`m}g&-!t`M2epUb4wFw5 zJPfNosVRSa@Y`qgGcnwd`;U6G$~!**HA#{XG&Nwmg}TOc-Sm&PqNTKYYQQR>mND;d z>NY;6>`w!(Zk&+ff2`XmcJfuowVK`^XN*03wCqbrXtAMzi(&pZ^#fbGgrKSJ@scP8 zW&IwMHHW>bV%?s3nbZ-?#@2eIk8cOZ^A9^jt@2rX*%XlfrC-P3&KHO8`TA9}(|6;B zjHlPw3R~-enf^h)wDrH$(tgH__O043ZiE2Ao%&~^e{b>cmF8c(gC^G-?>jH%k6n)gVoYb(Ru5m> z&wHvEb+WDR746BtO#W@%vZr6I^yTO;Yd6-sHlkA{yYa2BT$tB+RIinpb*dypIN!D0 z?EUmq1GmzD8ny4&C@5yjR9107NR7hI`x9R*>gIQ)#>4|94+jN(`*M8vmwJP)1o!bc z^=#2iFP}^AEA6j(!6vD}u#*k!UX2U9vSReS75y76Z8xCDt$n}uufF`%(TRWVOkEc| z$MI!INlc?g&o}LN>bbDerhaYhtWR0G%)V52vG1CxE<1y!x@@(u4zv)7I5kYA66;QN zSq|Ki|C%8eJy1C;RAb$?QS(mG%d7q6{b;QB$K!NGNdLhAT-hE-tpg_3PHH8&WsCUU+aw7j{X5 ze}QeTs$FLO#riuF8$Y;nvsvDBtE|`+*}dW}W}WLkrFV_}>CHQ@pWmu!(DGRe8^kv) z`fTqSYG2*aW84|*8$*BFcCf z3H!%K=Kc|$+4EH&)tA-5CoMNLpJ$Vvc=M~e$()-nJTG-@=W=9UW>G)iIQ`w!5pUWz z-xMC^HsAlk-Aev_hHkfyJL2-spoxj&iH+a4zZzaFsP>2B?z#CLM|>D&^73jG+UMDY zrJAa-+d95LU~sEdud;>bGxE&oS<6=#p?%bJ~P&?Em^bEhJ8<=+lx}xs{*m zFQ!ataEn}=s~*2HY2Dt{x?f|B8OIX}+h3d9J+SEZ&{1JC*ACnG^zrE1!e1AvJ^H<# z;jhrnTmD?R@K)nZm5&viIb%H{w2t-G;9qeIC#K+`?G5Y~TD+*Trw< z1?@?CdhtxXvDLq=&;GW!T2iw%*3q_spIvWGncJ=Zre%k0cFY*NZ_DfUf9DlCPFV5o z-z8_ZeHi~|O8SadJ*R(;9y_;7muPX;y$gP0UhaBZI;6Tc>%6PxrlBJWhN_+C-5Q^L z{*P9*@`q$PpRpa${i5>_hb_N0SlVUJ_7gj1^qSfxYXW|N)IYI#+|q)QT-)(0J{EGtM;*`+3nA++j-Xi(z>l#@8=w=U$1@UX{~rabG2vuUvW)8 z*pJ^bYHOu8zV9YCF@-r@55DLbJ}cevecdrCa^b-0sii9quD6t^-zSqc4iBAsIeh&2xXt13RzDeed~}>|@@c$;xc%kZhGn5O=S7CSuJYi> z?56c%-#b@t+hTf+h{vhou7{H{KU_F}q1ng=N83%lJ?`VK6Kg-@m))MeXvKx!qQkt~ zMZ1O${I~15+fS|>7+zuPX-!YBs12VhH6mLp+Oa{-deZLi@;lZT@WJQ&sW*{*{!U$cq{Zn87wz%}yzI4P<^5P|n@J7# zv?p5+?3in~;bNU(Y1=tysua!lkEtU5gZw#-_3z)c5)1ROc5oW_#}w__ZMU5lj@e{6 zu|tR|tVDN~b@Q=a+V6nh@E~7T&3D}v6jU#$ZfKVuh>&tb(Ac2JaGzCE^IE9bm{rEdHd~cj$|I(di>_*u;7tLV-}5E z+M#gbn4lVV$VJ@^eVmrGc!uM{&2>6wG^g^9@AjaEwXj?BAb2__quH!F z<$X4qHzg#q)iw8o+Skx)I7~&@b^t}?7Z?#*TJ9$(<6-M6KqSP9f+AKP)Sd+#bIdwv*&qTQGr`mtPHq-%00I{(*>6IOXjBmlD*&`G z4F(A+hDe6@4FLfQ1pows0suv0i$S7X)B9{EFJ zLvjT`NE)n#q5|8~LqS^mkeH z_s^wkWYK@syq&t?IS%bTC5d8^>OE0vXrVI%4fW1M;vBQA)%BKU8-G@M{rUq^8xjSb zW=+gcU8cSHXHwP+Y3d%?Y*qH74Vd(jTQ0iuJ*p0np_gOd$Hw_JJ~LpApL`!FY2h9b z5!;6|8wv#Rw8fn~@(wdH#e92`#A1f_wG7{3r6C>8(}`r&shhk@ewK%M<^38dU+&($ zlXYQv6`@r$^OGx|DSwp*T;Bc-P0)evr+5y8_d`V@20r!^v%5CK@70d|#M?2ri}pHCCHm$za|6e9Q4|1$xGm zAl18}5XLUSE_HFS+_COMPRESSION VERSION - 1.26.28 + 1.26.29 TYPE 0 @@ -1025,7 +1025,7 @@ https://macfuse.github.io/ NAME - VeraCrypt 1.26.28 + VeraCrypt 1.26.29 PAYLOAD_ONLY TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING diff --git a/src/Setup/MacOSX/veracrypt_Legacy.pkgproj b/src/Setup/MacOSX/veracrypt_Legacy.pkgproj index 789359668b..a73474af25 100755 --- a/src/Setup/MacOSX/veracrypt_Legacy.pkgproj +++ b/src/Setup/MacOSX/veracrypt_Legacy.pkgproj @@ -557,7 +557,7 @@ USE_HFS+_COMPRESSION VERSION - 1.26.28 + 1.26.29 TYPE 0 diff --git a/src/Setup/MacOSX/veracrypt_fuse-t.pkgproj b/src/Setup/MacOSX/veracrypt_fuse-t.pkgproj index 2598712cb6..252b18ad81 100755 --- a/src/Setup/MacOSX/veracrypt_fuse-t.pkgproj +++ b/src/Setup/MacOSX/veracrypt_fuse-t.pkgproj @@ -557,7 +557,7 @@ USE_HFS+_COMPRESSION VERSION - 1.26.28 + 1.26.29 TYPE 0 @@ -1024,7 +1024,7 @@ https://github.com/macos-fuse-t/fuse-t/releases NAME - VeraCrypt 1.26.28 + VeraCrypt 1.26.29 PAYLOAD_ONLY TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING diff --git a/src/Setup/Portable.rc b/src/Setup/Portable.rc index caa3795bfe..59158b397d 100644 --- a/src/Setup/Portable.rc +++ b/src/Setup/Portable.rc @@ -26,8 +26,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -44,11 +44,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Portable" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCrypt Portable.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Setup/Setup.rc b/src/Setup/Setup.rc index 6494e4b02c..5a414f9999 100644 --- a/src/Setup/Setup.rc +++ b/src/Setup/Setup.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -46,11 +46,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCrypt Setup" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCrypt Setup.exe" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/SetupDLL/Setup.rc b/src/SetupDLL/Setup.rc index cf66e0d99e..c0f2851e65 100644 --- a/src/SetupDLL/Setup.rc +++ b/src/SetupDLL/Setup.rc @@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,26,28,1 - PRODUCTVERSION 1,26,28,1 + FILEVERSION 1,26,29,1 + PRODUCTVERSION 1,26,29,1 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -46,11 +46,11 @@ BEGIN BEGIN VALUE "CompanyName", "AM Crypto" VALUE "FileDescription", "VeraCryptSetup" - VALUE "FileVersion", "1.26.28" + VALUE "FileVersion", "1.26.29" VALUE "LegalTrademarks", "VeraCrypt" VALUE "OriginalFilename", "VeraCryptSetup.dll" VALUE "ProductName", "VeraCrypt" - VALUE "ProductVersion", "1.26.28" + VALUE "ProductVersion", "1.26.29" END END BLOCK "VarFileInfo" diff --git a/src/Signing/sign.bat b/src/Signing/sign.bat index 1b8fade7a2..5111b5d160 100644 --- a/src/Signing/sign.bat +++ b/src/Signing/sign.bat @@ -1,7 +1,7 @@ PATH=%PATH%;%WSDK81%\bin\x86;C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86 -set VC_VERSION=1.26.28 -set VC_VERSION_NBRE=1.26.28 +set VC_VERSION=1.26.29 +set VC_VERSION_NBRE=1.26.29 set SIGNINGPATH=%~dp0 cd %SIGNINGPATH% diff --git a/src/Signing/sign_TESTSIGNING.bat b/src/Signing/sign_TESTSIGNING.bat index 337fc567af..86dbe472d1 100644 --- a/src/Signing/sign_TESTSIGNING.bat +++ b/src/Signing/sign_TESTSIGNING.bat @@ -1,7 +1,7 @@ PATH=%PATH%;%WSDK81%\bin\x86 -set VC_VERSION=1.26.28 -set VC_VERSION_NBRE=1.26.28 +set VC_VERSION=1.26.29 +set VC_VERSION_NBRE=1.26.29 set SIGNINGPATH=%~dp0 cd %SIGNINGPATH% diff --git a/src/Signing/sign_test.bat b/src/Signing/sign_test.bat index 02b925581c..a3d46c3c42 100644 --- a/src/Signing/sign_test.bat +++ b/src/Signing/sign_test.bat @@ -1,6 +1,6 @@ PATH=%PATH%;%WSDK81%\bin\x86 -set VC_VERSION=1.26.28 -set VC_VERSION_NBRE=1.26.28 +set VC_VERSION=1.26.29 +set VC_VERSION_NBRE=1.26.29 set PFXNAME=TestCertificate\idrix_codeSign.pfx set PFXPASSWORD=idrix set PFXCA=TestCertificate\idrix_TestRootCA.crt diff --git a/src/Signing/sign_test_debug.bat b/src/Signing/sign_test_debug.bat index e64d224af4..8a0144f499 100644 --- a/src/Signing/sign_test_debug.bat +++ b/src/Signing/sign_test_debug.bat @@ -1,6 +1,6 @@ PATH=%PATH%;%WSDK81%\bin\x86 -set VC_VERSION=1.26.28 -set VC_VERSION_NBRE=1.26.28 +set VC_VERSION=1.26.29 +set VC_VERSION_NBRE=1.26.29 set PFXNAME=TestCertificate\idrix_codeSign.pfx set PFXPASSWORD=idrix set PFXCA=TestCertificate\idrix_TestRootCA.crt From c748b44b021c85f3b024c86940f957f2a58e1dab Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 11:50:13 +0900 Subject: [PATCH 2/6] Windows driver: fix PBKDF XSTATE cleanup Ensure SHA-256 and SHA-512 PBKDF cancellation paths restore saved extended processor state before cleanup. Remove unnecessary extended-state save/restore around BLAKE2s, which does not use AVX in the current implementation. --- src/Common/Pkcs5.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/src/Common/Pkcs5.c b/src/Common/Pkcs5.c index f1b816e341..5a3f39799b 100644 --- a/src/Common/Pkcs5.c +++ b/src/Common/Pkcs5.c @@ -300,12 +300,12 @@ void derive_key_sha256 (const unsigned char *pwd, int pwd_len, const unsigned ch #endif memcpy (dk, hmac.u, r); +#ifndef TC_WINDOWS_BOOT +cancelled: +#endif #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) KeRestoreExtendedProcessorState(&SaveState); -#endif -#ifndef TC_WINDOWS_BOOT -cancelled: #endif /* Prevent possible leaks. */ burn (&hmac, sizeof(hmac)); @@ -536,11 +536,11 @@ void derive_key_sha512 (const unsigned char *pwd, int pwd_len, const unsigned ch goto cancelled; memcpy (dk, hmac.u, r); +cancelled: #if defined (DEVICE_DRIVER) && !defined(_M_ARM64) if (NT_SUCCESS (saveStatus)) KeRestoreExtendedProcessorState(&SaveState); #endif -cancelled: /* Prevent possible leaks. */ burn (&hmac, sizeof(hmac)); burn (key, sizeof(key)); @@ -599,12 +599,6 @@ void hmac_blake2s unsigned char* buf = hmac.k; int b; unsigned char key[BLAKE2S_DIGESTSIZE]; -#if defined (DEVICE_DRIVER) && !defined(_M_ARM64) - NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; - XSTATE_SAVE SaveState; - if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); -#endif /* If the key is longer than the hash algorithm block size, let key = blake2s(key), as per HMAC specifications. */ if (lk > BLAKE2S_BLOCKSIZE) @@ -646,11 +640,6 @@ void hmac_blake2s hmac_blake2s_internal(d, ld, &hmac); -#if defined (DEVICE_DRIVER) && !defined(_M_ARM64) - if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorState(&SaveState); -#endif - /* Prevent leaks */ burn(&hmac, sizeof(hmac)); burn(key, sizeof(key)); @@ -729,12 +718,6 @@ void derive_key_blake2s (const unsigned char *pwd, int pwd_len, const unsigned c int b, l, r; #ifndef TC_WINDOWS_BOOT unsigned char key[BLAKE2S_DIGESTSIZE]; -#if defined (DEVICE_DRIVER) && !defined(_M_ARM64) - NTSTATUS saveStatus = STATUS_INVALID_PARAMETER; - XSTATE_SAVE SaveState; - if (IsCpuIntel() && HasSAVX()) - saveStatus = KeSaveExtendedProcessorState(XSTATE_MASK_GSSE, &SaveState); -#endif /* If the password is longer than the hash algorithm block size, let pwd = blake2s(pwd), as per HMAC specifications. */ if (pwd_len > BLAKE2S_BLOCKSIZE) @@ -812,10 +795,6 @@ void derive_key_blake2s (const unsigned char *pwd, int pwd_len, const unsigned c #endif memcpy (dk, hmac.u, r); -#if defined (DEVICE_DRIVER) && !defined(_M_ARM64) - if (NT_SUCCESS (saveStatus)) - KeRestoreExtendedProcessorState(&SaveState); -#endif #ifndef TC_WINDOWS_BOOT cancelled: #endif From aab9e38894b1864a0ed541c6b4d5ae30a0589f36 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 15:10:13 +0900 Subject: [PATCH 3/6] Fix x64 CPU feature macro guard CRYPTOPP_BOOL_X64 is defined as 0 on non-x64 builds, so #ifdef made HasSSE2() and HasISSE() always true. Use #if so non-x64 builds follow runtime feature detection and DisableCPUExtendedFeatures(). --- src/Crypto/cpu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Crypto/cpu.h b/src/Crypto/cpu.h index 507ef18497..b8e02b3e0e 100644 --- a/src/Crypto/cpu.h +++ b/src/Crypto/cpu.h @@ -266,7 +266,7 @@ int CpuId(uint32 input, uint32 output[4]); // been enabled by DetectX86Features. void DisableCPUExtendedFeatures (); -#ifdef CRYPTOPP_BOOL_X64 +#if CRYPTOPP_BOOL_X64 #define HasSSE2() 1 #define HasISSE() 1 #else From 612bccbd1a46fd40a07c3fefbebab58e25041acb Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 15:42:08 +0900 Subject: [PATCH 4/6] Align key schedules and fix Camellia SSSE3 dispatch Align CRYPTO_INFO primary and secondary key-schedule buffers so cipher implementations can safely use word-sized schedule access on VeraCrypt-managed storage. Keep generic Camellia direct uint64 schedule indexing. Builds that define CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS use direct 64-bit key and block byte loads/stores; memcpy is retained only for strict-alignment builds. Require SSSE3 before using the x64 AESNI 16-way Camellia path because the assembly uses pshufb in addition to AES and AVX. --- src/Common/Crypto.h | 4 +-- src/Crypto/Camellia.c | 71 +++++++++++++++++++++++++++++++++---------- 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/Common/Crypto.h b/src/Common/Crypto.h index b405875ace..1089547f53 100644 --- a/src/Common/Crypto.h +++ b/src/Common/Crypto.h @@ -254,8 +254,8 @@ typedef struct CRYPTO_INFO_t int mode; /* Mode of operation (e.g., XTS) */ int pkcs5; /* PRF algorithm */ - unsigned __int8 ks[MAX_EXPANDED_KEY]; /* Primary key schedule (if it is a cascade, it conatins multiple concatenated keys) */ - unsigned __int8 ks2[MAX_EXPANDED_KEY]; /* Secondary key schedule (if cascade, multiple concatenated) for XTS mode. */ + CRYPTOPP_ALIGN_DATA(16) unsigned __int8 ks[MAX_EXPANDED_KEY]; /* Primary key schedule (if it is a cascade, it conatins multiple concatenated keys) */ + CRYPTOPP_ALIGN_DATA(16) unsigned __int8 ks2[MAX_EXPANDED_KEY]; /* Secondary key schedule (if cascade, multiple concatenated) for XTS mode. */ BOOL hiddenVolume; // Indicates whether the volume is mounted/mountable as hidden volume diff --git a/src/Crypto/Camellia.c b/src/Crypto/Camellia.c index 3fd490230c..8db5ed22db 100644 --- a/src/Crypto/Camellia.c +++ b/src/Crypto/Camellia.c @@ -1096,7 +1096,7 @@ void camellia_decrypt(const unsigned __int8 *inBlock, unsigned __int8 *outBlock void camellia_encrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uint8* out_blk, uint32 blockCount) { #if !defined (_UEFI) - if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX()) /* on AMD cpu, AVX is too slow */ + if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX() && HasSSSE3()) /* on AMD cpu, AVX is too slow */ { #if defined (TC_WINDOWS_DRIVER) XSTATE_SAVE SaveState; @@ -1132,7 +1132,7 @@ void camellia_encrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uin void camellia_decrypt_blocks(unsigned __int8 *instance, const uint8* in_blk, uint8* out_blk, uint32 blockCount) { #if !defined (_UEFI) - if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX()) /* on AMD cpu, AVX is too slow */ + if ((blockCount >= 16) && IsCpuIntel() && IsAesHwCpuSupported () && HasSAVX() && HasSSSE3()) /* on AMD cpu, AVX is too slow */ { #if defined (TC_WINDOWS_DRIVER) XSTATE_SAVE SaveState; @@ -1493,14 +1493,53 @@ static const uint64 S[8][256] = { return (r << n) | (l >> (64 - n)); } +#ifdef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS +# define CAMELLIA_ALLOW_UNALIGNED_DATA_ACCESS +#endif + + VC_INLINE uint64 camellia_load64(const void *ptr) + { +#ifdef CAMELLIA_ALLOW_UNALIGNED_DATA_ACCESS + return *(const uint64 *)ptr; +#else + uint64 value; + memcpy(&value, ptr, sizeof(value)); + return value; +#endif + } + + VC_INLINE void camellia_store64(void *ptr, uint64 value) + { +#ifdef CAMELLIA_ALLOW_UNALIGNED_DATA_ACCESS + *(uint64 *)ptr = value; +#else + memcpy(ptr, &value, sizeof(value)); +#endif + } + +#ifdef CAMELLIA_ALLOW_UNALIGNED_DATA_ACCESS +# undef CAMELLIA_ALLOW_UNALIGNED_DATA_ACCESS +#endif + + VC_INLINE uint64 camellia_load_be64(const unsigned __int8 *ptr) + { + return bswap_64(camellia_load64(ptr)); + } + + VC_INLINE void camellia_store_be64(unsigned __int8 *ptr, uint64 value) + { + value = bswap_64(value); + camellia_store64(ptr, value); + } + void camellia_set_key(const unsigned __int8 key[], unsigned __int8 *ksPtr) { uint64 *ks = (uint64 *) ksPtr; - uint64 kll = bswap_64(*((uint64*)key)); - uint64 klr = bswap_64(*((uint64*)(key + 8))); - uint64 krl = bswap_64(*((uint64*)(key + 16))); - uint64 krr = bswap_64(*((uint64*)(key + 24))); + uint64 kll = camellia_load_be64(key); + uint64 klr = camellia_load_be64(key + 8); + uint64 krl = camellia_load_be64(key + 16); + uint64 krr = camellia_load_be64(key + 24); #ifdef CPPCRYPTO_DEBUG printf("kl: %016I64x %016I64x\n", kll, klr); @@ -1582,9 +1621,9 @@ void camellia_set_key(const unsigned __int8 key[], unsigned __int8 *ksPtr) void camellia_encrypt(const unsigned __int8 *in, unsigned __int8 *out, unsigned __int8 *ksPtr) { - uint64 *ks = (uint64 *) ksPtr; - uint64 l = bswap_64(*((uint64*)in)) ^ ks[0]; - uint64 r = bswap_64(*((uint64*)(in + 8))) ^ ks[1]; + const uint64 *ks = (const uint64 *) ksPtr; + uint64 l = camellia_load_be64(in) ^ ks[0]; + uint64 r = camellia_load_be64(in + 8) ^ ks[1]; #ifdef CPPCRYPTO_DEBUG printf("r0: %016I64x %016I64x\n", l, r); @@ -1713,16 +1752,16 @@ void camellia_encrypt(const unsigned __int8 *in, unsigned __int8 *out, unsigned r ^= ks[32]; l ^= ks[33]; - *(uint64*)out = bswap_64(r); - *(uint64*)(out + 8) = bswap_64(l); + camellia_store_be64(out, r); + camellia_store_be64(out + 8, l); } void camellia_decrypt(const unsigned __int8 *in, unsigned __int8 *out, unsigned __int8 *ksPtr) { - uint64 *ks = (uint64 *) ksPtr; - uint64 r = bswap_64(*((uint64*)in)) ^ ks[32]; - uint64 l = bswap_64(*((uint64*)(in + 8))) ^ ks[33]; + const uint64 *ks = (const uint64 *) ksPtr; + uint64 r = camellia_load_be64(in) ^ ks[32]; + uint64 l = camellia_load_be64(in + 8) ^ ks[33]; #ifdef CPPCRYPTO_DEBUG printf("DECRYPT: %016I64x %016I64x\n", l, r); @@ -1880,8 +1919,8 @@ void camellia_decrypt(const unsigned __int8 *in, unsigned __int8 *out, unsigned l ^= ks[0]; r ^= ks[1]; - *(uint64*)out = bswap_64(l); - *(uint64*)(out + 8) = bswap_64(r); + camellia_store_be64(out, l); + camellia_store_be64(out + 8, r); } #endif From 61978021d2f460f1882dc68bd6aeed9161fca6ac Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 19:30:59 +0900 Subject: [PATCH 5/6] Documentation: Use correct Yasm download link instead of old dead link --- doc/html/en/CompilingGuidelineWin.html | 4 ++-- doc/html/ru/CompilingGuidelineWin.html | 4 ++-- doc/html/zh-cn/CompilingGuidelineWin.html | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/html/en/CompilingGuidelineWin.html b/doc/html/en/CompilingGuidelineWin.html index 424888d533..890a37654f 100644 --- a/doc/html/en/CompilingGuidelineWin.html +++ b/doc/html/en/CompilingGuidelineWin.html @@ -168,7 +168,7 @@
  • Please download the prebuilt Win64 YASM zip archive at:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • Your browser might inform you that the file might be a security risk due to the low download rate or the unencrypted connection. Nevertheless, the official website is the most reliable source for this file, so we recommend to allow the download @@ -178,7 +178,7 @@
  • Please download the file "Win64 .exe" at:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • Your browser might inform you that the file might be a security risk due to the low download rate or the unencrypted connection. Nevertheless, the official website is the most reliable source for this file, so we recommend to allow the download diff --git a/doc/html/ru/CompilingGuidelineWin.html b/doc/html/ru/CompilingGuidelineWin.html index 0f673f1648..b3837d6747 100644 --- a/doc/html/ru/CompilingGuidelineWin.html +++ b/doc/html/ru/CompilingGuidelineWin.html @@ -166,7 +166,7 @@
  • Загрузите предварительно собранный Win64 zip-архив YASM отсюда:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • Ваш интернет-браузер может сообщить, что, возможно, файл представляет угрозу безопасности, так как редко скачивается или из-за незашифрованного соединения. Тем не менее официальный сайт – наиболее надёжный источник этого файла, поэтому мы рекомендуем разрешить загрузку. @@ -176,7 +176,7 @@
  • Загрузите файл "Win64 .exe" отсюда:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • Ваш интернет-браузер может сообщить, что, возможно, файл представляет угрозу безопасности, так как редко скачивается или из-за незашифрованного соединения. Тем не менее официальный сайт – наиболее надёжный источник этого файла, поэтому мы рекомендуем разрешить загрузку. diff --git a/doc/html/zh-cn/CompilingGuidelineWin.html b/doc/html/zh-cn/CompilingGuidelineWin.html index c634d239d7..1620290c2b 100644 --- a/doc/html/zh-cn/CompilingGuidelineWin.html +++ b/doc/html/zh-cn/CompilingGuidelineWin.html @@ -166,7 +166,7 @@
  • 请在以下链接下载预构建的Win64 YASM zip压缩包:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • 由于下载率较低或连接未加密,您的浏览器可能会提示该文件存在安全风险。不过,官方网站是该文件最可靠的来源,因此我们建议允许下载 @@ -176,7 +176,7 @@
  • 请在以下链接下载“Win64 .exe”文件:
    - https://yasm.tortall.net/Download.html + https://github.com/yasm/yasm/releases/tag/v1.3.0
  • 由于下载率较低或连接未加密,您的浏览器可能会提示该文件存在安全风险。不过,官方网站是该文件最可靠的来源,因此我们建议允许下载 From a24cbe55bd6a8a8ea4bea946be7cf40ca88bdf80 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 3 Jun 2026 20:54:42 +0900 Subject: [PATCH 6/6] Fix Twofish x64 multiblock tail handling Only call the one-block assembly helper when one block remains after the three-block loop. This prevents zero-block and multiple-of-three requests from reading and writing one extra block past the caller buffer. Add a Twofish multiblock self-test covering block counts 0 through 9. --- src/Common/Tests.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/Crypto/Twofish.c | 4 ++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/Common/Tests.c b/src/Common/Tests.c index 2ac8d8ffa1..20a5f2a87d 100644 --- a/src/Common/Tests.c +++ b/src/Common/Tests.c @@ -1379,6 +1379,47 @@ static BOOL DoAutoTestAlgorithms (void) } if (i != TWOFISH_TEST_COUNT) bFailed = TRUE; + + // Twofish EncipherBlocks()/DecipherBlocks() + { + enum { TwofishMultiBlockTestMaxBlocks = 9 }; + uint8 testData[(TwofishMultiBlockTestMaxBlocks + 1) * 16]; + uint8 expectedData[(TwofishMultiBlockTestMaxBlocks + 1) * 16]; + uint8 originalData[(TwofishMultiBlockTestMaxBlocks + 1) * 16]; + size_t blockCount, block, bytePos; + size_t blockSize = CipherGetBlockSize (TWOFISH); + size_t dataSize = sizeof (testData); + + memcpy (key, twofish_vectors[0].key, 32); + CipherInit (TWOFISH, key, ks_tmp); + + for (blockCount = 0; blockCount <= TwofishMultiBlockTestMaxBlocks; ++blockCount) + { + for (bytePos = 0; bytePos < dataSize; ++bytePos) + { + originalData[bytePos] = (uint8) (bytePos * 13 + blockCount); + testData[bytePos] = originalData[bytePos]; + expectedData[bytePos] = originalData[bytePos]; + } + + for (block = 0; block < blockCount; ++block) + EncipherBlock (TWOFISH, expectedData + block * blockSize, ks_tmp); + + EncipherBlocks (TWOFISH, testData, ks_tmp, blockCount); + if (memcmp (testData, expectedData, dataSize) != 0) + { + bFailed = TRUE; + break; + } + + DecipherBlocks (TWOFISH, testData, ks_tmp, blockCount); + if (memcmp (testData, originalData, dataSize) != 0) + { + bFailed = TRUE; + break; + } + } + } /* Camellia */ diff --git a/src/Crypto/Twofish.c b/src/Crypto/Twofish.c index ff46bc99c9..61fa42f52a 100644 --- a/src/Crypto/Twofish.c +++ b/src/Crypto/Twofish.c @@ -89,7 +89,7 @@ void twofish_encrypt_blocks(TwofishInstance *instance, const uint8* in_blk, uint { twofish_enc_blk2 (instance, out_blk, in_blk); } - else + else if (blockCount == 1) { twofish_enc_blk (instance, out_blk, in_blk); } @@ -110,7 +110,7 @@ void twofish_decrypt_blocks(TwofishInstance *instance, const uint8* in_blk, uint { twofish_dec_blk2 (instance, out_blk, in_blk); } - else + else if (blockCount == 1) { twofish_dec_blk (instance, out_blk, in_blk); }