From a61daf171c3038d94b866c3b3159e4a24d97ee0f Mon Sep 17 00:00:00 2001 From: Jakub Janaszkiewicz Date: Fri, 8 May 2026 13:20:56 +0200 Subject: [PATCH 1/3] Fix round not ending if only fighting monsters --- WukongMp.PvP/ECS/Systems/PvpRoundEndSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WukongMp.PvP/ECS/Systems/PvpRoundEndSystem.cs b/WukongMp.PvP/ECS/Systems/PvpRoundEndSystem.cs index 51b9242..0df33ef 100644 --- a/WukongMp.PvP/ECS/Systems/PvpRoundEndSystem.cs +++ b/WukongMp.PvP/ECS/Systems/PvpRoundEndSystem.cs @@ -36,7 +36,7 @@ protected override void OnUpdate(UpdateTick tick) foreach (var tamer in WukongApi.Sync.AreaTamers) { if (tamer.IsDead || !PvpConstants.CompetingTeamIds.Contains(tamer.TeamId)) - return; + break; aliveMonsters.Add(tamer.TeamId); } From 2523e4a2a105264541a0456a17cebdc8b9dfc2ed Mon Sep 17 00:00:00 2001 From: Jakub Janaszkiewicz Date: Thu, 14 May 2026 11:34:05 +0200 Subject: [PATCH 2/3] Do not use the MathF namespace --- WukongMp.PvP/ECS/Systems/PvpAntiStallSystem.cs | 10 +++++----- WukongMp.PvP/Gamemode/PvpMode.cs | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WukongMp.PvP/ECS/Systems/PvpAntiStallSystem.cs b/WukongMp.PvP/ECS/Systems/PvpAntiStallSystem.cs index 44e2d6a..e3267ec 100644 --- a/WukongMp.PvP/ECS/Systems/PvpAntiStallSystem.cs +++ b/WukongMp.PvP/ECS/Systems/PvpAntiStallSystem.cs @@ -43,7 +43,7 @@ private enum AntiStallState private float _activeTimer; private float _roomEngagementScore; - private readonly Dictionary _playerEngagementMultipliers = []; + private readonly Dictionary _playerEngagementMultipliers = []; private readonly Dictionary _playerEngagement = []; private readonly Random _rng = new(); @@ -148,15 +148,15 @@ private void UpdatePlayerMultipliers() var playerFacingDictionary = CalculatePlayerFacing(); foreach (var playerId in _playerEngagement.Keys) { - float current = _playerEngagementMultipliers.TryGetValue(playerId, out var val) ? val : 1.0f; + double current = _playerEngagementMultipliers.TryGetValue(playerId, out var val) ? val : 1.0; if (playerFacingDictionary.TryGetValue(playerId, out var isFacing) && isFacing) { - current = MathF.Max(current - AntiStallConfig.PlayerEngagementMultiplierIncrease * _elapsedTime, AntiStallConfig.PlayerEngagementMultiplierMin); + current = Math.Max(current - AntiStallConfig.PlayerEngagementMultiplierIncrease * _elapsedTime, AntiStallConfig.PlayerEngagementMultiplierMin); } else { - current = MathF.Min(current + AntiStallConfig.PlayerEngagementMultiplierDecay * _elapsedTime, AntiStallConfig.PlayerEngagementMultiplierMax); + current = Math.Min(current + AntiStallConfig.PlayerEngagementMultiplierDecay * _elapsedTime, AntiStallConfig.PlayerEngagementMultiplierMax); } _playerEngagementMultipliers[playerId] = current; @@ -242,7 +242,7 @@ private void SetActiveState() var randomCoefficient = GetRandomCoefficient(); var scaledDecay = baseDecayRate * multiplier * AntiStallConfig.ActiveDuration * randomCoefficient; Logging.LogDebug("Applying anti-stall decay to player {0}: baseDecayRate={1}, multiplier={2}, random={3}, scaledDecay={4}", playerId, baseDecayRate, multiplier, randomCoefficient, scaledDecay); - rpc.SendStallDamage(playerId, scaledDecay); + rpc.SendStallDamage(playerId, (float)scaledDecay); } } diff --git a/WukongMp.PvP/Gamemode/PvpMode.cs b/WukongMp.PvP/Gamemode/PvpMode.cs index 995f0c1..5a75fa3 100644 --- a/WukongMp.PvP/Gamemode/PvpMode.cs +++ b/WukongMp.PvP/Gamemode/PvpMode.cs @@ -199,7 +199,7 @@ private void PlacePlayers() var playerEntities = AllPvPPlayers.ToList(); var teamsIds = playerEntities.Select(p => p.TeamId).Distinct().ToList(); var teamsCount = teamsIds.Count; - var teamAngleStep = 2 * MathF.PI / teamsCount; + var teamAngleStep = 2 * Math.PI / teamsCount; var entityOffsetAngle = 0.15f; var teamMemberIndex = new Dictionary(); @@ -217,24 +217,24 @@ private void PlacePlayers() var teamBaseAngle = teamIndex[team] * teamAngleStep; FVector spawnLocation; - float teamAngleOffset = 0f; + var teamAngleOffset = 0.0; if (customPositions != null && customPositions.TryGetSpawnPosition(team, out var teamSpawn)) { var dir = teamSpawn - center; - var customTeamAngle = MathF.Atan2(dir.Y, dir.X); + var customTeamAngle = Math.Atan2(dir.Y, dir.X); teamAngleOffset = customTeamAngle - teamBaseAngle; var angle = customTeamAngle + memberIndex * entityOffsetAngle; - var x = center.X + radius * MathF.Cos(angle); - var y = center.Y + radius * MathF.Sin(angle); + var x = center.X + radius * Math.Cos(angle); + var y = center.Y + radius * Math.Sin(angle); spawnLocation = new FVector(x, y, center.Z); } else { var angle = teamBaseAngle + teamAngleOffset + memberIndex * entityOffsetAngle; - var x = center.X + radius * MathF.Cos(angle); - var y = center.Y + radius * MathF.Sin(angle); + var x = center.X + radius * Math.Cos(angle); + var y = center.Y + radius * Math.Sin(angle); spawnLocation = new FVector(x, y, center.Z); } From a0420308cf7a382b27429c6c0becb857307aeb92 Mon Sep 17 00:00:00 2001 From: Jakub Janaszkiewicz Date: Thu, 14 May 2026 11:44:28 +0200 Subject: [PATCH 3/3] Sign the build script --- MakeModFolder.ps1 | 281 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 278 insertions(+), 3 deletions(-) diff --git a/MakeModFolder.ps1 b/MakeModFolder.ps1 index e52bb52..ac9e8b9 100644 --- a/MakeModFolder.ps1 +++ b/MakeModFolder.ps1 @@ -1,5 +1,3 @@ -#!powershell.exe -ExecutionPolicy Bypass -File - param ( [string] $Configuration ) @@ -28,7 +26,7 @@ if ($solutionFiles.Count -eq 1) { # Build solution Write-Output "Building solution $solutionPath in configuration $Configuration..." -$buildOutput = dotnet build $solutionPath -c $Configuration -v minimal /t:Rebuild | Tee-Object -FilePath 'build.log' +$buildOutput = dotnet build $solutionPath -c $Configuration /t:Rebuild # Prepare temporary output directory $outputRoot = Join-Path $scriptDir 'Output' @@ -103,3 +101,280 @@ else { Invoke-Item $outputRoot } + +# SIG # Begin signature block +# MIIzUAYJKoZIhvcNAQcCoIIzQTCCMz0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBrYDVbh6H6gqxE +# Wh3efVHS3YHqiDYOnt7UlSdgRv/tj6CCG04wggXMMIIDtKADAgECAhBUmNLR1FsZ +# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK +# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu +# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy +# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT +# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv +# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo +# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD +# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH +# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD +# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV +# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70 +# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1 +# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3 +# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK +# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg +# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj +# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7 +# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE +# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ +# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn +# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c +# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF +# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx +# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8 +# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY +# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2 +# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY +# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al +# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk +# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T +# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggasMIIElKADAgECAhMzAAEH/N2f +# WNezCLFbAAAAAQf8MA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD +# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ +# RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMwHhcNMjYwNTEzMTAyNzQ4WhcNMjYwNTE2 +# MTAyNzQ4WjBvMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOR3JlYXRlciBMb25kb24x +# DzANBgNVBAcTBkxvbmRvbjEaMBgGA1UEChMRUmVhZHlDb2RlIExpbWl0ZWQxGjAY +# BgNVBAMTEVJlYWR5Q29kZSBMaW1pdGVkMIIBojANBgkqhkiG9w0BAQEFAAOCAY8A +# MIIBigKCAYEAlF6awwTPrten9IwLsuWWKUwjfO5/MZIZRViUHYYimDa1B4v+ZNUk +# THVmfFvh89Yk2nKQFx8d55KyyRLA15n/ZZlZyUz4uYHqg3pspqk/8livLqOXFOjf +# kCeItoyNaMRCQXVulZwe8BeYX/E2d5Hg2ZR0Ldu7VW+43klnx5rVFaUyiEBSxAkl +# /mUF/28sXqErXKTD+9vJQO6CSdbzcVjN12AZylkNGSZo0as8nnL2j1Dp6kVKUuF5 +# SWx3dkHGQoqE1t4oxVk1bTXG+Yz/rDZKItdj0Pl+/gXtCvxZqN08AR6n8AH2bwj2 +# T9Rmh4AZ/SBQP58Ff90AVK3bA9hzDC8cgZegrAPxoYUdp2wMwa/uXwKHoGHQaGId +# JoUBJGZOxJL5msuZ+gqSYMkwNTwXyGz1OtJixFK/1rn9/1uSRHXi+oEneR7TJKKm +# 8iWLrjwvuZsF1v7VQ4KREuEk1W0iwwF2nVPahH/mbByc+yKtFzNDSwQ1Q0fYBz/a +# epOE8AwRQ8unAgMBAAGjggHUMIIB0DAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQE +# AwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggrBgEFBQcDAwYaKwYBBAGCN2GB +# qYfkIIKGu8QjqYOnCJOByDAwHQYDVR0OBBYEFNjaHUI2bLJ3lZQYEzvfar/L4IRa +# MB8GA1UdIwQYMBaAFGtepTTDBcViSiFajqtzYGLUrGOFMGcGA1UdHwRgMF4wXKBa +# oFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29m +# dCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDMuY3JsMHQGCCsG +# AQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29t +# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBF +# T0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcC +# ARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRv +# cnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQA0OMlmTk0/aZoUuv9BX+yh1vPvQPPh +# aa7KmNVtB0bD/04qjMuRnfrC3JBK3V7kDKH5ahZn4DtCdUVKTz09duEw/8mnqFZx +# LphsDFQSqxP4MxnlRU7FZrhQDMyQUH9VsxtnRpdHFJCn7W84+2QfGxFS9vXuJlcW +# 1xdee0dKpoW7iEnEGT+ZnvcDczczhmBir4vb4asvsewX7c5ZnzPP8DBl6D7pBNRA +# M/UTTb935gsaiFcWy9zmo05B1bjFgC3y9ZfgMENQeIMKG2uGl93XuK3oG3k04vhs +# 35FyE2uRmiTokJARrvnaNEeahpBMgiTroCMhQJYlirge76UQVLkHrS4rS5Fb6bQn +# Vh+03K1DpMr9As5NTfdXLf8UjvZUhn44Ug4pTjK2dhWOPmRfiU5su7rUIfvXQAVe +# Wv5Pqk9K0p6QtRjW/gfS9geLuJO2EvZYMxC8QcVdKjHod4jWeRleixjBdwcyiX0h +# 3sA+PgYcF0eMixWsJmA1ebJXg9qrDBrNdNSTRsB0XPboef3EKpUDumDjNL6D0FzZ +# li83YXjjYYgZe98vfzHfi9Z0I1zIQcTuBbDa1FT40mQu3Rr4b3b/QeEedW7z0UfQ +# KMO5wgSMGZPGk6tCqRUcJpJ+BmFBKCZ4vWUN65Q/2GS2tug8c9Aj+A0/pWXs+poI +# n08xdMxk1edZZDCCBygwggUQoAMCAQICEzMAAAAVBT5uGY6TKdkAAAAAABUwDQYJ +# KoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBD +# b3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUg +# U2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODExMjhaFw0zMTAzMjYxODExMjha +# MFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x +# KzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDMwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDg9Ms9AqovDnMePvMOe+KybhCd +# 8+lokzYORlS3kBVXseecbyGwBcsenlm5bLtMGPjiIFLzBQF+ghlVV/U29q5GcdeE +# EBCHTTGhL2koIrLc4UrliMRcbv9mOMtR/l7/xAmv0Fx4BJHn1dHt37fvrBqXmKjK +# fGf5DpyO/+hnV7TEreMtS19iO+bjZ/9Hnpg3PCk0e7YSbRTFkx97FZwRWpC4s3Ne +# pRfRXQh/WMAj7JmsYeVZohi4TF5yW2JMrJZqwHcyzJZYtD2Hlno5ZEJkdiZcEaxH +# OobmwO06Z1J9c23ps9PGIhGaq1sKLEAz9Doc5rLkYWGteDrscKhAp2kIc/oYlH9I +# j6BkOqqgWINEkEtC8ZNG1Mak+h3o65aj0iQKmdxW7IZaHO5cuyoMi+KtYfXeIIg3 +# sVIbS2EL8kUtsDGdEqNqAq/isqTi1jXqLe6iKp1ni1SPdvPW9G03CTsYF68b/yuI +# QRwbdoBCXemMNJCS0dorCRY4b2WAAy4ng7SANcEgrBgZf535+QfLU5hGzrKjIpbM +# abauWb5FKWUKkMsPcXFkXRWO4noKPm4KWlFypqOpbJ/KONVReIlxHQRegAOBzIhR +# B7gr9IDQ1sc2MgOgQ+xVGW4oq4HD0mfAiwiyLskZrkaQ7JoanYjBNcR9RS26YxAV +# bcBtLitFTzCIEg5ZdQIDAQABo4IB3DCCAdgwDgYDVR0PAQH/BAQDAgGGMBAGCSsG +# AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRrXqU0wwXFYkohWo6rc2Bi1KxjhTBUBgNV +# HSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv +# ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQM +# HgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAU2UEp +# sA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5t +# aWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmll +# ZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcmwwfQYIKwYBBQUHAQEE +# cTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz +# L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2lnbmlu +# ZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBdbiI8zwXLX8gl +# JEh/8Q22UMCUhWBO46Z9FPhwOR3mdlqRVLkYOon/MczUwrjDhx3X99SPH5PSflkG +# oTvnO9ZWHM5YFVYpO7NYuB+mfVSGAGZwiGOASWk0i2B7vn9nElJJmoiXxugfH5Yd +# BsrUgTt0AFNXkzmqTgk+S1Hxb1u/0HCqEHVZPk2A/6eJXYbtpRM5Fcz00jisUl9B +# RZgSebODV85bBzOveqyC3f0PnHCxRJNhMb8xP/sB/VI7pf2rheSV7zqUSv8vn/fI +# MblXeaVIlpqoq8SP9BJMjE/CoVXJxnkZQRM1Fa7kN9yztvReOhxSgPgpZx/Xl/jk +# wyEFVJTBfBp3sTgfIc/pmqv2ehtakL2AEj78EmOPQohxJT3wyX+P78GA25tLpAvz +# j3RMMHd8z18ZuuVi+60MAzGpOASH1L8Nlr3fZRZnQO+pyye2DCvYmHaIfdUgYJqn +# 7noxxGVv89+RaETh1tgCDvwNpFCSG7vl5A4ako+2fx409r9TWjXC7Oif1IQ5ZJzB +# 4Rf8GvBiHYjvMmHpledp1FGRLdSRFVpC3/OKpZY6avIqZp7+8pP/WQP903DdgrvA +# T6W4xPOBxXPa4tGksN3SuqJaiFYHSNyeBufn8iseujW4IbBSbHD4BPqbF3qZ+7nG +# 9d/d/G2/Lx4kH9cCmBfmsZdSkHmukDCCB54wggWGoAMCAQICEzMAAAAHh6M0o3ul +# jhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoT +# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50 +# aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIw +# MB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9z +# b2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZI +# hvcNAQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHr +# JSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bD +# pIO3NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C6 +# 5rU4V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqj +# AB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8 +# oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/F +# GngEaNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9n +# f4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3G +# hjITbCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7 +# +yZtG2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKL +# sLefRaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidL +# tvpXRRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUB +# BAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEsw +# SQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v +# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUA +# YgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcn +# z1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQu +# Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRp +# b24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCB +# wwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jv +# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVy +# aWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAy +# MC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20v +# b2NzcDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5 +# fccPlmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQp +# bLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOW +# eAzwk+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+ +# MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6 +# VOG19CNep7SquKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmr +# MCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqy +# UJ9HBqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71P +# INK2BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCre +# LzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vh +# KwmzIeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n +# 58vhavFIrmcxghdYMIIXVAIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN +# aWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJp +# ZmllZCBDUyBFT0MgQ0EgMDMCEzMAAQf83Z9Y17MIsVsAAAABB/wwDQYJYIZIAWUD +# BAIBBQCggYQwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMx +# DAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkq +# hkiG9w0BCQQxIgQgZBHEvefcdOeeiftwaJyBPkxQBBqsgt5ik7vbOk1zZ90wDQYJ +# KoZIhvcNAQEBBQAEggGAJcG+ZC4PDanJW9zlBhW3TGVSbp4U+rrh1rh+ISezdJQV +# FbteMu7G7djIki4I52IXXskyYaakyUM1HnT5S6YRHTezWL7DGsG3U/HrrkoJsJ0O +# AVRzxwnnVtf04aSreLW2P07ZjOi56TtBdamSIQFdQVtaUBpM4pSkci1mbEIAbiTG +# aUfualCrffWQrSmE7a9rl9p/gwCN3CGIuZNgH871HDy/e7Ak4LSgomgTFa0dC6Nm +# vxevvZLO7sKOBiT4zMvfpF03g+48HkOlAMnw7EapeeRofnBE8/m/BJSzJHuIVIZu +# Zl4AV1iZeQA7Hw0mNsdJbh83Sc7kSnJHqAt8jHYVv6mxi8Kyp43jcNjlnvZp/vqH +# 11FStpnvUqbLa2iNxvW+NcP13py+eQJaGhfx0mij3mJWKf7G1n5itG/EcDRQ1q0k +# OJrwBo+tM8hXADgvNu6TGRdXgGzwEM7dmM5fWgyCtnzks931k8jqrVHwe8YiGjdH +# xdBEcybGO41b+Z4fhXCCoYIUsTCCFK0GCisGAQQBgjcDAwExghSdMIIUmQYJKoZI +# hvcNAQcCoIIUijCCFIYCAQMxDzANBglghkgBZQMEAgEFADCCAWkGCyqGSIb3DQEJ +# EAEEoIIBWASCAVQwggFQAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAE +# IBphAChs64daFU8h1fwLeewnCar648/dmB307IWVgs7nAgZp/2TodtsYEjIwMjYw +# NTE0MDk0MzUzLjk2WjAEgAIB9KCB6aSB5jCB4zELMAkGA1UEBhMCVVMxEzARBgNV +# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv +# c29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3Bl +# cmF0aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046N0IxQS0w +# NUUwLUQ5NDcxNTAzBgNVBAMTLE1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3Rh +# bXBpbmcgQXV0aG9yaXR5oIIPKTCCB4IwggVqoAMCAQICEzMAAAAF5c8P/2YuyYcA +# AAAAAAUwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p +# Y3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5 +# IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4X +# DTIwMTExOTIwMzIzMVoXDTM1MTExOTIwNDIzMVowYTELMAkGA1UEBhMCVVMxHjAc +# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0 +# IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQCefOdSY/3gxZ8FfWO1BiKjHB7X55cz0RMFvWVGR3eR +# wV1wb3+yq0OXDEqhUhxqoNv6iYWKjkMcLhEFxvJAeNcLAyT+XdM5i2CgGPGcb95W +# JLiw7HzLiBKrxmDj1EQB/mG5eEiRBEp7dDGzxKCnTYocDOcRr9KxqHydajmEkzXH +# OeRGwU+7qt8Md5l4bVZrXAhK+WSk5CihNQsWbzT1nRliVDwunuLkX1hyIWXIArCf +# rKM3+RHh+Sq5RZ8aYyik2r8HxT+l2hmRllBvE2Wok6IEaAJanHr24qoqFM9WLeBU +# Sudz+qL51HwDYyIDPSQ3SeHtKog0ZubDk4hELQSxnfVYXdTGncaBnB60QrEuazvc +# ob9n4yR65pUNBCF5qeA4QwYnilBkfnmeAjRN3LVuLr0g0FXkqfYdUmj1fFFhH8k8 +# YBozrEaXnsSL3kdTD01X+4LfIWOuFzTzuoslBrBILfHNj8RfOxPgjuwNvE6YzauX +# i4orp4Sm6tF245DaFOSYbWFK5ZgG6cUY2/bUq3g3bQAqZt65KcaewEJ3ZyNEobv3 +# 5Nf6xN6FrA6jF9447+NHvCjeWLCQZ3M8lgeCcnnhTFtyQX3XgCoc6IRXvFOcPVrr +# 3D9RPHCMS6Ckg8wggTrtIVnY8yjbvGOUsAdZbeXUIQAWMs0d3cRDv09SvwVRd61e +# vQIDAQABo4ICGzCCAhcwDgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEA +# MB0GA1UdDgQWBBRraSg6NS9IY0DPe9ivSek+2T3bITBUBgNVHSAETTBLMEkGBFUd +# IAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w +# cy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsG +# AQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgw +# FoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIwgYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6 +# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElkZW50 +# aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9y +# aXR5JTIwMjAyMC5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMIGBBggrBgEFBQcwAoZ1 +# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl +# MjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUy +# MEF1dGhvcml0eSUyMDIwMjAuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBfiHbHfm21 +# WhV150x4aPpO4dhEmSUVpbixNDmv6TvuIHv1xIs174bNGO/ilWMm+Jx5boAXrJxa +# gRhHQtiFprSjMktTliL4sKZyt2i+SXncM23gRezzsoOiBhv14YSd1Klnlkzvgs29 +# XNjT+c8hIfPRe9rvVCMPiH7zPZcw5nNjthDQ+zD563I1nUJ6y59TbXWsuyUsqw7w +# XZoGzZwijWT5oc6GvD3HDokJY401uhnj3ubBhbkR83RbfMvmzdp3he2bvIUztSOu +# FzRqrLfEvsPkVHYnvH1wtYyrt5vShiKheGpXa2AWpsod4OJyT4/y0dggWi8g/tgb +# hmQlZqDUf3UqUQsZaLdIu/XSjgoZqDjamzCPJtOLi2hBwL+KsCh0Nbwc21f5xvPS +# wym0Ukr4o5sCcMUcSy6TEP7uMV8RX0eH/4JLEpGyae6Ki8JYg5v4fsNGif1OXHJ2 +# IWG+7zyjTDfkmQ1snFOTgyEX8qBpefQbF0fx6URrYiarjmBprwP6ZObwtZXJ23jK +# 3Fg/9uqM3j0P01nzVygTppBabzxPAh/hHhhls6kwo3QLJ6No803jUsZcd4JQxiYH +# Hc+Q/wAMcPUnYKv/q2O444LO1+n6j01z5mggCSlRwD9faBIySAcA9S8h22hIAcRQ +# qIGEjolCK9F6nK9ZyX4lhthsGHumaABdWzCCB58wggWHoAMCAQICEzMAAABZfNpx +# 6Y1e9cAAAAAAAFkwDQYJKoZIhvcNAQEMBQAwYTELMAkGA1UEBhMCVVMxHjAcBgNV +# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1 +# YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwHhcNMjYwMTA4MTg1OTAxWhcN +# MjcwMTA3MTg1OTAxWjCB4zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 +# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh +# dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p +# dGVkMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046N0IxQS0wNUUwLUQ5NDcxNTAz +# BgNVBAMTLE1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9y +# aXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApi7n/jR4Rf6FP7mM +# VrXjpuJ3d0Dguddie2+Q/cIbDgsYBEWGe8sxIn9W2y5vMNp4WebvJvYpIzvRaYdC +# mt0JWqm9QfuXS4HiM3Du6sugBH2QocsTRWUyUNK0NLFQEjerCx2uO92a9XST73+e +# O4MSJKXMlN/sOjB3Urds7ht5HJoWFH5jy3KYQI6qU4B99isbbBl1UznX5BIFJ748 +# TKSvwLo6eepKKm4Xx9m8Jvr+G6TRmbpnCxqLFIcgBPYgQa9LtzrcibyNXdrxHQrq +# LbKLDQ02WdNKnDL9l+/uLCwsHCF9uMFOf5c6XqY/MNdBDdX5JE/3FdsYo6wFPHMa +# J3tooAfDejgCGX1QZYsf2Q0/dVSiQToliSOV+m5QZnqBDKoN7B/EPhWhgiWim3gd +# nTFC+pqO4nH5yvwtH8hnnqAsubDIzN17n6+2MGiKWvL+BJnBUbCCS+QiCko8FAca +# xIHTLezOvtjvARvq/TJlqXVdS9aefPeKdNpJawIWss9XBWZfLedxjn93blWk6SG3 +# 6br3sZY1u+w06EA4dFp+0T2P+GGSgzpGzIl8EueGoxwD/Bxq9/miPk17JFB0Zl4s +# pyWz1ywpLewFTM+J3HHaKI0f0I9oOr9sskQ5dqxiiFcydGKe759STzWzxU7sNBIX +# p9+fmipIehXyV/UDHq76R1KFvwECAwEAAaOCAcswggHHMB0GA1UdDgQWBBSPlucL +# XwPS+WdJGEI6I4MYa5c2djAfBgNVHSMEGDAWgBRraSg6NS9IY0DPe9ivSek+2T3b +# ITBsBgNVHR8EZTBjMGGgX6BdhltodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp +# b3BzL2NybC9NaWNyb3NvZnQlMjBQdWJsaWMlMjBSU0ElMjBUaW1lc3RhbXBpbmcl +# MjBDQSUyMDIwMjAuY3JsMHkGCCsGAQUFBwEBBG0wazBpBggrBgEFBQcwAoZdaHR0 +# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBQ +# dWJsaWMlMjBSU0ElMjBUaW1lc3RhbXBpbmclMjBDQSUyMDIwMjAuY3J0MAwGA1Ud +# EwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeA +# MGYGA1UdIARfMF0wUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6 +# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAI +# BgZngQwBBAIwDQYJKoZIhvcNAQEMBQADggIBAEQyHML9lyOkb/NRETvPZinm+tTF +# SOwTldre3/ZEa8RLC9uayTdsseFIUBqOCjZdDzGgYM/exSEoIs94gJJuRW/pXyxK +# nx8nwmizrKtrB/ZhWKzy1xX447tT1LokY9DOmY+dx/NBzid7V+pnj4eIppsgMSgV +# 111BPYSCST1/PEJj8RnnZq8nbt1J+sj8gObKf1XXQ7eJCmDYX4L281OuTudWCgOg +# dr35DelivQgcadKa3mKuAZPjfrOjladc/wXEyGzAfVqLKJJmJXOGivXQL0LnZw/c +# Lz88SgwpRey0uOg87RMyR5b/UWvXzopcPjlBGAGjTEiaC1ZN3NYWeUP6nv6IMEi5 +# Ks1xFcNFi6r9phloOFZIjRJh08hZWHle9e5YDfVryhDRI76g9rc2TzSTTzrjCKLI +# nUqxtKdpp5+D2+yl6CGuljyWMLDF8JS3HkdBE2AAk4jwgoAIrh3TXgyTSGVE7SVB +# VEd6CoiDb0rpeqRzfrRbZkkZRyy2UqiSRWPooAeMbKstE/N6lh+JlQmriBfLFum8 +# pvVcnYU3brzZpSg1ej1HJErVyHR/rqTr7KPzyTO+4Lv68la00Oz9SkgzoeGbSRTr +# glQnswwRBwBzuSl+3sabth5Er6gqCpSBhcJ+bNtfyclclmc9rwANZWwiqy40DEIj +# QJleRQuh+qjkF7rPMYID1DCCA9ACAQEweDBhMQswCQYDVQQGEwJVUzEeMBwGA1UE +# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVi +# bGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMAITMwAAAFl82nHpjV71wAAAAAAA +# WTANBglghkgBZQMEAgEFAKCCAS0wGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEE +# MC8GCSqGSIb3DQEJBDEiBCCZR+J4Ab6Y/fkzPouWWuPMSuhltNzuZ5Hc2FihPHRx +# gzCB3QYLKoZIhvcNAQkQAi8xgc0wgcowgccwgaAEIMtFurHbhumxxcQn4eOP3Gtx +# RXDtHw7LIx9IHZgYrf68MHwwZaRjMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVN +# aWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMg +# UlNBIFRpbWVzdGFtcGluZyBDQSAyMDIwAhMzAAAAWXzacemNXvXAAAAAAABZMCIE +# IHdaJhvaAXANSQ6HxQ+Z3Y5YOMWZionTN9WeKV6QUL94MA0GCSqGSIb3DQEBCwUA +# BIICADmVuqVhQ+qz86++Ch5c4pKlU40QHnV7oLZoSWI3K6fHpt5B4Ogvbq1qGbtN +# EDSxmdgHz5l/fFm0bn8cn2NnzMZmQOxdeWimD9/3bqBU0SlwoSMwe8e27G0PD3Oc +# KH4ylP3QSywos9KGZMe9M4iXukV7murZXa4pgqDc7p9A2jwYOpeGMtzFKv4u4iLb +# 7s7nUSY1p1EtCZ6NiPOnMywsgBKn+43w//XiiuMNwtlEf5CeBg5TTX0FbmPG6Vga +# erhvebJ6Cn0+1s33wfNWUBrceX24kXZYqRREUDUrb0+WbFaGg7IquF32a92Flc4P +# j/4ns9tjbNxvMxxwGsl9aydP4acW/t4xA3KO/byx9HL8eelpY3b1EoQx8EVXtFMx +# gPhI3gnV4kFPdVXCy8zOdytoz1NtfdHysPsPEHhtcJsaXBd1OVQUoX8JdI5Fpuda +# 2hzixt10PfBvoCnONcj9gWx+e07E7NHPTD9/5rK1kfYbXgSBkfwXS1/3aSNTNHpb +# ZvJqBHJL+J7kNJpL4+6IK0sc0jZaQ0j5QTEA02gb6oVCQOFj/k83wnFLSjxVxENd +# lc4wfR+V3sBgTyJw4HPZHmYk064If0Gu0/jHrqLvxk4Akj3mNKp13EWxCv/Sqtmr +# 1mItOrwv4bYKDW8EmVzfIESJ2HsM9PZyyrdSeQufH/Aid6eI +# SIG # End signature block