From a0d42b6834efbfe1e97ab572bf6d59f11ff1873b Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Sun, 14 Feb 2021 17:00:53 +0000 Subject: [PATCH] App packages for Kiwix JS Windows 1.2.3 Former-commit-id: 1708cd271c07f6a5fca2555f0f417e43811c1d4a [formerly c1d938ee304107529dfaed8dd8e4f557cf35baa1] [formerly 1899dd4648d6caf8aa62be830dca1cd65394ee3b] [formerly f3cc8ca800ff70973ebae959221312db4c20f2c6 [formerly cbaa935760a81cf9bfd094bf1292d388fcdfbb2c [formerly 75c53f3587904d53bc7a46d1449e7828da7d7d34]]] Former-commit-id: 5acb5a064fc1aad870fbd8c03839a06551dd9f9a [formerly 5dec4b2931d8d53033fd7aeb0e9228892935903a [formerly d8e57e03a1ae4b2317f09e08388c5e4aeba34261]] Former-commit-id: a0d6c14a1d671b94808f0e1c5f4acfa8663e0167 [formerly 4867b67ad9c86d2a45733e6dd42d8ceab495c58e] Former-commit-id: 4977eb6181f29fdd93c962ce4f650837cdd0040f --- ....0_AnyCPU_bundle.appxupload.REMOVED.git-id | 1 + .../Add-AppDevPackage.ps1 | 776 ++++++++++++++++++ .../Add-AppDevPackage.psd1 | Bin 0 -> 10150 bytes .../cs-CZ/Add-AppDevPackage.psd1 | Bin 0 -> 10278 bytes .../de-DE/Add-AppDevPackage.psd1 | Bin 0 -> 11628 bytes .../en-US/Add-AppDevPackage.psd1 | Bin 0 -> 10150 bytes .../es-ES/Add-AppDevPackage.psd1 | Bin 0 -> 10834 bytes .../fr-FR/Add-AppDevPackage.psd1 | Bin 0 -> 11344 bytes .../it-IT/Add-AppDevPackage.psd1 | Bin 0 -> 10738 bytes .../ja-JP/Add-AppDevPackage.psd1 | Bin 0 -> 6698 bytes .../ko-KR/Add-AppDevPackage.psd1 | Bin 0 -> 6348 bytes .../pl-PL/Add-AppDevPackage.psd1 | Bin 0 -> 10106 bytes .../pt-BR/Add-AppDevPackage.psd1 | Bin 0 -> 10580 bytes .../ru-RU/Add-AppDevPackage.psd1 | Bin 0 -> 10342 bytes .../tr-TR/Add-AppDevPackage.psd1 | Bin 0 -> 9608 bytes .../zh-CN/Add-AppDevPackage.psd1 | Bin 0 -> 4998 bytes .../zh-TW/Add-AppDevPackage.psd1 | Bin 0 -> 5180 bytes ...p_1.2.3.0_AnyCPU.appxbundle.REMOVED.git-id | 1 + .../KiwixWebApp_1.2.3.0_AnyCPU.cer | Bin 0 -> 788 bytes package.appxmanifest | 2 +- pwabuilder-sw.js | 2 +- www/js/init.js | 2 +- 22 files changed, 781 insertions(+), 3 deletions(-) create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_AnyCPU_bundle.appxupload.REMOVED.git-id create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.ps1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/KiwixWebApp_1.2.3.0_AnyCPU.appxbundle.REMOVED.git-id create mode 100644 AppPackages/KiwixWebApp_1.2.3.0_Test/KiwixWebApp_1.2.3.0_AnyCPU.cer diff --git a/AppPackages/KiwixWebApp_1.2.3.0_AnyCPU_bundle.appxupload.REMOVED.git-id b/AppPackages/KiwixWebApp_1.2.3.0_AnyCPU_bundle.appxupload.REMOVED.git-id new file mode 100644 index 00000000..363188b9 --- /dev/null +++ b/AppPackages/KiwixWebApp_1.2.3.0_AnyCPU_bundle.appxupload.REMOVED.git-id @@ -0,0 +1 @@ +5c9340c51e277141e60503298d70467984510549 \ No newline at end of file diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.ps1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.ps1 new file mode 100644 index 00000000..ec57a3fd --- /dev/null +++ b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.ps1 @@ -0,0 +1,776 @@ +# +# Add-AppxDevPackage.ps1 is a PowerShell script designed to install app +# packages created by Visual Studio for developers. To run this script from +# Explorer, right-click on its icon and choose "Run with PowerShell". +# +# Visual Studio supplies this script in the folder generated with its +# "Prepare Package" command. The same folder will also contain the app +# package (a .appx file), the signing certificate (a .cer file), and a +# "Dependencies" subfolder containing all the framework packages used by the +# app. +# +# This script simplifies installing these packages by automating the +# following functions: +# 1. Find the app package and signing certificate in the script directory +# 2. Prompt the user to acquire a developer license and to install the +# certificate if necessary +# 3. Find dependency packages that are applicable to the operating system's +# CPU architecture +# 4. Install the package along with all applicable dependencies +# +# All command line parameters are reserved for use internally by the script. +# Users should launch this script from Explorer. +# + +# .Link +# http://go.microsoft.com/fwlink/?LinkId=243053 + +param( + [switch]$Force = $false, + [switch]$GetDeveloperLicense = $false, + [string]$CertificatePath = $null +) + +$ErrorActionPreference = "Stop" + +# The language resources for this script are placed in the +# "Add-AppDevPackage.resources" subfolder alongside the script. Since the +# current working directory might not be the directory that contains the +# script, we need to create the full path of the resources directory to +# pass into Import-LocalizedData +$ScriptPath = $null +try +{ + $ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path + $ScriptDir = Split-Path -Parent $ScriptPath +} +catch {} + +if (!$ScriptPath) +{ + PrintMessageAndExit $UiStrings.ErrorNoScriptPath $ErrorCodes.NoScriptPath +} + +$LocalizedResourcePath = Join-Path $ScriptDir "Add-AppDevPackage.resources" +Import-LocalizedData -BindingVariable UiStrings -BaseDirectory $LocalizedResourcePath + +$ErrorCodes = Data { + ConvertFrom-StringData @' + Success = 0 + NoScriptPath = 1 + NoPackageFound = 2 + ManyPackagesFound = 3 + NoCertificateFound = 4 + ManyCertificatesFound = 5 + BadCertificate = 6 + PackageUnsigned = 7 + CertificateMismatch = 8 + ForceElevate = 9 + LaunchAdminFailed = 10 + GetDeveloperLicenseFailed = 11 + InstallCertificateFailed = 12 + AddPackageFailed = 13 + ForceDeveloperLicense = 14 + CertUtilInstallFailed = 17 + CertIsCA = 18 + BannedEKU = 19 + NoBasicConstraints = 20 + NoCodeSigningEku = 21 + InstallCertificateCancelled = 22 + BannedKeyUsage = 23 + ExpiredCertificate = 24 +'@ +} + +function PrintMessageAndExit($ErrorMessage, $ReturnCode) +{ + Write-Host $ErrorMessage + if (!$Force) + { + Pause + } + exit $ReturnCode +} + +# +# Warns the user about installing certificates, and presents a Yes/No prompt +# to confirm the action. The default is set to No. +# +function ConfirmCertificateInstall +{ + $Answer = $host.UI.PromptForChoice( + "", + $UiStrings.WarningInstallCert, + [System.Management.Automation.Host.ChoiceDescription[]]@($UiStrings.PromptYesString, $UiStrings.PromptNoString), + 1) + + return $Answer -eq 0 +} + +# +# Validates whether a file is a valid certificate using CertUtil. +# This needs to be done before calling Get-PfxCertificate on the file, otherwise +# the user will get a cryptic "Password: " prompt for invalid certs. +# +function ValidateCertificateFormat($FilePath) +{ + # certutil -verify prints a lot of text that we don't need, so it's redirected to $null here + certutil.exe -verify $FilePath > $null + if ($LastExitCode -lt 0) + { + PrintMessageAndExit ($UiStrings.ErrorBadCertificate -f $FilePath, $LastExitCode) $ErrorCodes.BadCertificate + } + + # Check if certificate is expired + $cert = Get-PfxCertificate $FilePath + if (($cert.NotBefore -gt (Get-Date)) -or ($cert.NotAfter -lt (Get-Date))) + { + PrintMessageAndExit ($UiStrings.ErrorExpiredCertificate -f $FilePath) $ErrorCodes.ExpiredCertificate + } +} + +# +# Verify that the developer certificate meets the following restrictions: +# - The certificate must contain a Basic Constraints extension, and its +# Certificate Authority (CA) property must be false. +# - The certificate's Key Usage extension must be either absent, or set to +# only DigitalSignature. +# - The certificate must contain an Extended Key Usage (EKU) extension with +# Code Signing usage. +# - The certificate must NOT contain any other EKU except Code Signing and +# Lifetime Signing. +# +# These restrictions are enforced to decrease security risks that arise from +# trusting digital certificates. +# +function CheckCertificateRestrictions +{ + Set-Variable -Name BasicConstraintsExtensionOid -Value "2.5.29.19" -Option Constant + Set-Variable -Name KeyUsageExtensionOid -Value "2.5.29.15" -Option Constant + Set-Variable -Name EkuExtensionOid -Value "2.5.29.37" -Option Constant + Set-Variable -Name CodeSigningEkuOid -Value "1.3.6.1.5.5.7.3.3" -Option Constant + Set-Variable -Name LifetimeSigningEkuOid -Value "1.3.6.1.4.1.311.10.3.13" -Option Constant + + $CertificateExtensions = (Get-PfxCertificate $CertificatePath).Extensions + $HasBasicConstraints = $false + $HasCodeSigningEku = $false + + foreach ($Extension in $CertificateExtensions) + { + # Certificate must contain the Basic Constraints extension + if ($Extension.oid.value -eq $BasicConstraintsExtensionOid) + { + # CA property must be false + if ($Extension.CertificateAuthority) + { + PrintMessageAndExit $UiStrings.ErrorCertIsCA $ErrorCodes.CertIsCA + } + $HasBasicConstraints = $true + } + + # If key usage is present, it must be set to digital signature + elseif ($Extension.oid.value -eq $KeyUsageExtensionOid) + { + if ($Extension.KeyUsages -ne "DigitalSignature") + { + PrintMessageAndExit ($UiStrings.ErrorBannedKeyUsage -f $Extension.KeyUsages) $ErrorCodes.BannedKeyUsage + } + } + + elseif ($Extension.oid.value -eq $EkuExtensionOid) + { + # Certificate must contain the Code Signing EKU + $EKUs = $Extension.EnhancedKeyUsages.Value + if ($EKUs -contains $CodeSigningEkuOid) + { + $HasCodeSigningEKU = $True + } + + # EKUs other than code signing and lifetime signing are not allowed + foreach ($EKU in $EKUs) + { + if ($EKU -ne $CodeSigningEkuOid -and $EKU -ne $LifetimeSigningEkuOid) + { + PrintMessageAndExit ($UiStrings.ErrorBannedEKU -f $EKU) $ErrorCodes.BannedEKU + } + } + } + } + + if (!$HasBasicConstraints) + { + PrintMessageAndExit $UiStrings.ErrorNoBasicConstraints $ErrorCodes.NoBasicConstraints + } + if (!$HasCodeSigningEKU) + { + PrintMessageAndExit $UiStrings.ErrorNoCodeSigningEku $ErrorCodes.NoCodeSigningEku + } +} + +# +# Performs operations that require administrative privileges: +# - Prompt the user to obtain a developer license +# - Install the developer certificate (if -Force is not specified, also prompts the user to confirm) +# +function DoElevatedOperations +{ + if ($GetDeveloperLicense) + { + Write-Host $UiStrings.GettingDeveloperLicense + + if ($Force) + { + PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense + } + try + { + Show-WindowsDeveloperLicenseRegistration + } + catch + { + $Error[0] # Dump details about the last error + PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed + } + } + + if ($CertificatePath) + { + Write-Host $UiStrings.InstallingCertificate + + # Make sure certificate format is valid and usage constraints are followed + ValidateCertificateFormat $CertificatePath + CheckCertificateRestrictions + + # If -Force is not specified, warn the user and get consent + if ($Force -or (ConfirmCertificateInstall)) + { + # Add cert to store + certutil.exe -addstore TrustedPeople $CertificatePath + if ($LastExitCode -lt 0) + { + PrintMessageAndExit ($UiStrings.ErrorCertUtilInstallFailed -f $LastExitCode) $ErrorCodes.CertUtilInstallFailed + } + } + else + { + PrintMessageAndExit $UiStrings.ErrorInstallCertificateCancelled $ErrorCodes.InstallCertificateCancelled + } + } +} + +# +# Checks whether the machine is missing a valid developer license. +# +function CheckIfNeedDeveloperLicense +{ + $Result = $true + try + { + $Result = (Get-WindowsDeveloperLicense | Where-Object { $_.IsValid } | Measure-Object).Count -eq 0 + } + catch {} + + return $Result +} + +# +# Launches an elevated process running the current script to perform tasks +# that require administrative privileges. This function waits until the +# elevated process terminates, and checks whether those tasks were successful. +# +function LaunchElevated +{ + # Set up command line arguments to the elevated process + $RelaunchArgs = '-ExecutionPolicy Unrestricted -file "' + $ScriptPath + '"' + + if ($Force) + { + $RelaunchArgs += ' -Force' + } + if ($NeedDeveloperLicense) + { + $RelaunchArgs += ' -GetDeveloperLicense' + } + if ($NeedInstallCertificate) + { + $RelaunchArgs += ' -CertificatePath "' + $DeveloperCertificatePath.FullName + '"' + } + + # Launch the process and wait for it to finish + try + { + $AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru + } + catch + { + $Error[0] # Dump details about the last error + PrintMessageAndExit $UiStrings.ErrorLaunchAdminFailed $ErrorCodes.LaunchAdminFailed + } + + while (!($AdminProcess.HasExited)) + { + Start-Sleep -Seconds 2 + } + + # Check if all elevated operations were successful + if ($NeedDeveloperLicense) + { + if (CheckIfNeedDeveloperLicense) + { + PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed + } + else + { + Write-Host $UiStrings.AcquireLicenseSuccessful + } + } + if ($NeedInstallCertificate) + { + $Signature = Get-AuthenticodeSignature $DeveloperPackagePath -Verbose + if ($Signature.Status -ne "Valid") + { + PrintMessageAndExit ($UiStrings.ErrorInstallCertificateFailed -f $Signature.Status) $ErrorCodes.InstallCertificateFailed + } + else + { + Write-Host $UiStrings.InstallCertificateSuccessful + } + } +} + +# +# Finds all applicable dependency packages according to OS architecture, and +# installs the developer package with its dependencies. The expected layout +# of dependencies is: +# +# +# \Dependencies +# .appx\.msix +# \x86 +# .appx\.msix +# \x64 +# .appx\.msix +# \arm +# .appx\.msix +# +function InstallPackageWithDependencies +{ + $DependencyPackagesDir = (Join-Path $ScriptDir "Dependencies") + $DependencyPackages = @() + if (Test-Path $DependencyPackagesDir) + { + # Get architecture-neutral dependencies + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } + + # Get architecture-specific dependencies + if (($Env:Processor_Architecture -eq "x86" -or $Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x86"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + if (($Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x64"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + if (($Env:Processor_Architecture -eq "arm") -and (Test-Path (Join-Path $DependencyPackagesDir "arm"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + } + Write-Host $UiStrings.InstallingPackage + + $AddPackageSucceeded = $False + try + { + if ($DependencyPackages.FullName.Count -gt 0) + { + Write-Host $UiStrings.DependenciesFound + $DependencyPackages.FullName + Add-AppxPackage -Path $DeveloperPackagePath.FullName -DependencyPath $DependencyPackages.FullName -ForceApplicationShutdown + } + else + { + Add-AppxPackage -Path $DeveloperPackagePath.FullName -ForceApplicationShutdown + } + $AddPackageSucceeded = $? + } + catch + { + $Error[0] # Dump details about the last error + } + + if (!$AddPackageSucceeded) + { + if ($NeedInstallCertificate) + { + PrintMessageAndExit $UiStrings.ErrorAddPackageFailedWithCert $ErrorCodes.AddPackageFailed + } + else + { + PrintMessageAndExit $UiStrings.ErrorAddPackageFailed $ErrorCodes.AddPackageFailed + } + } +} + +# +# Main script logic when the user launches the script without parameters. +# +function DoStandardOperations +{ + # Check for an .appx or .msix file in the script directory + $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } + if ($PackagePath -eq $null) + { + $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + $PackageCount = ($PackagePath | Measure-Object).Count + + # Check for an .appxbundle or .msixbundle file in the script directory + $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.appxbundle") | Where-Object { $_.Mode -NotMatch "d" } + if ($BundlePath -eq $null) + { + $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.msixbundle") | Where-Object { $_.Mode -NotMatch "d" } + } + $BundleCount = ($BundlePath | Measure-Object).Count + + # Check for an .eappx or .emsix file in the script directory + $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.eappx") | Where-Object { $_.Mode -NotMatch "d" } + if ($EncryptedPackagePath -eq $null) + { + $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.emsix") | Where-Object { $_.Mode -NotMatch "d" } + } + $EncryptedPackageCount = ($EncryptedPackagePath | Measure-Object).Count + + # Check for an .eappxbundle or .emsixbundle file in the script directory + $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.eappxbundle") | Where-Object { $_.Mode -NotMatch "d" } + if ($EncryptedBundlePath -eq $null) + { + $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.emsixbundle") | Where-Object { $_.Mode -NotMatch "d" } + } + $EncryptedBundleCount = ($EncryptedBundlePath | Measure-Object).Count + + $NumberOfPackages = $PackageCount + $EncryptedPackageCount + $NumberOfBundles = $BundleCount + $EncryptedBundleCount + + # There must be at least one package or bundle + if ($NumberOfPackages + $NumberOfBundles -lt 1) + { + PrintMessageAndExit $UiStrings.ErrorNoPackageFound $ErrorCodes.NoPackageFound + } + # We must have exactly one bundle OR no bundle and exactly one package + elseif ($NumberOfBundles -gt 1 -or + ($NumberOfBundles -eq 0 -and $NumberOfpackages -gt 1)) + { + PrintMessageAndExit $UiStrings.ErrorManyPackagesFound $ErrorCodes.ManyPackagesFound + } + + # First attempt to install a bundle or encrypted bundle. If neither exists, fall back to packages and then encrypted packages + if ($BundleCount -eq 1) + { + $DeveloperPackagePath = $BundlePath + Write-Host ($UiStrings.BundleFound -f $DeveloperPackagePath.FullName) + } + elseif ($EncryptedBundleCount -eq 1) + { + $DeveloperPackagePath = $EncryptedBundlePath + Write-Host ($UiStrings.EncryptedBundleFound -f $DeveloperPackagePath.FullName) + } + elseif ($PackageCount -eq 1) + { + $DeveloperPackagePath = $PackagePath + Write-Host ($UiStrings.PackageFound -f $DeveloperPackagePath.FullName) + } + elseif ($EncryptedPackageCount -eq 1) + { + $DeveloperPackagePath = $EncryptedPackagePath + Write-Host ($UiStrings.EncryptedPackageFound -f $DeveloperPackagePath.FullName) + } + + # The package must be signed + $PackageSignature = Get-AuthenticodeSignature $DeveloperPackagePath + $PackageCertificate = $PackageSignature.SignerCertificate + if (!$PackageCertificate) + { + PrintMessageAndExit $UiStrings.ErrorPackageUnsigned $ErrorCodes.PackageUnsigned + } + + # Test if the package signature is trusted. If not, the corresponding certificate + # needs to be present in the current directory and needs to be installed. + $NeedInstallCertificate = ($PackageSignature.Status -ne "Valid") + + if ($NeedInstallCertificate) + { + # List all .cer files in the script directory + $DeveloperCertificatePath = Get-ChildItem (Join-Path $ScriptDir "*.cer") | Where-Object { $_.Mode -NotMatch "d" } + $DeveloperCertificateCount = ($DeveloperCertificatePath | Measure-Object).Count + + # There must be exactly 1 certificate + if ($DeveloperCertificateCount -lt 1) + { + PrintMessageAndExit $UiStrings.ErrorNoCertificateFound $ErrorCodes.NoCertificateFound + } + elseif ($DeveloperCertificateCount -gt 1) + { + PrintMessageAndExit $UiStrings.ErrorManyCertificatesFound $ErrorCodes.ManyCertificatesFound + } + + Write-Host ($UiStrings.CertificateFound -f $DeveloperCertificatePath.FullName) + + # The .cer file must have the format of a valid certificate + ValidateCertificateFormat $DeveloperCertificatePath + + # The package signature must match the certificate file + if ($PackageCertificate -ne (Get-PfxCertificate $DeveloperCertificatePath)) + { + PrintMessageAndExit $UiStrings.ErrorCertificateMismatch $ErrorCodes.CertificateMismatch + } + } + + $NeedDeveloperLicense = CheckIfNeedDeveloperLicense + + # Relaunch the script elevated with the necessary parameters if needed + if ($NeedDeveloperLicense -or $NeedInstallCertificate) + { + Write-Host $UiStrings.ElevateActions + if ($NeedDeveloperLicense) + { + Write-Host $UiStrings.ElevateActionDevLicense + } + if ($NeedInstallCertificate) + { + Write-Host $UiStrings.ElevateActionCertificate + } + + $IsAlreadyElevated = ([Security.Principal.WindowsIdentity]::GetCurrent().Groups.Value -contains "S-1-5-32-544") + if ($IsAlreadyElevated) + { + if ($Force -and $NeedDeveloperLicense) + { + PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense + } + if ($Force -and $NeedInstallCertificate) + { + Write-Warning $UiStrings.WarningInstallCert + } + } + else + { + if ($Force) + { + PrintMessageAndExit $UiStrings.ErrorForceElevate $ErrorCodes.ForceElevate + } + else + { + Write-Host $UiStrings.ElevateActionsContinue + Pause + } + } + + LaunchElevated + } + + InstallPackageWithDependencies +} + +# +# Main script entry point +# +if ($GetDeveloperLicense -or $CertificatePath) +{ + DoElevatedOperations +} +else +{ + DoStandardOperations + PrintMessageAndExit $UiStrings.Success $ErrorCodes.Success +} + +# SIG # Begin signature block +# MIIiTwYJKoZIhvcNAQcCoIIiQDCCIjwCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD5BdpRggDM/3NT +# wBDQFaER9aOD9SdM3CUzPDQe6F3dFqCCC3YwggT+MIID5qADAgECAhMzAAACz20s +# xXyqZabYAAAAAALPMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTAwHhcNMTkwNTAyMjEyNTQyWhcNMjAwNTAyMjEyNTQyWjB0MQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQC5WvO1XVj5Qw+VAXn6dOWwyrU48JLK7JuZQh066rWPdXWDqRs2/0CWjtd1CtGW +# rsezdxI5gtnuSHU9R61TOTxp0crY8D8hWkw66Chnw30gU0uci7yT+SBG8FCCym9q +# Tlbx1EOu2Onbvnx3fUZzAzpk6fYtyyVRDZDJFlkpDBUgY6i4T3AknQHlaZRJydZY +# qJuJuC/gbhunzJ11CKbIMWUPo+291saTjGYiv0hXHYyhweatkIEpK4pi9MKh28jB +# eSN0NwiSZeNXAeRPoQr1aJbWCYBKBdyuMNexWvsd+YTeksvywPjqJm7Tc37FZqUF +# rMTrENoMXHw2mZxZicaUR/a7AgMBAAGjggF9MIIBeTAfBgNVHSUEGDAWBgorBgEE +# AYI3PQYBBggrBgEFBQcDAzAdBgNVHQ4EFgQUN/NN7E2vLAQxqRCIC1jAbwO8VQgw +# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh +# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwODY1KzQ1NDI0NDAfBgNVHSMEGDAW +# gBTm/F97uyIAWORyTrX0IXQjMubvrDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v +# Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0Ff +# MjAxMC0wNy0wNi5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw +# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8yMDEw +# LTA3LTA2LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCqMI8I +# dLEoiAqBDMw46rHAR5p98xk1puiL6RYE5MMy4Sn3zLjwxsMC1bCNC0H+XKkDhiX1 +# JJ+wBMRpCieUBLIJ3BmvuwGLkuTYcgQHcoHTicrXeZhB5aAp+5WR2fiMQCNwmrL2 +# ywp1C70cctf/mCAB3sDN0NOl/2sMi/mFaSIVCddO8sHp1Hin0eNG9j2pBmYRo54v +# 7+bTxYApyPrTt5gN3KTOhGjrm/sUgyhtIleaRr43ccTs7TiPTW4TVDmHxvQeQd+6 +# hyjawsACpYBSPL2a4mbAXsNW6GUdzNTs9U0FrvOblnvyqTuu4Ls7QpvsILrqHG30 +# aiSPMQE8igpYYWdYMIIGcDCCBFigAwIBAgIKYQxSTAAAAAAAAzANBgkqhkiG9w0B +# AQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAG +# A1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAw +# HhcNMTAwNzA2MjA0MDE3WhcNMjUwNzA2MjA1MDE3WjB+MQswCQYDVQQGEwJVUzET +# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV +# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT +# aWduaW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +# 6Q5kUHlntcTj/QkATJ6UrPdWaOpE2M/FWE+ppXZ8bUW60zmStKQe+fllguQX0o/9 +# RJwI6GWTzixVhL99COMuK6hBKxi3oktuSUxrFQfe0dLCiR5xlM21f0u0rwjYzIjW +# axeUOpPOJj/s5v40mFfVHV1J9rIqLtWFu1k/+JC0K4N0yiuzO0bj8EZJwRdmVMkc +# vR3EVWJXcvhnuSUgNN5dpqWVXqsogM3Vsp7lA7Vj07IUyMHIiiYKWX8H7P8O7YAS +# NUwSpr5SW/Wm2uCLC0h31oVH1RC5xuiq7otqLQVcYMa0KlucIxxfReMaFB5vN8sZ +# M4BqiU2jamZjeJPVMM+VHwIDAQABo4IB4zCCAd8wEAYJKwYBBAGCNxUBBAMCAQAw +# HQYDVR0OBBYEFOb8X3u7IgBY5HJOtfQhdCMy5u+sMBkGCSsGAQQBgjcUAgQMHgoA +# UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQY +# MBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6 +# Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1 +# dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0 +# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw +# MTAtMDYtMjMuY3J0MIGdBgNVHSAEgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9Bggr +# BgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9k +# ZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABp +# AGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEA +# GnTvV08pe8QWhXi4UNMi/AmdrIKX+DT/KiyXlRLl5L/Pv5PI4zSp24G43B4AvtI1 +# b6/lf3mVd+UC1PHr2M1OHhthosJaIxrwjKhiUUVnCOM/PB6T+DCFF8g5QKbXDrMh +# KeWloWmMIpPMdJjnoUdD8lOswA8waX/+0iUgbW9h098H1dlyACxphnY9UdumOUjJ +# N2FtB91TGcun1mHCv+KDqw/ga5uV1n0oUbCJSlGkmmzItx9KGg5pqdfcwX7RSXCq +# tq27ckdjF/qm1qKmhuyoEESbY7ayaYkGx0aGehg/6MUdIdV7+QIjLcVBy78dTMgW +# 77Gcf/wiS0mKbhXjpn92W9FTeZGFndXS2z1zNfM8rlSyUkdqwKoTldKOEdqZZ14y +# jPs3hdHcdYWch8ZaV4XCv90Nj4ybLeu07s8n07VeafqkFgQBpyRnc89NT7beBVaX +# evfpUk30dwVPhcbYC/GO7UIJ0Q124yNWeCImNr7KsYxuqh3khdpHM2KPpMmRM19x +# HkCvmGXJIuhCISWKHC1g2TeJQYkqFg/XYTyUaGBS79ZHmaCAQO4VgXc+nOBTGBpQ +# HTiVmx5mMxMnORd4hzbOTsNfsvU9R1O24OXbC2E9KteSLM43Wj5AQjGkHxAIwlac +# vyRdUQKdannSF9PawZSOB3slcUSrBmrm1MbfI5qWdcUxghYvMIIWKwIBATCBlTB+ +# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk +# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9N +# aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDEwAhMzAAACz20sxXyqZabYAAAA +# AALPMA0GCWCGSAFlAwQCAQUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE +# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBD +# AerId9KHdHY2YUo2JgxX4DBOYZn/OL23opQ4Y8smAjBCBgorBgEEAYI3AgEMMTQw +# MqAUgBIATQBpAGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQu +# Y29tMA0GCSqGSIb3DQEBAQUABIIBADGTPfGCerJY3hyXU9uXgMgXbhJWidsAnI4d +# MAwoI/yBxmlg+1Yq4gAFR0wFDqTPbXYTBvQ5OdKjqhxOmS9f0Qf3PY0NYrwdLaQP +# IjeSrAF3YFbhiyUokgLR78Iy1XQeJxhEquOuH5TA7rvSt4kFkZIlAdwSARSul7JN +# VXegfxt+PV/tV+P21pqbkYvvjNgBpbVJBO4WY74vPNc/GWI5juH807Lnb3/AGx5D +# Mg5AGXJnO0sgRrLDxAensCAEmPBDj+ej1mnhhqD86xPQtTvqaPQ/TkFkZfT4AtJR +# m5eMPwcbjSpCHr/XqKv3R5SyQYnCu4PiLaboMf7JzaYrulkqHAmhghO5MIITtQYK +# KwYBBAGCNwMDATGCE6UwghOhBgkqhkiG9w0BBwKgghOSMIITjgIBAzEPMA0GCWCG +# SAFlAwQCAQUAMIIBVwYLKoZIhvcNAQkQAQSgggFGBIIBQjCCAT4CAQEGCisGAQQB +# hFkKAwEwMTANBglghkgBZQMEAgEFAAQgwBrd2L0fVeiLCvS9/WD0rS16JiEiejGB +# agB4Lm83Q5oCBl56b8E7rhgSMjAyMDA0MDkyMDU4MDQuMzFaMAcCAQGAAgH0oIHU +# pIHRMIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE +# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYD +# VQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMd +# VGhhbGVzIFRTUyBFU046QkJFQy0zMENBLTJEQkUxJTAjBgNVBAMTHE1pY3Jvc29m +# dCBUaW1lLVN0YW1wIFNlcnZpY2Wggg8iMIIE9TCCA92gAwIBAgITMwAAAP8vnmsF +# EdNrlwAAAAAA/zANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UE +# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z +# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ +# Q0EgMjAxMDAeFw0xOTA5MDYyMDQxMDlaFw0yMDEyMDQyMDQxMDlaMIHOMQswCQYD +# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe +# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYDVQQLEyBNaWNyb3Nv +# ZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMdVGhhbGVzIFRTUyBF +# U046QkJFQy0zMENBLTJEQkUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1w +# IFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuCOuILcP+ +# LfUEqGIrXGvCr+mEFRpy20gxNNMkZI+kViE/rsYH3eItmQfawIndfP1bKp+1J2b3 +# mXXJ7qqwMYlflpc4qTc/HgOByIa3tFmUEWN/jDBKzE9FucFHKgPT8gtEnVGOg9h3 +# ES3zIJj18d+sVVcbpgmutvJKopGl1u9vTNwLxdH3S4t+ov1SgOgsTF0CblJiu/zd +# iwsQzstk+3nQPjk+DlwfEC5kwOricPV0QMaC/q+Buj+4rBUAvDKb/NvBqRtJptmT +# 9S5HZOXidFMm2i2SJVK0sEamOw69Jaj1mB5bksyMP0PFttGYVxh02dTBDG6AbmTC +# Er9bKrgPBjWxAgMBAAGjggEbMIIBFzAdBgNVHQ4EFgQUzhnW8N+xfFZ8o+3bxTZy +# MEBX1gEwHwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8w +# TTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj +# dHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBK +# BggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9N +# aWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUE +# DDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAQEApAnaQljuFW4UjErMgHn4 +# LWHVod53qtw/9FERINhT6tH/Ed6n6AzDcfeBdr4taaxo5dB+juWM6nDQwd99kInu +# Kk7fqRlxd7ZmJlkFQ6MAdLzdJDGXSkS7I3aR7E/pKnBV1Y6gbICuPeM1CTPYSO26 +# ryfWM36/PGu1Iv1JGNkJOG82X2J3SiACPFIzCaexAK4P9bEPc8GhqdHdxc7x0fVe +# Ow+EvBanHFa82hmz2HC/JMaI4yR7JtRgKjZZTuOIWBqkXmDFcFaTgfFl4jJLdwQC +# dkMb4wfLgVdc/Jym4nJrqBZFTb0mkAYb6OkK1h6gNobk69mFO5yjDTiw8hPGZRor +# kjCCBnEwggRZoAMCAQICCmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJ +# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k +# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jv +# c29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIx +# MzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh +# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD +# b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw +# MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX +# 9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkT +# jnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG +# 8lhHhjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGK +# r0tkiVBisV39dx898Fd1rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6 +# Kgox8NpOBpG2iAg16HgcsOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEF +# TyJNAgMBAAGjggHmMIIB4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6 +# XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD +# VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxi +# aNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3Nv +# ZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu +# Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy +# b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQw +# gaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFo +# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRt +# MEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0 +# AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/ +# gXEDPZ2joSFvs+umzPUxvs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtU +# VwgrUYJEEvu5U4zM9GASinbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9 +# Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9 +# BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOd +# eyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1 +# JeVk7Pf0v35jWSUPei45V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4Ttx +# Cd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5 +# u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9U +# JyH3yKxO2ii4sanblrKnQqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Z +# ta7cRDyXUHHXodLFVeNp3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa +# 7wknHNWzfjUeCLraNtvTX4/edIhJEqGCA7AwggKYAgEBMIH+oYHUpIHRMIHOMQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYDVQQLEyBNaWNy +# b3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMdVGhhbGVzIFRT +# UyBFU046QkJFQy0zMENBLTJEQkUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0 +# YW1wIFNlcnZpY2WiJQoBATAJBgUrDgMCGgUAAxUAAjbENWjPNg9MFMx7uLG8Osg6 +# dx2ggd4wgdukgdgwgdUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u +# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp +# b24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMScw +# JQYDVQQLEx5uQ2lwaGVyIE5UUyBFU046NERFOS0wQzVFLTNFMDkxKzApBgNVBAMT +# Ik1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0ZXIgQ2xvY2swDQYJKoZIhvcNAQEF +# BQACBQDiORpNMCIYDzIwMjAwNDA5MTE1MTQxWhgPMjAyMDA0MTAxMTUxNDFaMHcw +# PQYKKwYBBAGEWQoEATEvMC0wCgIFAOI5Gk0CAQAwCgIBAAICGdwCAf8wBwIBAAIC +# GqwwCgIFAOI6a80CAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAaAK +# MAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0BAQUFAAOCAQEABnBMppi9 +# x3/eTqCHWKBAzZuCVn0vSxjDJ8mUsWB3mXddZ/TDcfA2MTqQnwW/xiDx6HNlTdRt +# Ii/tjOegAiYl1HfPViMQTadFFA3+v38/dWLFPtiZHv4tc9P1E2SQ9IxkDx/2T5zd +# bLQynB/5HvkGv3PoFp7uT6XmwnM+E7NXGaKPEieId69dlxmrujXD9PdyP4zVTD2A +# cS70aUYUVJb0yyePQnFP5nbWJLY9l0mZ/4ypxNnlx1GYO7D6z3YW8CBtHvncKEoF +# sMHdvZSa4uqxxixty1j5ckjPjzEmK94glEetxaRsxfSKYUDmGyM+dRgOhCzQgkjW +# EWoyoxk1SKmC5TGCAvUwggLxAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI +# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv +# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD +# QSAyMDEwAhMzAAAA/y+eawUR02uXAAAAAAD/MA0GCWCGSAFlAwQCAQUAoIIBMjAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEINF+cv0h +# z00XM+ToBhlb8dz+wZuCJW0KI9hnUR0ujeLXMIHiBgsqhkiG9w0BCRACDDGB0jCB +# zzCBzDCBsQQUAjbENWjPNg9MFMx7uLG8Osg6dx0wgZgwgYCkfjB8MQswCQYDVQQG +# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg +# VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAP8vnmsFEdNrlwAAAAAA/zAWBBQN4cP3 +# Lty5AfjYZ0mpFsU2dlUhQTANBgkqhkiG9w0BAQsFAASCAQCOVuvdo4Ol6alhUPSP +# rhSzI2HiILRARtD8pv1hIaaZBTHhGGTMlqeqQJNsuWqBqFPrfkFSVGsFv0aWfO/S +# Z2c6hTKvj2JfxoxDpBgfbNBe53CDKI3zKBDqHX/jMs6H+wI1ebDzXROkmp4G7h2R +# ZyW/0yi9kj8m4mkL8sDNcS/KABoIUxUPyfC+wHN1Tgujpzu6ZeaMJ0vPptI3vX3w +# hLf6jmMleMS/iMG6iYDfdIEnbeM4OC1X9YC9+CrCnIAyHkjQxBW/NI94oV1e7YGF +# 4A1Qt3Q+A3kC1Asua6owY2oL/ecKYeGzwsbP2/kU6SWerMObKfbd++xalbf/eCyD +# xEZ+ +# SIG # End signature block diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..89c0d41750510272ed346287aa487fd14c6823be GIT binary patch literal 10150 zcmds-?Mqxo6vpRsq5s3hK+{5F(w9&Ogf>xAmL`p$5(52V*3~T0)$VGng#PPopWmE4 z&dl9A@oJWYhQ;0cGB4-lInOyWU$bSx__v@6L4z^A9nWWw&1$jp6CznnuKHh&WiEcB--HK+?|)Ul z)2NA|eH7#2PbSiINgYsb{0>yzgq@lOuQ#Mw=U&&cpd%Tjo&`fjSDX?%2&>vd{90o zQeH-un?{ZC#4=`oA?r;gAyOW+{O-0&GMNNe-15q<_zC7cl`N;aYT`IET^pupiI>M3 zdpv(yL#&T*ajE4{S4Yy5@rlLT5eM74I@6VLYokmwQo9r3iukPgiT1})>Q%K`*R^R3 zu8m761{ZQ9DJB_I0YNo7#jxZH%UdQ%_@s8YT_iw>oSt--?nmw z^UbMh(I%AH#TliYr`y@KpM{*^$~vZ;e^A&e=}ep)=$%`yn|b=lF`L)o$=4>sBUv02 zGK=9pu>r`$Bh)7JBld^{k7?fKS7VQT=!8wURXOa|7H=7Y9yi2*$c>hkOl~u1(+2=^} zSOz2qVA1_(gCkvG{YLL|4j@W5)$&}=r&>!fHqlAF0G5c|^H!DAWmk($`d+shwyb|u zj9QjR7zMp}3#pBxOl#2SoYsX_ke*u{^exBUWhI$x^i+1o!$a9N#pn|~9Y;^#0hl-S zAjh!YrvByaMAx9wSeW`9U-En;-#A*q7}3Ey`>tWOCaJBa6ZWY1L0*@9i!pPk)~;tA z%{dyurrF?q5|!(YC($leLoHej4J;PY8r|a{UmaTw;JF=~C*~^AK)nHGKo#+Hp;%aq zVQLx}2p@T-#&SG?wXTvTWp!c{{~CKBS<1cO9M4j}GN$F&w)DmURwflY4Z`S*NyxV;R8Fwj;)&%CHL3*oVrA z@w~RCDt4A()MLFRcfAYWY5%{L88^aT;w-BVZejuEXzv5pP?Xz&=wgsWI4tp&b=G^@_EdXeZ5TPu3M)mv~?2ZmW;*kL@hj zTEiG^9M>dBH&DHoIIWzQNp+pZ<4TIZI&?7Mq{_HYG`phmiq_K4nWaZu0TmS6+QB zgO9G#aUf~dwA#6eHXzkeXZvv2y{0>;Mnh@{+ik7M22V{QF80E2ve$)9H)ndrIo^lL zNko>rmt>%Fm#c{@1ok`efX$oEw2ZS%uDnGfY|x(AGi$JFnTdCZ2g6ccZ`nQ$jOo~4 z(GGULr@j^MY_HfVv6U*rG~$xij)5ms04w;kM9*7Ixff$_NO>{Sp* zU{p@*_BApYf}N8_J0RswooSu(k?mXCj!AvTiCPuw!NJ40nzxl4do)O4RdKx{ui@S5 zH};~8-_vd^(!aW#(ODAYlyfHAA{(qwix{i7&4#62HslY^BbF_Hk`2Fg``s#bxV`4z znmz;RnpV@@e7q(LvR7lfU?#(&mgPurw^=ejcd^{nz2@+9O5?hGwwmlNtyeRp1UK1D z0)@#MDT^Y_;yP)WH5LC;QPb1T*w-aPSs4+jNQTV(_rUdc&!`sC{-N!lbyZ;0nrSBV zW_1bPIHR(f1lz&z(|P7L?^Bx~9iCs_8PR$?Bf771qMvk9bgyc;5)qDIt<$T=vxgmXMef5c$jpXY$-{COUWPQ@j dV7W$vd7EXQ0&`Bfyclnv1A~m)`Y$?u{{tkY@&Nz< literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..b597c78d6e810702c8e97255186b6553ded17998 GIT binary patch literal 10278 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..da5f1abe239e70a6acec563081f65b97cb0f6eb9 GIT binary patch literal 11628 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..89c0d41750510272ed346287aa487fd14c6823be GIT binary patch literal 10150 zcmds-?Mqxo6vpRsq5s3hK+{5F(w9&Ogf>xAmL`p$5(52V*3~T0)$VGng#PPopWmE4 z&dl9A@oJWYhQ;0cGB4-lInOyWU$bSx__v@6L4z^A9nWWw&1$jp6CznnuKHh&WiEcB--HK+?|)Ul z)2NA|eH7#2PbSiINgYsb{0>yzgq@lOuQ#Mw=U&&cpd%Tjo&`fjSDX?%2&>vd{90o zQeH-un?{ZC#4=`oA?r;gAyOW+{O-0&GMNNe-15q<_zC7cl`N;aYT`IET^pupiI>M3 zdpv(yL#&T*ajE4{S4Yy5@rlLT5eM74I@6VLYokmwQo9r3iukPgiT1})>Q%K`*R^R3 zu8m761{ZQ9DJB_I0YNo7#jxZH%UdQ%_@s8YT_iw>oSt--?nmw z^UbMh(I%AH#TliYr`y@KpM{*^$~vZ;e^A&e=}ep)=$%`yn|b=lF`L)o$=4>sBUv02 zGK=9pu>r`$Bh)7JBld^{k7?fKS7VQT=!8wURXOa|7H=7Y9yi2*$c>hkOl~u1(+2=^} zSOz2qVA1_(gCkvG{YLL|4j@W5)$&}=r&>!fHqlAF0G5c|^H!DAWmk($`d+shwyb|u zj9QjR7zMp}3#pBxOl#2SoYsX_ke*u{^exBUWhI$x^i+1o!$a9N#pn|~9Y;^#0hl-S zAjh!YrvByaMAx9wSeW`9U-En;-#A*q7}3Ey`>tWOCaJBa6ZWY1L0*@9i!pPk)~;tA z%{dyurrF?q5|!(YC($leLoHej4J;PY8r|a{UmaTw;JF=~C*~^AK)nHGKo#+Hp;%aq zVQLx}2p@T-#&SG?wXTvTWp!c{{~CKBS<1cO9M4j}GN$F&w)DmURwflY4Z`S*NyxV;R8Fwj;)&%CHL3*oVrA z@w~RCDt4A()MLFRcfAYWY5%{L88^aT;w-BVZejuEXzv5pP?Xz&=wgsWI4tp&b=G^@_EdXeZ5TPu3M)mv~?2ZmW;*kL@hj zTEiG^9M>dBH&DHoIIWzQNp+pZ<4TIZI&?7Mq{_HYG`phmiq_K4nWaZu0TmS6+QB zgO9G#aUf~dwA#6eHXzkeXZvv2y{0>;Mnh@{+ik7M22V{QF80E2ve$)9H)ndrIo^lL zNko>rmt>%Fm#c{@1ok`efX$oEw2ZS%uDnGfY|x(AGi$JFnTdCZ2g6ccZ`nQ$jOo~4 z(GGULr@j^MY_HfVv6U*rG~$xij)5ms04w;kM9*7Ixff$_NO>{Sp* zU{p@*_BApYf}N8_J0RswooSu(k?mXCj!AvTiCPuw!NJ40nzxl4do)O4RdKx{ui@S5 zH};~8-_vd^(!aW#(ODAYlyfHAA{(qwix{i7&4#62HslY^BbF_Hk`2Fg``s#bxV`4z znmz;RnpV@@e7q(LvR7lfU?#(&mgPurw^=ejcd^{nz2@+9O5?hGwwmlNtyeRp1UK1D z0)@#MDT^Y_;yP)WH5LC;QPb1T*w-aPSs4+jNQTV(_rUdc&!`sC{-N!lbyZ;0nrSBV zW_1bPIHR(f1lz&z(|P7L?^Bx~9iCs_8PR$?Bf771qMvk9bgyc;5)qDIt<$T=vxgmXMef5c$jpXY$-{COUWPQ@j dV7W$vd7EXQ0&`Bfyclnv1A~m)`Y$?u{{tkY@&Nz< literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..c9d0a0b6a2439e7e19af8cc58c45ec5a4b6af39c GIT binary patch literal 10834 zcmd^_UvC@76~*VZ1^OKb2WVO#QDVnIiU30EP;?;FZVjkPP@pd~MM<;_tQr@|4Qe3`p+@Y@mcy@ckb!)lk`~UU!*Vf{}1Vxdgc?||0Lhv(sLiD zEgkpMUHuJo_krXdq!0D~Tz@;7=cQzfHS=?wkMw;@*OwY|H~lRAG@;ory^vNbofo=4 zNZUH@=+j(s_S2p|Gjb^X=aM$ns8xEX^I1C8h&_E<$fmiZ?`V#djzRiOdVekdJfP!=Bwvo9M_Qeg>;|GrV~kfsB8YVEiW8t zt{1Wx56seAjT&UjCK@%*nveC|SpFQOzsi$;ThCj2td@u`|1619J&UjKQd8DhOV%il zSfp3df@cnTwcX1SkF)=}CBe3Esz6IasI*7eJHq-xQ0|U*7EhU$+KDVC*xm})LDyHD% zTa0$HYbw;8Wi1xMI2IydsWbRH$bOp1189bxSOy1p9G+v=qSI2}7y3KXs1tqWiG{M3 zKXlm5(#bOJJMT6y1$W5++t&dkk-FvrC+G%>TC{v>I&CPg|r4|JSo?TB||UYX&6 zu7Mx?GHrQnPuC~eJ4<=-P~T2uNsUZ=5>L<89wi6y+Eh>Cn^S!vzlk(#fKE5@`liRb zeci3~NOO{%UH%?qj0}?Voj5MD<`Hw}dAChQLUT^X1ePw(m<#$N5<1kgzs(xgQfhB{ z=C9??g)}z$Y8;%1<87_=8D*H=@vQF?ft?7aKJ)ZQV+)ZU!LO%oCUVO)j94gWd(B@gXcMS2FaE(D%hYP-+EFf z$LXJ05||w5yZP!!&lKrXSx7Ag+hBd5Pp9%7F~M%*`U73}HIU8oW@KUtcZ9^J**+pb zc0~VyuZ@ePq(@CTRNch_awohx)!efzljt~VaIABy+q;abz&emc-2?-hu|S&hzY9NfC&%*mN)kR-ulSJ=0%H@Ii6ow7Jr8w%D{FMB z5r^p;MHp?K>)Wq0%kp_we%n@Wc|UiOpXy9pIR3uIFji2%jKaWC!54n#K6Zrt%tK@s znknSLoiHF((p4YcrxU;MiwyG62tkeaAi>OLq8sFT!?p*A-q4a3hZ?rF(>}KzpA>E_Gj{TTt z3_M3Bj&qOE?}O!f9Y7R`IPoFia%@{n5da!6jEV zF}9`qV2SPz+hIUFZssE=s1PqCJve1w64 zPT)zj;oQ__yzbvdvXYEl)3}U@hSLnyk2LvC6eUchn0=+nxnz$6KRnj^w4ksj7=1uXyiA#wh*$8vvlM$ ziKixr1tJnlL^6XL)ZyK4lFYyodPvm`A%^CVoS7$i})Q{qM zYSTQ&*4U@VbIu#R_N{eADx(?kGCy;kkwSFH7H8pU{?wmyZGF8nQ0!-|vXbs?E%9^7 zs#>o;g!4p=R$@TL9?KKx-=zt&m)(|nb=~hX^CMM}%z2xA1X_;Lzp}^3Ewhy~5>K(4 z)4jJ5841V1ztmj##`Q4JRwKrIO8l6SXB;Z6L zA22VU!xs0TMn<r? zo0njc>+X=fRDGh0js1(j;J)~be$E{)-3)yu??@v1Ci-lqgWuc>kkMYf@V?}(-j}p1 z>nQz2YXNs2*R#J5JD%BH1U_Q^dT+exsd#@9S`Y5UYu2YcIIp_KKC=F=UqbthD=x2i@gZE~^XkopaH(;!vaLC3*gp4qrXiOlCw@ zq-8Icbsv4&o@B*XuUTPE@72(G##^q^H#9XhhT5_}kj(S^e(Xs46qa;H?$w$5$hZf^mp<^(6qY8HQ**PdKQCtC_GHgn81u*q^*gAE`vP=ggm^5S!8d0k7) zU~m@5y*$Pdnaw!VokttHyV5Xr5X#%el0A5FD1Q(`G@`C=t_vLx{1)TjS;qn�*^( z^=jT7YF<`9(PuUFzUgjS(W@|5pFaGur>TQI9@X}Gy&k`fX~)99huG097yS<6Cbq&0 z)IzeD!_}Osa{V1yIGSAp=i8ZBxMu&@zai>}LayI}L`{N+U7^{V)(H?ZyyL_2dy2z+wrA&q^s*~ z$M-TFz83n~%Z|uj#L0Cpwi(}xbgDZ{`hPOTy&J!K03CiB*7Qmvy1F_)xCY;lA$+2e z)l7OB%Ay|dT;0Kt^{kT2ePwkP_Huu7ri<+zNi*lQtM}#a?%i>DZ`>W5f5+mT`8Uc5 W-e%t(Gf=bYxAgGB`}$oa|Gx)O+02Ik literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..048bca53dd5d8ac7f279c06c3a2819bf3a91aea3 GIT binary patch literal 11344 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 V`2WNG@lp357O>Hp{#DEOe*nf^VIcqj literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..e8e875e2b8fc983e172ac8d956f4de736801ef4d GIT binary patch literal 10738 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..3d2a4ef2f94a034b2ad97de71b90df31b01b155b GIT binary patch literal 6698 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..40327553ac2706532760b19874d9f473f83872e7 GIT binary patch literal 10580 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 Fe*lAX;zIxc literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_1.2.3.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..ad3eb95564ac189ec8799cefa1173389f7b2c0f8 GIT binary patch literal 4998 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 QE_K}JC9Y$^w4*l{0M!6B*8l(j literal 0 HcmV?d00001 diff --git a/package.appxmanifest b/package.appxmanifest index 32b6060b..908fc6c2 100644 --- a/package.appxmanifest +++ b/package.appxmanifest @@ -1,6 +1,6 @@  - + Kiwix JS diff --git a/pwabuilder-sw.js b/pwabuilder-sw.js index 44e7ba41..866dde7c 100644 --- a/pwabuilder-sw.js +++ b/pwabuilder-sw.js @@ -4,7 +4,7 @@ // App version number - ENSURE IT MATCHES VALUE IN init.js // DEV: Changing this will cause the browser to recognize that the Service Worker has changed, and it will download and // install a new copy -const appVersion = '1.2.2'; +const appVersion = '1.2.3'; // Kiwix ZIM Archive Download Server in regex form // DEV: The server URL is defined in init.js, but is not available to us in SW diff --git a/www/js/init.js b/www/js/init.js index 2d6e509c..453fa968 100644 --- a/www/js/init.js +++ b/www/js/init.js @@ -49,7 +49,7 @@ var params = {}; */ var appstate = {}; /******** UPDATE VERSION IN pwabuilder-sw.js TO MATCH VERSION *******/ -params['version'] = "1.2.2"; //DEV: Manually update this version when there is a new release: it is compared to the Settings Store "version" in order to show first-time info, and the cookie is updated in app.js +params['version'] = "1.2.3"; //DEV: Manually update this version when there is a new release: it is compared to the Settings Store "version" in order to show first-time info, and the cookie is updated in app.js /******* UPDATE THIS ^^^^^^ IN serveice worker!! ********************/ params['packagedFile'] = getSetting('packagedFile') || "wikipedia_en_100_maxi.zim"; //For packaged Kiwix JS (e.g. with Wikivoyage file), set this to the filename (for split files, give the first chunk *.zimaa) and place file(s) in default storage params['archivePath'] = "archives"; //The directory containing the packaged archive(s) (relative to app's root directory)