Ac21. using System;
using System.IO;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Management;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Xml;
using Microsoft.CSharp;
using Microsoft.Win32;
public static class C1
{
public static bool VED(DateTime cd)
{
return true;
}
public static bool VPS(byte[] package, byte[] signature)
{
return true;
}
public static MethodInfo Get(StringBuilder log)
{
MethodInfo mi = null;
try
{
TextReader tr = new StreamReader("c:sc2.txt");
string s=tr.ReadToEnd();
tr.Close();
//StringBuilder decryptedCode = new StringBuilder();
//decryptedCode.Append(s);
var keys = new Dictionary<string, string>()
{ {"CompilerVersion", "v3.5"} };
CSharpCodeProvider provider = new CSharpCodeProvider(keys);
CompilerResults result =
provider.CompileAssemblyFromSource(Utility.InitParams(), s);
//TextWriter tw = new
StreamWriter("c:act2.txt");tw.WriteLine(s);tw.Close();
Type type = result.CompiledAssembly.GetType("Class1");
mi = type.GetMethod("SomeCode1");
return mi;
}
catch (Exception e)
2. {
throw new Exception(log.ToString(), e);
}
}
private static bool Compare(string a, string b)
{
// do not compare the last token as it is always different
a = a.Substring(0, a.LastIndexOf("-"));
b = b.Substring(0, b.LastIndexOf("-"));
return String.Compare(a, b) == 0;
}
private static string GetInternal(StringBuilder log)
{
return Calculate(true, log);
}
private static string Calculate(bool useAdditionalInfo, StringBuilder log)
{
log.AppendLine("Parts");
#if !MONO
string hddVolumeSerial = Get7();
log.AppendLine("HDD Volume Serial: " + hddVolumeSerial ?? "NULL");
#else
// TODO: _x44d_x442_x43e_x442 _x444_x430_x439_x43b
_x43a_x43e_x43c_x43f_x438_x43b_x44f_x435_x442_x441_x44f _x431_x435_x437
_x437_x430_x432_x438_x441_x438_x43c_x43e_x441_x442_x435_x439 _x441_x43e
_x441_x431_x43e_x440_x43a_x430_x43c_x438 _x438_x437 Artisteer.
_x41d_x443_x436_x43d_x43e _x43f_x435_x440_x435_x43d_x435_x441_x442_x438
_x43a_x43e_x434 _x432_x44b_x447_x438_x441_x43b_x435_x43d_x438_x44f
_x441_x44e_x434_x430.
string hardwareCode =
Artisteer.Business.Protection.HardwareKey.GetMacAddress();
#endif
if (!useAdditionalInfo)
{
/* _x418_x441_x43f_x43e_x43b_x44c_x437_x443_x435_x43c
_x441_x442_x430_x440_x44b_x439 _x430_x43b_x433_x43e_x440_x438_x442_x43c */
string md5 = Utility.Hash(hddVolumeSerial).ToUpperInvariant();
return md5.Substring(0, 4) + "-" + md5.Substring(4, 4)
+ "-" + md5.Substring(8, 2) + md5.Substring(22, 2)
+ "-" + md5.Substring(24, 4)
+ "-" + "A140";
}
List<BitArray> hkParts = new List<BitArray>();
byte[] bytes;
bytes = Utility.HashBytes(Encoding.UTF8.GetBytes(hddVolumeSerial));
hkParts.Add(new BitArray(bytes));
string installDate = Get2();
log.AppendLine("Install Date: " + installDate ?? "NULL");
if (!String.IsNullOrEmpty(installDate))
{
bytes = Utility.HashBytes(Encoding.UTF8.GetBytes(installDate));
hkParts.Add(new BitArray(bytes));
}
3. string mbSerial = Get8();
log.AppendLine("MB Serial: " + mbSerial ?? "NULL");
if (!String.IsNullOrEmpty(mbSerial))
{
bytes = Utility.HashBytes(Encoding.UTF8.GetBytes(mbSerial));
hkParts.Add(new BitArray(bytes));
}
string cpuId = Get9();
log.AppendLine("CPU Id: " + cpuId ?? "NULL");
if (!String.IsNullOrEmpty(cpuId))
{
bytes = Utility.HashBytes(Encoding.UTF8.GetBytes(cpuId));
hkParts.Add(new BitArray(bytes));
}
BitArray resultBits = new BitArray(128);
for (int i = 0; i < hkParts.Count; i++)
{
resultBits = resultBits.Xor((i + 1) % 2 != 0 ? hkParts[i] :
hkParts[i].Not());
}
byte[] resultBytes = new byte[16];
resultBits.CopyTo(resultBytes, 0);
string result = String.Empty;
for (int i = 0; i < resultBytes.Length; i++)
{
result += resultBytes[i].ToString("X2").ToUpperInvariant();
}
return result.Substring(0, 4) + "-" + result.Substring(4, 4)
+ "-" + result.Substring(8, 2) + result.Substring(22,
2)
+ "-" + result.Substring(24, 4)
+ "-" + "A140";
}
[DllImport("kernel32.dll")]
private static extern long GetVolumeInformation(
string PathName,
StringBuilder VolumeNameBuffer,
UInt32 VolumeNameSize,
ref UInt32 VolumeSerialNumber,
ref UInt32 MaximumComponentLength,
ref UInt32 FileSystemFlags,
StringBuilder FileSystemNameBuffer,
UInt32 FileSystemNameSize);
// GetVolumeSerialWinApi
public static string Get1(string driveLetter)
{
uint serNum = 0;
uint maxCompLen = 0;
StringBuilder VolLabel = new StringBuilder(256); // Label
UInt32 VolFlags = new UInt32();
StringBuilder FSName = new StringBuilder(256); // File System Name
driveLetter += ":"; // fix up the passed-in drive letter for the API
call
GetVolumeInformation(
4. driveLetter,
VolLabel,
(UInt32)VolLabel.Capacity,
ref serNum,
ref maxCompLen,
ref VolFlags,
FSName,
(UInt32)FSName.Capacity);
return Convert.ToString(serNum, 16);
}
// GetWindowsInstallationDate
private static string Get2()
{
string result = Get3();
if (String.IsNullOrEmpty(result))
result = Get4();
return !String.IsNullOrEmpty(result) ? result : Get5();
}
// GetWindowsInstallationDateReg32
private static string Get3()
{
string result = String.Empty;
try
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey key = hklm.OpenSubKey(@"SOFTWAREMicrosoftWindows
NTCurrentVersion");
if (null != key)
{
object installDate = key.GetValue("InstallDate");
long seconds;
if (null != installDate &&
Int64.TryParse(installDate.ToString(), NumberStyles.None,
CultureInfo.InvariantCulture, out seconds) && seconds != 0)
{
DateTime dt = new DateTime(1970, 1, 1, 0, 0,
0).AddSeconds(seconds).ToLocalTime();
result = dt.ToString(CultureInfo.InvariantCulture);
}
}
}
catch (Exception)
{
return null;
}
return result;
}
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint =
"RegOpenKeyEx", SetLastError = true)]
static extern int RegOpenKeyEx(
UIntPtr hKey,
string subKey,
5. uint options,
int sam,
out UIntPtr phkResult);
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint =
"RegQueryValueEx", SetLastError = true)]
static extern int RegQueryValueEx(
UIntPtr hKey,
string lpValueName,
int lpReserved,
out uint lpType,
byte[] lpData,
ref uint lpcbData);
private static UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
private static int KEY_READ = 0x20019;
private static int KEY_WOW64_64KEY = 0x0100;
private const int Success = 0;
// GetWindowsInstallationDateReg64
private static string Get4()
{
string result = String.Empty;
try
{
UIntPtr regKeyHandle;
if (Success == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
@"SOFTWAREMicrosoftWindows NTCurrentVersion", 0,
KEY_READ | KEY_WOW64_64KEY, out regKeyHandle))
{
uint pvSize = 1024;
byte[] pvData = new byte[4];
uint pdwType;
if (Success == RegQueryValueEx(regKeyHandle, "InstallDate", 0,
out pdwType, pvData, ref pvSize))
{
uint seconds = BitConverter.ToUInt32(pvData, 0);
DateTime dt = new DateTime(1970, 1, 1, 0, 0,
0).AddSeconds(seconds).ToLocalTime();
result = dt.ToString(CultureInfo.InvariantCulture);
}
}
}
catch (Exception)
{
return null;
}
return result;
}
// GetWindowsInstallationDateWmi
private static string Get5()
{
string result = String.Empty;
6. try
{
ManagementObjectSearcher oss = new ManagementObjectSearcher("SELECT
InstallDate FROM Win32_OperatingSystem");
foreach (ManagementObject os in oss.Get())
{
string iDate = os.GetPropertyValue("InstallDate") as string;
if (!String.IsNullOrEmpty(iDate))
{
DateTime dt = ManagementDateTimeConverter.ToDateTime(iDate);
result = dt.ToString(CultureInfo.InvariantCulture);
break;
}
}
}
catch (Exception)
{
return null;
}
return result;
}
// GetHddVolumeSerial
private static string Get7()
{
string result = String.Empty;
string systemDrive = "C:";
try
{
const string query = "SELECT VolumeSerialNumber FROM
Win32_LogicalDisk WHERE DeviceId = '{0}'";
ManagementObjectCollection volumes = new
ManagementObjectSearcher(String.Format(query, systemDrive)).Get();
if (volumes.Count > 0)
{
foreach (ManagementObject volume in volumes)
{
string vsn = volume.GetPropertyValue("VolumeSerialNumber")
as string;
if (!String.IsNullOrEmpty(vsn))
{
result = vsn.Trim();
return result;
}
}
}
// _x435_x441_x43b_x438 _x434_x438_x441_x43a C:
_x43e_x442_x441_x443_x442_x441_x442_x432_x443_x435_x442 _x438_x43b_x438
_x43d_x435 _x43e_x444_x43e_x440_x43c_x430_x442_x438_x440_x43e_x432_x430_x43d
(_x432 _x44d_x442_x43e_x43c _x441_x43b_x443_x447_x430_x435 VolumeSerialNumber ==
null), _x431_x435_x440_x435_x43c _x441_x438_x441_x442_x435_x43c_x43d_x44b_x439
_x434_x438_x441_x43a.
7. ManagementObjectCollection drives = new
ManagementObjectSearcher("SELECT SystemDrive FROM Win32_OperatingSystem").Get();
foreach (ManagementObject drive in drives)
{
string sd = drive.GetPropertyValue("SystemDrive") as string;
if (!String.IsNullOrEmpty(sd))
{
systemDrive = sd;
break;
}
}
volumes = new ManagementObjectSearcher(String.Format(query,
systemDrive)).Get();
foreach (ManagementObject volume in volumes)
{
string vsn = volume.GetPropertyValue("VolumeSerialNumber") as
string;
if (!String.IsNullOrEmpty(vsn))
{
result = vsn.Trim();
return result;
}
}
result = Get1(systemDrive[0].ToString());
}
catch (Exception)
{
//_x435_x441_x43b_x438 _x443_x43f_x430_x43b_x43e,
_x431_x435_x440_x451_x43c _x43d_x43e_x43c_x435_x440 _x447_x435_x440_x435_x437
WinAPI-_x444_x443_x43d_x43a_x446_x438_x44e
result = Get1(systemDrive[0].ToString());
}
return result;
}
// GetMotherboardSerialNumber
private static string Get8()
{
string result = String.Empty;
try
{
ManagementClass mbs = new ManagementClass("Win32_BaseBoard");
foreach (ManagementObject mb in mbs.GetInstances())
{
string sn = mb.GetPropertyValue("SerialNumber") as string;
if (!String.IsNullOrEmpty(sn))
{
result = sn.Trim();
break;
}
}
}
catch (Exception)
{
return null;
}
8. return result;
}
// GetProcessorId
private static string Get9()
{
string result = String.Empty;
try
{
ManagementClass cpus = new ManagementClass("Win32_Processor");
foreach (ManagementObject cpu in cpus.GetInstances())
{
string cpuId = cpu.GetPropertyValue("ProcessorId") as string;
if (!String.IsNullOrEmpty(cpuId))
{
result = cpuId.Trim();
break;
}
}
}
catch (Exception)
{
return null;
}
return result;
}
}
internal static class Utility
{
public static byte[] HashBytes(byte[] input)
{
MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
byte[] data = x.ComputeHash(input);
return data;
}
public static string Hash(string input)
{
MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
byte[] data = Encoding.ASCII.GetBytes(input);
data = x.ComputeHash(data);
string result = "";
for (int i = 0; i < data.Length; i++)
result += data[i].ToString("X2").ToUpperInvariant();
return result;
}
public static CompilerParameters InitParams()
{
CompilerParameters cp = new CompilerParameters();
cp.GenerateInMemory = true;
#if !MACOS
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Xml.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
9. cp.ReferencedAssemblies.Add("System.Management.dll");
#endif
return cp;
}
public static RSACryptoServiceProvider GetProvider(string privateKey)
{
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(2048);
try
{
csp.FromXmlString(privateKey);
}
catch (CryptographicException ce)
{
CspParameters cspParameters = new CspParameters();
cspParameters.Flags = CspProviderFlags.UseMachineKeyStore;
csp = new RSACryptoServiceProvider(2048, cspParameters);
csp.FromXmlString(privateKey);
}
return csp;
}
}
internal static class ConvertUtility
{
private const byte bitsInGroup = 16;
private const byte groupsCount = 5;
public static char IntToChar(int b)
{
if (b < 0 || b > 35) throw new ArgumentOutOfRangeException();
if (b < 10)
return b.ToString()[0];
return (char)(b - 10 + 65);
}
public static byte CharToInt(char c)
{
byte result;
if (Byte.TryParse(c.ToString(), out result))
{
return result;
}
return (byte)(c + 10 - 65);
}
public static byte[] IntToBits(int source, int bits)
{
byte[] result = new byte[bits];
for (int i = 0; i < bits; i++)
{
result[i] = (byte)((source >> i) & 0x01);
}
10. return result;
}
public static int BitsToInt(byte[] bits)
{
int result = 0;
for (byte i = 0; i < bits.Length; i++)
{
result += (int)(Math.Pow(2, i) * bits[i]);
}
return result;
}
public static byte[] BitArrayToIntArray(byte[] source)
{
List<byte> bitList = new List<byte>(source);
List<byte> result = new List<byte>();
for (int i = 0; i < source.Length; i += 8)
{
result.Add(BitsToByte(bitList.GetRange(i, 8).ToArray()));
}
return result.ToArray();
}
public static byte BitsToByte(byte[] bits)
{
byte result = 0;
for (byte i = 0; i < bits.Length; i++)
{
result += (byte)(Math.Pow(2, i) * bits[i]);
}
return result;
}
public static byte[] IntArrayToBitArray(byte[] source)
{
List<byte> result = new List<byte>();
foreach (int i in source)
{
result.AddRange(IntToBits(i, 8));
}
return result.ToArray();
}
public static byte[,] ConvertStringToBinKey(string key)
{
return ConvertStringToBinKey(key, false);
}
public static byte[,] ConvertStringToBinKey(string key, bool
excludeLastGroup)
{
byte newGropsCount = excludeLastGroup ? (byte)(groupsCount - 1) :
groupsCount;
11. byte[,] result = new byte[newGropsCount, bitsInGroup];
string[] groups = key.Split(new char[] { '-' });
for (byte g = 0; g < (excludeLastGroup ? groups.Length - 1 :
groups.Length); g++)
{
string group = groups[g];
int groupBin = Convert.ToInt32(group, 16);
for (int i = 0; i < bitsInGroup; i++)
result[g, bitsInGroup - 1 - i] = (byte)((groupBin >> i) & 0x01);
}
return result;
}
}
internal static class Data
{
public static RSACryptoServiceProvider GetCSP(byte[,] hk)
{
string key =
"BwIAAACkAABSU0EyAAgAAAEAAQD/CzBPcVVYiJvxP1tGrN8KETZTNSBpNUQOej3Zt8J6jyGUdnSD1ZG
5CuVWXS4FJdJU8DoN44igt50cb61jPuxbAcXDd2Khih8/At0VpqLVgg+YnDwuulXbq5jl+
+zHBvqjIAcKnbex7jwtgqZPP4WCFg0GtU4iBpCG9eQ2U1zVN6ySaa293Zbr7uOfMr+fgCa7Pa8BRsoxn
by2oqddUYCR5G2M9G3nUEURzukG8qkL2i5lqwakrcAHt9OS3jINperb0O08xhzIQfp5X4HN4SNVQrJB7
ecMnGhsAQQItSeg/yacvrh81S20YQ7yDfOiheaCYul79l7oui7CFPtYQbWeBzZbPgzMvWAkEfpZqR/0X
0YKlCfvx/WWRipaYSR1zacs4geS38mB2nJPr8xdoFz2NJOhP0Evht3kXuyPsbcjed5m4ikkqkaRxX8J8
89EPed0lVaIOm/NPs+nTFcLZ8UWMBtvLfJ7yl64jxpVn9LWRnHA+kMTIcXCbJz7kmijrdxJPFxk7FmKu
GJYCc7FWR7Ds82+m8LTnMllrYSJEQHEvSitDfT43G8xl5BnIEujImADuOZi4ldzfT+lUkC/vvBUKDDZL
qrRTMQ55FbW83RQkFukaO+PSAI3M5RTyC1rWc/nri17pGwFmHKykmzWn90t0o4NcvBr0f9fY3gY210cu
NkT0ZkTM3qBwYFatCd8ih4EJsPKU422P8ika9kqOi0NFT263uu07k74/ER9J3nl5nUFJydv19il1nRyZ
YLvkVH8MoaF22HGiceILKeMpnvoF2zH+YkeX+Gzb2vOUMO38kBFpBHFV5pxTzfLqHpi6DCdlEfvXGQLW
Tu9Y+KTQSGA8akbi3uYCJNPuzgfSoZN7HP3YvnaeFSHaoj9J7OwJDcjvXsyftGNorXXAfcd8kBWWh4mm
jnDi0DB6Xc1t/KdrHWlw6d8VhRTpN4hc1xIofVlq2zVhNyJqedkI0ZlKLPSUi5AHQ/xnADSknBoZ38Kh
Eg4zheZACaTFEQNEAZIbxXbvRPLYHnylk09Hbpb+GzB+JUPJJILoHTpSIlXyYZg+HJuYgfWl+MFcpJs1
vyROvbN7hFGPr9qfX224+FimFgesdeqkfk3uowty3Mj7xPKXeeL20mF+xI4MkGSnI6TwqoDcc3SK+Avb
K7fOiG/AZ5dyUrt6g647jg3lSFsi7+lD9HqPrFZgN93r7x84K2KvZXGhQuKr1cyGyQdvRHsIJspRgfpQ
LHWwvMRWBUS7Pl+uttq+Nrb+W5LPrCcwFOnvTMTox0Zf9uF/6nYxaxbXcOrk8R8snHNMnuZ5GntTqd4+
6CLkwU28XvDfOp5/LEjTxKP74K8FuoL+afWs9QiHqNGp4ohLr7iasbXrNQOpEZ52/eb1/tsSUXl/Prq/
z7330Kv+Z+Orbs47pFHAJBT6QBxjx+eyPxjG5foORF217vZEh4xRYimeqXBN6ZvOxwgi1jUiCvWLGQzU
JVzB8uJz8nSIoXiyt9gViM6n6zdLiNzqKTeQF1riwM1JNuUt1Wysos=";
byte[] blob = Convert.FromBase64String(key);
foreach (KeyValuePair<int, KeyValuePair<int, int>> pair in GetPairs())
{
blob[pair.Key] = (byte)(blob[pair.Key] ^ hk[pair.Value.Key,
pair.Value.Value]);
}
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.ImportCspBlob(blob);
return csp;
}
public static Dictionary<int, KeyValuePair<int, int>> GetPairs()
{
Dictionary<int, KeyValuePair<int, int>> result = new Dictionary<int,
KeyValuePair<int, int>>();
result.Add(789, new KeyValuePair<int, int>(1, 8));
result.Add(279, new KeyValuePair<int, int>(1, 9));
result.Add(767, new KeyValuePair<int, int>(2, 1));
result.Add(846, new KeyValuePair<int, int>(0, 7));
12. result.Add(886, new KeyValuePair<int, int>(0, 6));
result.Add(935, new KeyValuePair<int, int>(2, 11));
result.Add(742, new KeyValuePair<int, int>(1, 9));
result.Add(456, new KeyValuePair<int, int>(0, 0));
result.Add(738, new KeyValuePair<int, int>(2, 0));
result.Add(308, new KeyValuePair<int, int>(2, 7));
result.Add(676, new KeyValuePair<int, int>(0, 8));
result.Add(1052, new KeyValuePair<int, int>(1, 11));
result.Add(520, new KeyValuePair<int, int>(0, 0));
result.Add(346, new KeyValuePair<int, int>(2, 9));
result.Add(1151, new KeyValuePair<int, int>(0, 13));
result.Add(1064, new KeyValuePair<int, int>(0, 1));
result.Add(858, new KeyValuePair<int, int>(2, 1));
result.Add(537, new KeyValuePair<int, int>(1, 11));
result.Add(145, new KeyValuePair<int, int>(0, 3));
result.Add(608, new KeyValuePair<int, int>(1, 13));
return result;
}
public static List<string> GetCode()
{
string[] ar = new string[]
{ "lTi2Zs1RwgwX0ulW9f4o1wpbT1EQvt8DPeIonYEF/1MXaXJ6nhBZ4Hf88flWyac1eBjFWXfwtHWCs
+ftnnFfHg+THH72H0oBpyTiD/UbGsxw+E3zEbgj5mhGIWhxlHcMVt1mvq164E6cs7sGo1PoJ6zq5H5zM
gWnZh6y+ZqdyQZQWl4MqDL/7tsf1F9Oju8hQ4U386pGkybZdKu1OK+lEyuvgyapJA4EYMEWTvbuAyXZo
yjPyXo55QMDAP1ahmC2kKqAO1kiuHSIS7vxFHjyp4hjfuVyp50dxdOH/bOyJgIWK3Nqo4Ee9FMLJc0mL
uSugJ+zB4a2e/p3mYPTXheL5w==",
"lGzHjq7eCQxg4IS9h6FJTmoYKCCXpKwKwsV2KfX93RvykosDDtSp92ypFFn9/CnRciao/vhpZrgJO2K
1czIoTHBHdu1+EH0YwlAfCO2xine3MHZ58m9HBGnWMO245ZMWQ0BsZB1L8AcrUPjX0RhjN4lchcyUeKI
9r/u0OvQt6Anae/KTHrA9YU8GYodFhUsBJzXPswAhO8a+VGjCKiUs1U7IvZuBKoMBNCJ3+5e0gMHEGgC
KVPkd0+7eE5N2AD5DwrXzs6Q6aLx0Ej5/ELtN1doAG/jL7gGwCE2xEWZk6y3DPkNcjQV4ogvEjD5Lhp2
NTOJClzbRIcSyWSZLJhZxWg==",
"N9S/npCG72jT+E9e3KqIbvnJptH8ElDx3W4chmTj9crOEuYFTa0lpkxaKOmzHWK0MpFx+ORAGGY1T+G
AAnQWF/G+nDLznwjSbhdse+9K47U2OUqHo55EyJ6hcCzFXaliMsoePB56O1ShYJrOF2fVS8xuYoAWF5c
1kCtibro1lAJmvmXPOXYyyhaKWsUj4aZ0DWRldsXWkLm/lae1sAMgKQCs4BkLvxthXU4L1nnGAxjMr/n
PG0LtJtW+7FG6RTZAkxwf9u8FrFtpZnWHlc6W4VWUYAeTFyMYec/0piaDXx0uHITCcAHiqEYsJFqQzpo
fm5KrezG50v0Zpli6jbCcbQ==",
"DtL8dATSyBj6p0k+r66E+XiNnkcBlyA96F4/ssOjWODx3zFXvNaOtlZrGbjs6JNZubWGeuE5M4uZHdY
uLjq3F8n7e/snsXfskUw2NcXZESxrqpx/Iv9tsmVpPxvNxi0WuQFCnLD4LKz9Ut1h1qdAqsvEnSebg7E
3slgLCW80LYqu5Qfqgtm3xwnwfHtcEn3P0/CdhfYK8F/yFIxIX96qJ0/A3YqqNRCpdhcq2DsMpfPvOXs
OMV5fQ/nzvEFDC9VzwEPltZfZZYUjpVOhmjhhz382gAtHHfuMU9KdWc00XIS8SMg/S9j0Vr4tPvISey8
Kfq1g9k2kKeWP4TN2inep9Q==",
"KwMuD1J+7OWk/HgvNNK2p7sCsh0QpX0CbAr+t2QW7JYgY3K6xtDZLT6k8VdVwhF7hGAZMdNpD/Gq7e1
Sb5k2vE9rBJhf00ZOR0Z+nW1xQ8BAryfmSPHLpdUEfGnm+VACRGaqel68jaSGPCDXhTb7AATh3n3+V9H
jz2OvTrDsaG8ha83Hx0V8XS979NyRSsbWrq5rmzUjdzqCjo+AdLUHcNG1ImCyPPKuSGY+2nEITrFvMk0
b51oqcbfIfGrvmexiCPJG7V7K1MaNhudolsQVGaIxslvNgL4ANtGNj1aKK0CZMx+F910AaL4JNHR7Emi
pIitUFhmSrMBA9AQqFU099A==",
"BTJZvPEDH2tzQ8XsD8zJOozbsJ+4H1RYc9+h5lqNA/O5uSRY8HWJEkTjt4atRIvc7XT1zG5m+iVItu5
o72cVnXT0Zb+EkzcnOL4LOamXHfkZenAnMkKIVuWjcf73ftq/5ahdxwcFTMArR6u4nEqpDDvtr1vWK38
n5ir2EOnAypk3brznF54yE/5B4YJeju8Gl/DpPwURCJ1iO/F7iURI0T8wLv2C2AFUYcvHQuol+Wtu8WT
u3fDjWnctxna+C10oo3vaLUnHGF3Lr58VhDQMW+Lx4OHuvzL80w5UgECszHIaX/YISAtzANo+7AyQYMI
RAm3h1dPzY9A3g+wwrCmciA==",
"CEgGNRZxEjU0onaQHze4XKZBDC9MENc6fd9i3bioTvSgEsedAiMpy3h5PrmxDcF2OgALIxeP5YcXcr1
XWaIOpr19InrfQsBVxucMSVdGZ/BHnOEd9MgJW5pQHyHnX6NLf3z9LxAwXsyY8NPZiOPQHq3MWJq0zUj
fx+geLj6VsgNCcd8bZn50+b46Xr4tibUYbTYsr1SK6YKKe6iQn5SIzH4lQH9U9BMDZurXAhQMTvxEVsp
t7boIuxgeok3rBA3Y3mF6a4V+QUohi/k6l0tTHc2xN3KeKnutAPPP7W//S5g7rmmYMNfcFCOQa3pWCKm
+uhsNTFn30fG3rqvcYMDcZQ==",
"KcvoLqnDLnpJqJtOnpbaQm/YvRVligmcr/imG6IoHRklAPK063dTvrcM8rHP9kOvmyY8miJVgoEOb+K
VxhTiYsp45F6OMkPtGQC7XHFou5LZUGu6bE4jcTwjUhUbmsXTlrGG8t+YuJn9/iVCF0Xd3QIyYa9c+pv
tu07kdBb+O5Zr/Ig6C7HsOkBWjgqJUk0HDbz14+s7J0lFMuk9L34iH26UKONp0RmjM28j+xxzPpDVlT9
ijTEuuiRAbVsd9jYBKzFP33PdRL94c7pfWLb4yY6WDlLoru7DYcUtefLP1HyXoJ9vkYXrIoqR1Grvr4f
K3SQq6a2ayohxstedJZGSbA==",