diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 7f91721..9491a2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,363 @@ -# ---> Windows -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore -# Dump file -*.stackdump +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates -# Folder config file -[Dd]esktop.ini +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs -# Recycle Bin used on file shares -$RECYCLE.BIN/ +# Mono auto generated files +mono_crash.* -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ -# Windows shortcuts -*.lnk +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/AllPurposeAutoSetup/All_Purpose_Auto_Setup.csproj b/AllPurposeAutoSetup/All_Purpose_Auto_Setup.csproj new file mode 100644 index 0000000..a47d656 --- /dev/null +++ b/AllPurposeAutoSetup/All_Purpose_Auto_Setup.csproj @@ -0,0 +1,211 @@ + + + + + Debug + AnyCPU + {8EFC377F-70B4-468B-BF30-B637C5857AA7} + WinExe + Properties + All_Purpose_Auto_Setup + All_Purpose_Auto_Setup + v4.7.2 + 512 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + sm3_setup.ico + + + app.manifest + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + + DLL\CommonLib.dll + + + packages\TaskScheduler.2.5.28\lib\net40\JetBrains.Annotations.dll + + + packages\TaskScheduler.2.5.28\lib\net40\Microsoft.Win32.TaskScheduler.dll + TaskSchedulerAlias + + + + + + + + + + + + + + + + + + + + Form + + + frmAbout.cs + + + Form + + + frmMain.cs + + + Form + + + frmSetupStatusDisplay.cs + + + + Form + + + frmUserInput.cs + + + + + + + + + + + + + + + frmAbout.cs + Designer + + + frmMain.cs + Designer + + + frmSetupStatusDisplay.cs + + + frmUserInput.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/All_Purpose_Auto_Setup.sln b/AllPurposeAutoSetup/All_Purpose_Auto_Setup.sln new file mode 100644 index 0000000..c508992 --- /dev/null +++ b/AllPurposeAutoSetup/All_Purpose_Auto_Setup.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34408.163 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "All_Purpose_Auto_Setup", "All_Purpose_Auto_Setup.csproj", "{8EFC377F-70B4-468B-BF30-B637C5857AA7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Debug|x64.ActiveCfg = Debug|x64 + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Debug|x64.Build.0 = Debug|x64 + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Release|Any CPU.Build.0 = Release|Any CPU + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Release|x64.ActiveCfg = Release|x64 + {8EFC377F-70B4-468B-BF30-B637C5857AA7}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D478406A-C7B7-40FA-9C5B-9CD4D5AB67F1} + EndGlobalSection +EndGlobal diff --git a/AllPurposeAutoSetup/App.config b/AllPurposeAutoSetup/App.config new file mode 100644 index 0000000..f7c13d4 --- /dev/null +++ b/AllPurposeAutoSetup/App.config @@ -0,0 +1,24 @@ + + + + +
+ + + + + + + + + + + + False + + + -1 + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Common.cs b/AllPurposeAutoSetup/Common.cs new file mode 100644 index 0000000..9ea1669 --- /dev/null +++ b/AllPurposeAutoSetup/Common.cs @@ -0,0 +1,339 @@ +// this alias is used for Microsoft.Win32.TaskScheduler.dll because +// this dll defines the same type in the same namespace as the one defined in +// mscorlib.dll, mainly namespace of System.Collection.Generic, and types: IReadOnlyList, IReadOnlyCollection. +// By using this alias this the TaskScheduler dll, we avoid the +// warning of conflict of the same type in the same namespace being defined in +// more than one assemblies. +extern alias TaskSchedulerAlias; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; +using System.Windows.Forms; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + class Common + { + delegate string GetWindowPathDelegate(); + + static Dictionary getWindowPathDel = new Dictionary(StringComparer.OrdinalIgnoreCase) + { { PathManip.enumWindowsDesignatedPaths.USER_DESKTOP.ToString(), PathManip.GetUserDesktopPath}, + { PathManip.enumWindowsDesignatedPaths.USER_PROFILE.ToString(), PathManip.GetUserProfilePath}, + { PathManip.enumWindowsDesignatedPaths.ALL_USER_DESKTOP.ToString(), PathManip.GetAllUserDesktopPath}, + { PathManip.enumWindowsDesignatedPaths.USER_STARTUP_FOLDER.ToString(), PathManip.GetUserStartupFolderPath}, + { PathManip.enumWindowsDesignatedPaths.ALL_USER_STARTUP_FOLDER.ToString(), PathManip.GetAllUserStartupFolderPath}, + { PathManip.enumWindowsDesignatedPaths.USER_TEMP_FOLDER.ToString(), PathManip.GetUserTempPath} + }; + + public enum enum_SETUP_STEPS + { + NOT_VALID_STEP, // for initialization purposes + INSTALL_SOFTWARE_PACKAGES, + ENABLE_INTERNET_INFORMATION_SERVICES, + CREATE_DIRECTORIES, + CREATE_NETWORK_SHARES, + SET_ENVIRONMENT_VARIABLES, + SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS, + PROCESS_GUTS_CONFIG_FILE, + CREATE_WINDOWS_SHORTCUTS, + ASSIST_BUILDING_GUTS_APP, + TRANSFER_FILE_PACKAGES, + REMOVE_FILES_FOLDERS, + RUN_APPLICATIONS, + MODIFY_WINDOWS_REGISTRY, + CONFIGURE_NETWORK_ADAPTERS, + PROMPT_USER + } + + public enum EXECUTION_STATUS + { + SUCCESS, + FAILURE, + SYSTEM_SKIP, + USER_SKIP // user decides to skip execution, in which cas, the action is neither successful or failed + } + + public static bool pathContainsMacro(string path) + { + bool pathHasMacro = false; + + foreach (PathManip.enumWindowsDesignatedPaths winPath in Enum.GetValues(typeof(PathManip.enumWindowsDesignatedPaths))) + { + string pattern = @"^\{" + winPath.ToString() + @"\}.*"; + + if (Regex.IsMatch(path, pattern, RegexOptions.IgnoreCase)) + { + pathHasMacro = true; + break; + } + } + + return pathHasMacro; + } + + public static bool pathContainsCdDriveMacro(string path) + { + bool pathHasCdMacro = false; + + Match regExMatch = Regex.Match(path, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (String.Equals(regExMatch.Groups[1].Value, PathManip.enumWindowsDesignatedPaths.CD_DRIVE.ToString(), StringComparison.OrdinalIgnoreCase)) + pathHasCdMacro = true; + } + + return pathHasCdMacro; + } + + public static string resolveMacroPath(string path) + { + string resolvedPath = path; + Match regExMatch; + + regExMatch = Regex.Match(path, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (getWindowPathDel.ContainsKey(regExMatch.Groups[1].Value)) + { + resolvedPath = Regex.Replace(path, @"\{([^\{\}]+)\}", getWindowPathDel[regExMatch.Groups[1].Value].Invoke(), RegexOptions.IgnoreCase); + } + // if cd drive macro is define then we have to process it a little bit differently, since there can be multiple cd drives in the system + else if (String.Equals(PathManip.enumWindowsDesignatedPaths.CD_DRIVE.ToString(), regExMatch.Groups[1].Value, StringComparison.OrdinalIgnoreCase)) + { + resolvedPath = getValidatedCdPath(path); + } + } + + return resolvedPath; + } + + public static bool validatePathInCdDrive(string path, Form parentForm) + { + bool successful = true; + string msg = ""; + DriveInfo drive = new DriveInfo(path.Substring(0, 1)); + while (!drive.IsReady || (!File.Exists(path) && !Directory.Exists(path))) + { + Hardware.OpenCdDrive(drive.Name); + + msg = ((frmSetupStatusDisplay)parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, "Please insert a disc into drive " + + drive.Name + " that has the following path:\n" + path + "\n\n Click OK to proceed", "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + successful = false; + break; + } + } + + return successful; + } + + // if user specifies a path with a cd drive prefix macro (i.e. {cd_drive}\hey.txt, then we want to find the cd drive with the path (file or directory) specified + public static string getValidatedCdPath(string path = "") + { + string cdPath = ""; + string emptyDrivePath = ""; + + List cdDrives = Hardware.GetAllCdDrives(); + + foreach (string drive in cdDrives) + { + if (path.Length == 0) + { + cdPath = drive; + break; + } + else + { + string tempPath = Regex.Replace(path, @"\{([^\{\}]+)\}", PathManip.RemoveTrailingSlashInPath(drive), RegexOptions.IgnoreCase); + DriveInfo driveInfo = new DriveInfo(tempPath.Substring(0, 1)); + + if (File.Exists(tempPath) || Directory.Exists(tempPath)) + { + cdPath = tempPath; + break; + } + else if (!driveInfo.IsReady && emptyDrivePath.Length == 0) + { + emptyDrivePath = tempPath; + } + } + } + + if (cdPath.Length == 0 && cdDrives.Count > 0) + { + if (emptyDrivePath.Length > 0) + cdPath = emptyDrivePath; + else + cdPath = Regex.Replace(path, @"\{([^\{\}]+)\}", PathManip.RemoveTrailingSlashInPath(cdDrives[0]), RegexOptions.IgnoreCase); + } + + return cdPath; + } + + // return indentation in spaces + public static string getIndentation(int indentMultiples) + { + string indentUnit = " "; + string indentation = String.Empty; + + for (int i = 1; i <= indentMultiples; i++) + indentation += indentUnit; + + return indentation; + } + + public static Color getSetupStatusColor(EXECUTION_STATUS status) + { + if (status == EXECUTION_STATUS.SUCCESS) + return Color.Green; + else if (status == EXECUTION_STATUS.FAILURE) + return Color.Red; + else + return Color.FromArgb(224, 154, 14); + } + + public static Color getSetupStepTitleColor() + { + return Color.FromArgb(125, 143, 128); + } + + public static void formatConfigIniFailureMessage(string message, List textPropList) + { + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.textColor = getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 10); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(message, "File:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(message, "Section:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + if (StringManip.GetPhraseWordIndexInText(message, "Key:") > -1) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(message, "Key:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + if (StringManip.GetPhraseWordIndexInText(message, "Value:") > -1) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(message, "Value:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(message, "Description:") - 1; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + public static void enableAutoRunAfterReboot(string taskSchedulerName, string appPath) + { + Properties.Settings.Default["AutoRunOnStartup"] = true; + + createTaskSchedulerForAutoRunAfterReboot(taskSchedulerName, appPath); + } + + private static void createTaskSchedulerForAutoRunAfterReboot(string taskSchedulerName, string appPath) + { + using (TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskService ts = new TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskService()) + { + if (ts.GetTask(taskSchedulerName) == null) + { + TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskDefinition td = ts.NewTask(); + td.RegistrationInfo.Description = taskSchedulerName; + + // when running task, use the following account + td.Principal.UserId = String.Concat(Environment.UserDomainName, "\\", Environment.UserName); + + // only run after user has logged on + td.Principal.LogonType = TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskLogonType.InteractiveToken; + + // run this task with highest privileges + td.Principal.RunLevel = TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskRunLevel.Highest; + + // creating the trigger, this actually executes the task + TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.LogonTrigger trigger = new TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.LogonTrigger(); + trigger.UserId = String.Concat(Environment.UserDomainName, "\\", Environment.UserName); + trigger.Delay = TimeSpan.FromSeconds(60.0); + td.Triggers.Add(trigger); + + td.Actions.Add(new TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.ExecAction(appPath, null, null)); + ts.RootFolder.RegisterTaskDefinition(taskSchedulerName, td); + } + } + } + + public static void deleteTaskSchedulerForAutoRunAfterReboot(string taskSchedulerName) + { + using (TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskService ts = new TaskSchedulerAlias::Microsoft.Win32.TaskScheduler.TaskService()) + { + if (ts.GetTask(taskSchedulerName) != null) + { + ts.RootFolder.DeleteTask(taskSchedulerName); + } + } + } + } +} diff --git a/AllPurposeAutoSetup/ConfigFileManager.cs b/AllPurposeAutoSetup/ConfigFileManager.cs new file mode 100644 index 0000000..1fffcb4 --- /dev/null +++ b/AllPurposeAutoSetup/ConfigFileManager.cs @@ -0,0 +1,502 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class ConfigFileManager + { + // each of the enumeration in here should match a section name in the INI file + public enum enum_INI_SECTION_NAMES + { + General, + Global_Settings, + GUTS_Info, + Install_Software, + Paths_Creation, + Paths_Sharing, + Env_Variables, + Setup_Step_Manager, + GUTS_Pre_Build_Assistance, + Files_Transfer_Packages, + GUTS_Config_File, + Windows_Shortcuts, + Files_Folders_Removal, + Run_Applications, + Windows_Features, + Windows_Registry + } + + // this is used to verify INI file and flag errors in the INI file for user to fix + public struct Ini_KeyValue + { + public string iniSectionName; + public string iniKeyName; + public string iniValue; + public T alternateValue; // user-defined value, this could be a bool, int, anything + + public Ini_KeyValue(T tvar) + { + iniSectionName = String.Empty; + iniKeyName = String.Empty; + iniValue = String.Empty; + alternateValue = tvar; + } + } + + public struct ConfigGeneralInfo + { + public IniFileManip iniFile; + public string pathAndNameOfConfigFile; + + public bool is64BitPlatform; + public bool is32BitPlatform; + + public Ini_KeyValue programName; + public Ini_KeyValue applicationPlatform; + } + + public struct ConfigGlobalSettings + { + public Ini_KeyValue suppressAllPrompts; + } + + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + //public event Action> UpdateStatusDisplayAndLogEvent; + + Form m_parentForm; + public static ConfigGeneralInfo ms_configGeneralInfo; + public static ConfigGlobalSettings ms_configGlobalSettings; + + public ConfigFileManager(Form parentForm, string configFile) + { + m_parentForm = parentForm; + + ms_configGeneralInfo.pathAndNameOfConfigFile = configFile; + ms_configGeneralInfo.programName = new Ini_KeyValue(""); + ms_configGeneralInfo.applicationPlatform = new Ini_KeyValue(""); + + ms_configGeneralInfo.is32BitPlatform = false; + ms_configGeneralInfo.is64BitPlatform = false; + + ms_configGeneralInfo.iniFile = new IniFileManip(ms_configGeneralInfo.pathAndNameOfConfigFile); + + ms_configGlobalSettings.suppressAllPrompts = new Ini_KeyValue(false); + + parseConfigInfo(); + } + + private void parseConfigInfo() + { + readGeneralSection(ms_configGeneralInfo.iniFile); + readGlobalSection(ms_configGeneralInfo.iniFile); + } + + public static void parseConfigInfo(string iniSectionName, List> configInfo) + { + string[] keyDataPair; + string[] sectionData; + Ini_KeyValue iniVal = new Ini_KeyValue(""); + + if (configInfo == null) + configInfo = new List>(); + + sectionData = ms_configGeneralInfo.iniFile.ReadSectionData(iniSectionName); + foreach (string line in sectionData) + { + keyDataPair = line.Split('='); + + if (keyDataPair.Length == 2) + { + iniVal.iniSectionName = iniSectionName; + iniVal.iniKeyName = keyDataPair[0]; + iniVal.iniValue = keyDataPair[1]; + + configInfo.Add(iniVal) ; + } + } + } + + public static void parseConfigInfo(string iniSectionName, Dictionary configInfo) + { + string[] keyDataPair; + string[] sectionData; + + if (configInfo == null) + configInfo = new Dictionary(); + + sectionData = ms_configGeneralInfo.iniFile.ReadSectionData(iniSectionName); + foreach (string line in sectionData) + { + keyDataPair = line.Split('='); + + if (keyDataPair.Length == 2) + configInfo[keyDataPair[0]] = keyDataPair[1]; + } + } + + public void readGeneralSection(IniFileManip iniFile) + { + string[] keyDataPair; + Dictionary keyAndValuePair = new Dictionary(); + Dictionary keyAndValuePair2 = new Dictionary(); + Ini_KeyValue bIniVal = new Ini_KeyValue(false); + Ini_KeyValue iniVal = new Ini_KeyValue(""); + Ini_KeyValue iniVal2 = new Ini_KeyValue(""); + + string sectionName; + + string[] sectionData; + + sectionName = enum_INI_SECTION_NAMES.General.ToString(); + sectionData = iniFile.ReadSectionData(sectionName); + + ms_configGeneralInfo.programName.iniKeyName = "program_name"; + ms_configGeneralInfo.programName.iniSectionName = sectionName; + + ms_configGeneralInfo.applicationPlatform.iniKeyName = "Application_Platform"; + ms_configGeneralInfo.applicationPlatform.iniSectionName = sectionName; + + foreach (string line in sectionData) + { + keyDataPair = line.Split('='); + + if (String.Equals(keyDataPair[0], ms_configGeneralInfo.programName.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + if (keyDataPair.Length == 2) + { + ms_configGeneralInfo.programName.iniValue = keyDataPair[1]; + } + } + else if (String.Equals(keyDataPair[0], ms_configGeneralInfo.applicationPlatform.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + if (keyDataPair.Length == 2) + { + ms_configGeneralInfo.applicationPlatform.iniValue = keyDataPair[1]; + } + if (String.Equals(ms_configGeneralInfo.applicationPlatform.iniValue, "32", StringComparison.OrdinalIgnoreCase)) + ms_configGeneralInfo.is32BitPlatform = true; + else if (String.Equals(ms_configGeneralInfo.applicationPlatform.iniValue, "64", StringComparison.OrdinalIgnoreCase)) + ms_configGeneralInfo.is64BitPlatform = true; + else + ms_configGeneralInfo.is64BitPlatform = true; + } + } + } + + public void readGlobalSection(IniFileManip iniFile) + { + string[] keyDataPair; + Dictionary keyAndValuePair = new Dictionary(); + Dictionary keyAndValuePair2 = new Dictionary(); + Ini_KeyValue bIniVal = new Ini_KeyValue(false); + Ini_KeyValue iniVal = new Ini_KeyValue(""); + Ini_KeyValue iniVal2 = new Ini_KeyValue(""); + + string sectionName; + + string[] sectionData; + + sectionName = enum_INI_SECTION_NAMES.Global_Settings.ToString(); + sectionData = iniFile.ReadSectionData(sectionName); + + ms_configGlobalSettings.suppressAllPrompts.iniKeyName = "Suppress_All_Prompts"; + ms_configGlobalSettings.suppressAllPrompts.iniSectionName = sectionName; + + foreach (string line in sectionData) + { + keyDataPair = line.Split('='); + + if (String.Equals(keyDataPair[0], ms_configGlobalSettings.suppressAllPrompts.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + if (keyDataPair.Length == 2) + { + ms_configGlobalSettings.suppressAllPrompts.iniValue = keyDataPair[1]; + } + + if (String.Equals(ms_configGlobalSettings.suppressAllPrompts.iniValue, "true", StringComparison.OrdinalIgnoreCase) + || + String.Equals(ms_configGlobalSettings.suppressAllPrompts.iniValue, "yes", StringComparison.OrdinalIgnoreCase)) + ms_configGlobalSettings.suppressAllPrompts.alternateValue = true; + else + ms_configGlobalSettings.suppressAllPrompts.alternateValue = false; + } + } + } + + public static void readOneToManyDictionary(IniFileManip iniFile, string sectionName, string leftDictPattern, string rightDictPattern, Dictionary, List>> dict) + { + string[] keyDataPair, splitStrings, splitStrings2; + Match regExMatch; + Dictionary keyAndValuePair = new Dictionary(); + Dictionary keyAndValuePair2 = new Dictionary(); + Ini_KeyValue bIniVal = new Ini_KeyValue(false); + Ini_KeyValue iniVal = new Ini_KeyValue(""); + Ini_KeyValue iniVal2 = new Ini_KeyValue(""); + + string[] sectionData; + + string iniEntryDelimiter = "[ini_entry_separator]"; + string iniKeyValueDelimiter = "[key_value_separator]"; + + sectionData = iniFile.ReadSectionData(sectionName); + foreach (string line in sectionData) + { + keyDataPair = line.Split('='); + + if (keyDataPair.Length == 2) + keyDataPair[1] = Regex.Replace(keyDataPair[1], @"\{equal_sign\}", "="); + + regExMatch = Regex.Match(keyDataPair[0], leftDictPattern, RegexOptions.IgnoreCase); + + // if item belongs to the left side of the dictionary + if (regExMatch.Success && keyDataPair.Length == 2) + { + // if there's not already an item that exists in the dictionary + if (!keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value) && keyDataPair[1].Length > 0) + { + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = keyDataPair[0]; + iniVal.iniValue = keyDataPair[1]; + + // if there are items on the right of the dictionary that's associated with the item on the left side + if (keyAndValuePair2.ContainsKey(regExMatch.Groups[1].Value)) + { + splitStrings = keyAndValuePair2[regExMatch.Groups[1].Value].Split(new string[] { iniEntryDelimiter }, StringSplitOptions.RemoveEmptyEntries); + + foreach (string keyValuePairItem in splitStrings) + { + splitStrings2 = keyValuePairItem.Split(new string[] { iniKeyValueDelimiter }, StringSplitOptions.None); + + // generate value information + iniVal2.iniSectionName = sectionName; + iniVal2.iniKeyName = splitStrings2[0]; + iniVal2.iniValue = splitStrings2[1]; + + if (dict.ContainsKey(iniVal)) + dict[iniVal].Add(iniVal2); + else + dict[iniVal] = new List>() { iniVal2 }; + + if (!keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + { + keyAndValuePair[regExMatch.Groups[1].Value] = keyDataPair[0] + iniKeyValueDelimiter + keyDataPair[1]; + } + } + + keyAndValuePair2.Remove(regExMatch.Groups[1].Value); + } + else // store the Ini struct of the left hand side of the dictionary + keyAndValuePair[regExMatch.Groups[1].Value] = keyDataPair[0] + iniKeyValueDelimiter + keyDataPair[1]; + } + } + else + { + regExMatch = Regex.Match(keyDataPair[0], rightDictPattern, RegexOptions.IgnoreCase); + + // if the item belong to the right side of the dictionary + if (regExMatch.Success && keyDataPair.Length == 2) + { + // is this key/value is associated with the corresponding value of the left hand side of the dictionary + if (keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + { + // get the ini properties of the left side of the dictionary + splitStrings2 = keyAndValuePair[regExMatch.Groups[1].Value].Split(new string[] { iniKeyValueDelimiter }, StringSplitOptions.RemoveEmptyEntries); + + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = splitStrings2[0]; + iniVal.iniValue = splitStrings2[1]; + + // generate value information + iniVal2.iniSectionName = sectionName; + iniVal2.iniKeyName = keyDataPair[0]; + iniVal2.iniValue = keyDataPair[1]; + + // save the key/value for this app name + if (dict.ContainsKey(iniVal)) + dict[iniVal].Add(iniVal2); + else + dict[iniVal] = new List>() { iniVal2 }; + } + else + { + if (keyAndValuePair2.ContainsKey(regExMatch.Groups[1].Value)) + { + keyAndValuePair2[regExMatch.Groups[1].Value] += iniEntryDelimiter + keyDataPair[0] + iniKeyValueDelimiter + keyDataPair[1]; + } + else + keyAndValuePair2[regExMatch.Groups[1].Value] = keyDataPair[0] + iniKeyValueDelimiter + keyDataPair[1]; + } + } + } + } + + if (keyAndValuePair.Count > 0) + { + // remove entries in keyAndValuePair that have already been saved in the dictionary + foreach (KeyValuePair, List>> entry in dict) + { + regExMatch = Regex.Match(entry.Key.iniKeyName, leftDictPattern, RegexOptions.IgnoreCase); + // if item belongs to the left side of the dictionary + if (regExMatch.Success) + { + if (keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + keyAndValuePair.Remove(regExMatch.Groups[1].Value); + } + } + + // for each group of items, if only the left side of the dictionary is defined, add it to the dictionary anyway + foreach (KeyValuePair entry in keyAndValuePair) + { + // break down the elements of the left side of dictionary + splitStrings2 = entry.Value.Split(new string[] { iniKeyValueDelimiter }, StringSplitOptions.RemoveEmptyEntries); + + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = splitStrings2[0]; + iniVal.iniValue = splitStrings2[1]; + + if (!dict.ContainsKey(iniVal)) + dict[iniVal] = new List>(); + } + } + } + + public void readOneToOneDictionary(IniFileManip iniFile, string sectionName, string leftDictPattern, string rightDictPattern, Dictionary, Ini_KeyValue> dict) + { + string[] keyDataPair, splitStrings2; + Match regExMatch; + Dictionary keyAndValuePair = new Dictionary(); + Dictionary keyAndValuePair2 = new Dictionary(); + Ini_KeyValue bIniVal = new Ini_KeyValue(false); + Ini_KeyValue iniVal = new Ini_KeyValue(""); + Ini_KeyValue iniVal2 = new Ini_KeyValue(""); + + string[] sectionData; + + sectionData = iniFile.ReadSectionData(sectionName); + foreach (string path in sectionData) + { + keyDataPair = path.Split('='); + + if (keyDataPair.Length == 2) + keyDataPair[1] = Regex.Replace(keyDataPair[1], @"\{equal_sign\}", "="); + + regExMatch = Regex.Match(keyDataPair[0], leftDictPattern, RegexOptions.IgnoreCase); + + // if item belongs to the left side of the dictionary + if (regExMatch.Success && keyDataPair.Length == 2) + { + // if there's not an existing item already in the dictionary + if (!keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + { + // if the item on the right side is associated to the item on the left side of the dictionary + if (keyAndValuePair2.ContainsKey(regExMatch.Groups[1].Value)) + { + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = keyDataPair[0]; + iniVal.iniValue = keyDataPair[1]; + + splitStrings2 = keyAndValuePair2[regExMatch.Groups[1].Value].Split('|'); + + // generate the value information + iniVal2.iniSectionName = sectionName; + iniVal2.iniKeyName = splitStrings2[0]; + iniVal2.iniValue = splitStrings2[1]; + + dict[iniVal] = iniVal2; + keyAndValuePair2.Remove(regExMatch.Groups[1].Value); + } + else + keyAndValuePair[regExMatch.Groups[1].Value] = keyDataPair[0] + "|" + keyDataPair[1]; + } + } + + regExMatch = Regex.Match(keyDataPair[0], rightDictPattern, RegexOptions.IgnoreCase); + + // if item belongs to the right side of the dictionary + if (regExMatch.Success && keyDataPair.Length == 2) + { + // if item on the left is associated with the item on the right side of the dictionary + if (keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + { + // get the ini properties of the left side of the dictionary + splitStrings2 = keyAndValuePair[regExMatch.Groups[1].Value].Split('|'); + + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = splitStrings2[0]; + iniVal.iniValue = splitStrings2[1]; + + // generate the value information + iniVal2.iniSectionName = sectionName; + iniVal2.iniKeyName = keyDataPair[0]; + iniVal2.iniValue = keyDataPair[1]; + + // create a new entry in the dictionary + dict[iniVal] = iniVal2; + } + else + { + keyAndValuePair2[regExMatch.Groups[1].Value] = keyDataPair[0] + "|" + keyDataPair[1]; + } + } + } + + if (keyAndValuePair.Count > 0) + { + // remove entries in keyAndValuePair that have already been saved in the dictionary + foreach (KeyValuePair, ConfigFileManager.Ini_KeyValue> entry in dict) + { + regExMatch = Regex.Match(entry.Key.iniKeyName, leftDictPattern, RegexOptions.IgnoreCase); + // if item belongs to the left side of the dictionary + if (regExMatch.Success) + { + if (keyAndValuePair.ContainsKey(regExMatch.Groups[1].Value)) + keyAndValuePair.Remove(regExMatch.Groups[1].Value); + } + } + + // for each group of items, if only the left side of the dictionary is defined, add it to the dictionary anyway + foreach (KeyValuePair entry in keyAndValuePair) + { + // break down the elements of the left side of dictionary + splitStrings2 = entry.Value.Split('|'); + + // generate the key information + iniVal.iniSectionName = sectionName; + iniVal.iniKeyName = splitStrings2[0]; + iniVal.iniValue = splitStrings2[1]; + + iniVal2.iniSectionName = ""; + iniVal2.iniKeyName = ""; + iniVal2.iniValue = ""; + + if (!dict.ContainsKey(iniVal)) + dict[iniVal] = iniVal2; + } + } + } + } +} diff --git a/AllPurposeAutoSetup/DLL/CommonLib.dll b/AllPurposeAutoSetup/DLL/CommonLib.dll new file mode 100644 index 0000000..91e2e33 Binary files /dev/null and b/AllPurposeAutoSetup/DLL/CommonLib.dll differ diff --git a/AllPurposeAutoSetup/Docs/Automated Windows Installer (AWI) - SDD.pptx b/AllPurposeAutoSetup/Docs/Automated Windows Installer (AWI) - SDD.pptx new file mode 100644 index 0000000..308bb22 Binary files /dev/null and b/AllPurposeAutoSetup/Docs/Automated Windows Installer (AWI) - SDD.pptx differ diff --git a/AllPurposeAutoSetup/DotNet2Pt0FrameworkManager.cs b/AllPurposeAutoSetup/DotNet2Pt0FrameworkManager.cs new file mode 100644 index 0000000..fb07ea9 --- /dev/null +++ b/AllPurposeAutoSetup/DotNet2Pt0FrameworkManager.cs @@ -0,0 +1,285 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class DotNet2Pt0FrameworkManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + Form m_parentForm; + + private bool dotNetSecurityZoneSettingSuccessful; + + public DotNet2Pt0FrameworkManager(Form parentForm) + { + m_parentForm = parentForm; + } + + // modify trust levels for security zones + public bool adjustZoneSecurityForDotNetFrameWork2Pt0(string sectionName) + { + bool setupSuccessful = true; + string indentation = String.Empty, platformStr; + + string dotNetFrameWork2_32bit_Path = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727"; + string dotNetFrameWork2_64bit_Path = @"C:\Windows\Microsoft.NET\Framework64\v2.0.50727"; + string dotNetFrameWork2_Bin_Path; + string caspolApp = String.Empty; + + List securityZoneNames = new List() { "My_Computer_Zone", "LocalIntranet_Zone", "Internet_Zone", "Trusted_Zone", "Restricted_Zone" }; + List trustLevels = new List() { "FullTrust", "LocalIntranet", "Internet", "Nothing" }; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string msg; + + if (ConfigFileManager.ms_configGeneralInfo.is32BitPlatform) + { + platformStr = "32-bit"; + dotNetFrameWork2_Bin_Path = dotNetFrameWork2_32bit_Path; + } + else + { + platformStr = "64-bit"; + dotNetFrameWork2_Bin_Path = dotNetFrameWork2_64bit_Path; + } + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Setting .NET Framework 2.0 (" + platformStr + ") Security Zone Trust Level=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (setupSuccessful) + { + caspolApp = dotNetFrameWork2_Bin_Path + "\\caspol.exe"; + + if (!Directory.Exists(dotNetFrameWork2_32bit_Path)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. .NET Framework 2.0 (" + platformStr + ") is not installed."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.ERROR, null, "Unable to detect the presence .NET Framework 2.0 (" + platformStr + ").\n\n Please install .NET Framework 2.0 before continuing...", "ERROR!!!", -1); + setupSuccessful = false; + } + else if (!File.Exists(caspolApp)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + caspolApp + " not found."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.ERROR, null, "Unable to detect the presence .NET Framework 2.0 (" + platformStr + ").\n\n Please install .NET Framework 2.0 before continuing...", "ERROR!!!", -1); + setupSuccessful = false; + } + else + { + dotNetSecurityZoneSettingSuccessful = false; + ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); + cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe"; + cmdStartInfo.RedirectStandardOutput = true; + cmdStartInfo.RedirectStandardError = true; + cmdStartInfo.RedirectStandardInput = true; + cmdStartInfo.UseShellExecute = false; + cmdStartInfo.CreateNoWindow = true; + + Process cmdProcess; + //cmdProcess.StandardInput.WriteLine("Dism /online /disable-feature /featurename:IIS-FTPSvc /norestart"); //Execute command + + cmdProcess = new Process(); + cmdProcess.StartInfo = cmdStartInfo; + cmdProcess.ErrorDataReceived += cmd_Error; + cmdProcess.OutputDataReceived += cmd_SecurityZone_DataReceived; + cmdProcess.EnableRaisingEvents = true; + cmdProcess.Start(); + cmdProcess.BeginOutputReadLine(); + cmdProcess.BeginErrorReadLine(); + + // turn prompts off + cmdProcess.StandardInput.WriteLine(caspolApp + " -pp off"); //Execute command + + cmdProcess.StandardInput.WriteLine("exit"); //Execute exit. + + cmdProcess.WaitForExit(); + cmdProcess.Close(); + + if (!dotNetSecurityZoneSettingSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. Access denied from running .NET Framework Caspol 2.0."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.ERROR, null, "Access denied from running .NET Framework Caspol 2.0.\n\n Make sure to run application as Administrator...", "ERROR!!!", -1); + setupSuccessful = false; + } + + foreach (string zone in securityZoneNames) + { + cmdProcess = new Process(); + cmdProcess.StartInfo = cmdStartInfo; + cmdProcess.ErrorDataReceived += cmd_Error; + cmdProcess.OutputDataReceived += cmd_SecurityZone_DataReceived; + cmdProcess.EnableRaisingEvents = true; + cmdProcess.Start(); + cmdProcess.BeginOutputReadLine(); + cmdProcess.BeginErrorReadLine(); + + dotNetSecurityZoneSettingSuccessful = false; + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "" + zone + "=" + trustLevels[0]; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set trust level for security zone + cmdProcess.StandardInput.WriteLine(caspolApp + " -m -cg " + zone + " " + trustLevels[0]); //Execute command + //cmdProcess.StandardInput.WriteLine(""); + + //count++; + + cmdProcess.StandardInput.WriteLine("exit"); //Execute exit. + + cmdProcess.WaitForExit(); + cmdProcess.Close(); + + if (dotNetSecurityZoneSettingSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = " - FAILED"; + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + cmdProcess = new Process(); + cmdProcess.StartInfo = cmdStartInfo; + //cmdProcess.ErrorDataReceived += cmd_Error; + //cmdProcess.OutputDataReceived += cmd_SecurityZone_DataReceived; + cmdProcess.EnableRaisingEvents = true; + cmdProcess.Start(); + cmdProcess.BeginOutputReadLine(); + cmdProcess.BeginErrorReadLine(); + + // turn policy change prompt back on. THIS IS VERY IMPORTANT + // if this is not turned back on, the Windows Firewall might block some functionality of an application + cmdProcess.StandardInput.WriteLine(caspolApp + " -pp on"); //Execute command + + cmdProcess.StandardInput.WriteLine("exit"); //Execute exit. + + cmdProcess.WaitForExit(); + cmdProcess.Close(); + } + } + return setupSuccessful; + } + + void cmd_SecurityZone_DataReceived(object sender, DataReceivedEventArgs e) + { + Match regExMatch; + + if (e.Data == null) + { + return; + } + + regExMatch = Regex.Match(e.Data, @".*success.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + dotNetSecurityZoneSettingSuccessful = true; + } + } + + void cmd_Error(object sender, DataReceivedEventArgs e) + { + //Console.WriteLine("Error from other process"); + //Console.WriteLine(e.Data); + } + } +} diff --git a/AllPurposeAutoSetup/FileFolderRemovalManager.cs b/AllPurposeAutoSetup/FileFolderRemovalManager.cs new file mode 100644 index 0000000..44a72ec --- /dev/null +++ b/AllPurposeAutoSetup/FileFolderRemovalManager.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; +using System.Xml; +using System.Xml.XPath; +using System.Net; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class FileFolderRemovalManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public event Action> UpdateStatusDisplayAtLine; + + public List> filesFoldersToBeRemoved = new List>(); + + Form m_parentForm; + + public FileFolderRemovalManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool removeFilesFolders(string sectionName) + { + bool setupSuccessful = true; + string msg, indentation = String.Empty, displayMsg = "", logMsg = ""; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Removing Files/Folders=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + filesFoldersToBeRemoved.Clear(); + + parseConfigInfo(sectionName); + + if (setupSuccessful) + { + int filesDeletedCount = 0, foldersDeletedCount = 0, filesSkipped = 0, foldersSkipped = 0; + frmSetupStatusDisplay displayFrm = (frmSetupStatusDisplay)m_parentForm; + int itemCountLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + int deleteItemLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + + List filesAndFoldersToBeRemoved = new List(); + + foreach (ConfigFileManager.Ini_KeyValue item in filesFoldersToBeRemoved) + { + string path = ""; + path = Path.GetFullPath(Common.resolveMacroPath(item.iniValue)); + + if (File.Exists(path)) + { + filesAndFoldersToBeRemoved.Add(path); + } + else if (Directory.Exists(path)) + { + // delete folder recursively + if (item.alternateValue) + { + filesAndFoldersToBeRemoved.Add(path); + } + else + { + string[] files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly); + filesAndFoldersToBeRemoved.AddRange(files.ToList()); + } + } + else + { + string what = ""; + + if (PathManip.PathIsFile(path)) + { + filesSkipped++; + what = "File"; + } + else + { + foldersSkipped++; + what = "Folder"; + } + + indentation = Common.getIndentation(1); + logMsg = "\n" + indentation + "Deleting " + path + " - SKIPPED. " + what + " does not exist"; + UpdateStatusDisplayAndLogEvent("", logMsg, textPropList); + } + + } + + foreach (string item in filesAndFoldersToBeRemoved) + { + indentation = Common.getIndentation(1); + msg = indentation + "Files Deleted: " + filesDeletedCount.ToString() + " Folders Deleted: " + foldersDeletedCount.ToString(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 2; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "Folders deleted:"); + textProp.wordCount = 2; + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "Folders deleted:") + 2; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(msg, itemCountLineIndex, textPropList); + + //tempTextPropList = new List(textPropList); + + if (File.Exists(item) || Directory.Exists(item)) + { + displayMsg = indentation + "Deleting " + StringManip.ShortenStringToSize(item, 65); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + //textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = 0; + textProp.wordCount = 1; + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(255, 60, 0); + textProp.wordIndex = 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(displayMsg, deleteItemLineIndex, textPropList); + + if (Directory.Exists(item)) + { + try + { + PathManip.DeleteFoldersRecursive(item); + foldersDeletedCount++; + logMsg = "\n" + indentation + "Deleting " + item + " - SUCCESS"; + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + displayMsg = "\n" + indentation + "- FAILED. Error deleting folder\n" + indentation + "Folder: " + item + "\n" + indentation + "Error description: " + e.Message; + logMsg = "\n" + indentation + "Deleting " + item + " - FAILED"; + setupSuccessful = false; + } + } + else + { + try + { + File.SetAttributes(item, FileAttributes.Normal); + File.Delete(item); + filesDeletedCount++; + logMsg = "\n" + indentation + "Deleting " + item + " - SUCCESS"; + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + displayMsg = "\n" + indentation + "- FAILED. Error deleting file\n" + indentation + "File: " + item + "\n" + indentation + "Error description: " + e.Message; + logMsg = "\n" + indentation + "Deleting " + item + " - FAILED"; + setupSuccessful = false; + } + } + + if (!setupSuccessful) + { + break; + } + + UpdateStatusDisplayAndLogEvent("", logMsg, textPropList); + } + + Thread.Sleep(2000); + } + + // delete the very first line that is the start of the progress update + // all the lines below the first starting lines will get deleted too + for (int i = 1; i <= 2; i++) + { + displayFrm.removeStatusDisplayLine(itemCountLineIndex, true); + } + + if (!setupSuccessful) + { + UpdateStatusDisplayAndLogEvent(displayMsg, logMsg, textPropList); + } + + if (setupSuccessful) + { + if (filesFoldersToBeRemoved.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. No file/folder to delete"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SUCCESS. (Files Deleted: " + filesDeletedCount + " ) (Folders Deleted: " + foldersDeletedCount + " )" + " (Files skipped: " + filesSkipped + " )" + " (Folders skipped: " + foldersSkipped + " )"; + UpdateStatusDisplayAndLogEvent(msg, "", textPropList); + } + } + + msg = "\n" + Common.getIndentation(1) + "Files Deleted: " + filesDeletedCount + " | Folders Deleted: " + foldersDeletedCount + " | Files Skipped: " + filesSkipped + " | Folders Skipped: " + foldersSkipped; + UpdateStatusDisplayAndLogEvent("", msg, textPropList); + + } + + return setupSuccessful; + } + + private void parseConfigInfo(string sectionName) + { + string[] keyDataPair; + Match regExMatch; + ConfigFileManager.Ini_KeyValue bIniVal = new ConfigFileManager.Ini_KeyValue(false); + + string[] sectionData; + + sectionData = ConfigFileManager.ms_configGeneralInfo.iniFile.ReadSectionData(sectionName); + + foreach (string path in sectionData) + { + keyDataPair = path.Split('='); + + if (keyDataPair.Length == 2) + { + bIniVal.iniSectionName = sectionName; + bIniVal.iniKeyName = keyDataPair[0]; + bIniVal.iniValue = keyDataPair[1]; + + regExMatch = Regex.Match(bIniVal.iniValue, @"^([^,]+),.*recursive.*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + bIniVal.alternateValue = true; + bIniVal.iniValue = regExMatch.Groups[1].Value; + } + else + bIniVal.alternateValue = false; + + filesFoldersToBeRemoved.Add(bIniVal); + } + } + } + } +} diff --git a/AllPurposeAutoSetup/FilePackageTransferManager.cs b/AllPurposeAutoSetup/FilePackageTransferManager.cs new file mode 100644 index 0000000..ccdda17 --- /dev/null +++ b/AllPurposeAutoSetup/FilePackageTransferManager.cs @@ -0,0 +1,1945 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; +using System.Xml; +using System.Xml.XPath; +using System.Net; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class FilePackageTransferManager + { + public enum eFileAction + { + None + }; + public enum eFileCopyStatus { FAIL, SUCCESS }; + + public enum eCopyType { FOLDERS, FILES }; + + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public event Action> UpdateStatusDisplayAtLine; + + // event for thread to notify other threads that it has exited + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + public List> fileTransferPackages = new List>(); + + private List sourceFiles = new List(); + + FileManip.FileDownloadProgressTracker downloadProgressTracker = new FileManip.FileDownloadProgressTracker(); + + int m_copyProgressLineIndex = 0; + + Form m_parentForm; + + bool m_filePackageProcessedSuccessful = false; + + int m_fileCreatedCount = 0; + + int m_fileCopyCount = 0; + + public FilePackageTransferManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool manageFilePackageTransfer(string sectionName) + { + bool setupSuccessful = true; + string msg, indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Copying File Packages=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + XPathDocument doc = null; + + fileTransferPackages.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, fileTransferPackages); + + setupSuccessful = verifyFilePackagesInfo(); + + if (setupSuccessful) + { + foreach (ConfigFileManager.Ini_KeyValue filePackage in fileTransferPackages) + { + try + { + XmlReaderSettings readerSettings = new XmlReaderSettings(); + // tells the xmlreader to ignore comment in XML file + readerSettings.IgnoreComments = true; + using (XmlReader reader = XmlReader.Create(filePackage.iniValue, readerSettings)) + { + // load the XML file + doc = new XPathDocument(reader); + } + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. Unable to parse file " + filePackage.iniValue + ". " + e.Message; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + XPathNavigator nav = doc.CreateNavigator(); + + // move to root node + nav.MoveToRoot(); + + // move to 1st level node + if (nav.MoveToFirstChild()) + { + // move to 2nd level node + if (nav.MoveToFirstChild()) + { + if (!ProcessXML2ndLevelNodes(nav, Path.GetDirectoryName(filePackage.iniValue))) + { + setupSuccessful = false; + } + } + } + } + + if (!setupSuccessful) + break; + } + + if (setupSuccessful) + { + if (!m_filePackageProcessedSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to be copied from the provided information."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + } + return setupSuccessful; + } + + private void DownloadProgressHandler(UInt64 totalBytesCopied, UInt64 totalBytesFile) + { + string totalSizeDescription = FileManip.DescribeFileSize(totalBytesFile, FileManip.eFileSizeResolution.AUTO); + double totalPercentageReceived = ((double)totalBytesCopied / (double)totalBytesFile) * 100; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + if (!downloadProgressTracker.stopwatchForFileDownload.IsRunning) + { + downloadProgressTracker.stopwatchForFileDownload.Start(); + } + + if (!downloadProgressTracker.stopwatchForUpdateInterval.IsRunning) + { + downloadProgressTracker.stopwatchForUpdateInterval.Start(); + } + + // when an interval is reached, update download progress + if (downloadProgressTracker.stopwatchForUpdateInterval.ElapsedMilliseconds >= downloadProgressTracker.updateIntervalInMs) + { + downloadProgressTracker.stopwatchForUpdateInterval.Reset(); + + if (downloadProgressTracker.averageBytesReceivedPerUpdateInterval == 0) + downloadProgressTracker.averageBytesReceivedPerUpdateInterval = totalBytesCopied - downloadProgressTracker.totalBytesReceived; + else + { + downloadProgressTracker.averageBytesReceivedPerUpdateInterval += totalBytesCopied - downloadProgressTracker.totalBytesReceived; + downloadProgressTracker.averageBytesReceivedPerUpdateInterval /= 2; + } + downloadProgressTracker.totalBytesReceived = totalBytesCopied; + + downloadProgressTracker.millisecondsCount += downloadProgressTracker.updateIntervalInMs; + + string receivedSizeDescription = FileManip.DescribeFileSize(totalBytesCopied, downloadProgressTracker.fileSizeResolution); + + if (downloadProgressTracker.strTotalBytesReceived.Length > 0) + { + // determine what the highest resolution transfer rate change + FileManip.eFileSizeResolution res = FileManip.GetFileResolutionOfTransferRate(receivedSizeDescription, downloadProgressTracker.strTotalBytesReceived); + // increate the count for this resolution + downloadProgressTracker.unitCount[res]++; + } + + // every 2 seconds, we determine which resolution change the most, and use the resolution + // that's changed the most as the update progress + if (downloadProgressTracker.millisecondsCount >= 2000) + { + FileManip.eFileSizeResolution res = downloadProgressTracker.getResolutionWithHighestCount(); + + if (res != FileManip.eFileSizeResolution.AUTO) + downloadProgressTracker.fileSizeResolution = res; + + downloadProgressTracker.millisecondsCount = 0; + downloadProgressTracker.resetUnitCount(); + } + + receivedSizeDescription = FileManip.DescribeFileSize(totalBytesCopied, downloadProgressTracker.fileSizeResolution); + + downloadProgressTracker.strTotalBytesReceived = receivedSizeDescription; + + // shorten the size description + receivedSizeDescription = FileManip.ShortenFileSizeDescription(receivedSizeDescription); + + long downloadSpeed = (long)Math.Ceiling((double)downloadProgressTracker.averageBytesReceivedPerUpdateInterval / ((double)downloadProgressTracker.updateIntervalInMs / 1000.0)); + string downloadSpeedDesc = FileManip.DescribeFileSize((UInt64)downloadSpeed, FileManip.eFileSizeResolution.AUTO); + downloadSpeedDesc = Regex.Replace(downloadSpeedDesc, @"(\d+)\.\d+(.+)", "$1$2", RegexOptions.IgnoreCase); + + string msg = Common.getIndentation(1) + "Progress: " + string.Format("{0:N2}%", totalPercentageReceived) + + " Speed: " + downloadSpeedDesc + "/s Copied: " + receivedSizeDescription + " Total Size: " + totalSizeDescription + + " Elapsed time: " + DateTimeManip.DescribeTimeElapsed(downloadProgressTracker.stopwatchForFileDownload.Elapsed); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(0, 82, 204); + textProp.wordIndex = 1; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(0, 82, 204); + textProp.wordIndex = 3; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(0, 82, 204); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "copied:") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "total size:") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(0, 82, 204); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "total size:") + 2; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(0, 82, 204); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "elapsed time:") + 2; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(msg, m_copyProgressLineIndex, textPropList); + } + } + + bool processFilePackage() + { + bool setupSuccessful = true; + string msg = "", msg2 = "", displayMsg = "", logMsg = "", indentation = String.Empty, errMsg = "", sourcePath = "", destPath = "", tempMsg = ""; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + List tempTextPropList; + + bool overwriteDestinationFile = false; + bool overwriteDestinationFileAlways = false; + bool promptForOverwriteConfirmation = true; + + frmSetupStatusDisplay displayFrm = (frmSetupStatusDisplay)m_parentForm; + + int fileCountLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + int sourceFileLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + int destFileLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + m_copyProgressLineIndex = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + + foreach (SourceFile file in sourceFiles) + { + indentation = Common.getIndentation(1); + msg = indentation + "Files Copied: " + m_fileCopyCount.ToString() + " Files Created: " + m_fileCreatedCount.ToString(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 2; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "files created:"); + textProp.wordCount = 2; + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "files created:") + 2; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(msg, fileCountLineIndex, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + //textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = 0; + textProp.wordCount = 1; + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(255, 60, 0); + textProp.wordIndex = 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + tempTextPropList = new List(textPropList); + + sourcePath = file.SourcePath; + destPath = file.destPath; + + if (sourcePath.Length > 0 && !PathManip.PathContainsAtLeastOneFolder(sourcePath)) + sourcePath = PathManip.AddTrailingSlashToPath(sourcePath); + + if (!PathManip.PathContainsAtLeastOneFolder(destPath)) + destPath = PathManip.AddTrailingSlashToPath(destPath); + + string destFileName; + // get the actual path and filename letter casing + string sourceFilePathAndName = PathManip.GetProperFilePathCapitalization(Path.Combine(sourcePath, file.FileName)); + string sourceFileName = Path.GetFileName(sourceFilePathAndName); + string sourceFilePath = Path.GetDirectoryName(sourceFilePathAndName); + + // if the source file is to be save as a different at the destination + if (file.FileNameSaveAs.Length > 0) + destFileName = file.FileNameSaveAs; + else + destFileName = sourceFileName; + + indentation = Common.getIndentation(1); + if (file.SourcePath.Length > 0) + { + msg = indentation + "Copying " + StringManip.ShortenStringToSize(sourceFilePathAndName, 65); + msg2 = indentation + "To " + StringManip.ShortenStringToSize(Path.Combine(destPath, destFileName), 65); + } + else + msg = indentation + "Creating " + StringManip.ShortenStringToSize(Path.Combine(destPath, destFileName), 65); + + UpdateStatusDisplayAtLine(msg, sourceFileLineIndex, textPropList); + + if (msg2.Length > 0) + { + textPropList = new List(tempTextPropList); + UpdateStatusDisplayAtLine(msg2, destFileLineIndex, textPropList); + } + + if (file.individualOverwrite.Length != 0) + { + promptForOverwriteConfirmation = false; + if (String.Equals(file.individualOverwrite, "yes", StringComparison.OrdinalIgnoreCase) || String.Equals(file.individualOverwrite, "true", StringComparison.OrdinalIgnoreCase)) + { + overwriteDestinationFile = true; + } + else + overwriteDestinationFile = false; + } + + if (promptForOverwriteConfirmation && File.Exists(Path.Combine(destPath, destFileName))) + { + MessageBoxCustom.clsCustomButton button1 = new MessageBoxCustom.clsCustomButton("YES - This File", "YesOneTime"); + MessageBoxCustom.clsCustomButton button2 = new MessageBoxCustom.clsCustomButton("NO - This File", "NoOneTime"); + MessageBoxCustom.clsCustomButton button3 = new MessageBoxCustom.clsCustomButton("YES - All Files", "YesAlways"); + MessageBoxCustom.clsCustomButton button4 = new MessageBoxCustom.clsCustomButton("No - All Files", "NoAlways"); + + List options = new List() { button1, button2, button3, button4 }; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.CUSTOMQUESTION, options, + "File " + Path.Combine(destPath, destFileName) + "\nalready exists. Would you like to overwrite?", "Warning!!!", -1); + + if (String.Equals(msg, "YesOneTime", StringComparison.OrdinalIgnoreCase)) + { + overwriteDestinationFile = true; + } + else if (String.Equals(msg, "YesAlways", StringComparison.OrdinalIgnoreCase)) + { + overwriteDestinationFileAlways = true; + overwriteDestinationFile = true; + promptForOverwriteConfirmation = false; + } + else if (String.Equals(msg, "NoAlways", StringComparison.OrdinalIgnoreCase)) + { + promptForOverwriteConfirmation = false; + } + } + + if (m_fileCopyCount == 0 && m_fileCreatedCount == 0) + UpdateStatusDisplayAtLine(indentation + "Initializing. Please wait...", m_copyProgressLineIndex, textPropList); + + // if the file to be created already exists + if (file.SourcePath.Length == 0 && File.Exists(Path.Combine(destPath, destFileName))) + { + logMsg = "\n" + Common.getIndentation(2) + "Create " + Path.Combine(destPath, destFileName) + " - SKIPPED. File already exists at destination"; + } + else if (file.SourcePath.Length > 0 && File.Exists(Path.Combine(destPath, destFileName)) && !overwriteDestinationFile) + { + logMsg = "\n" + Common.getIndentation(2) + "Copy " + sourceFilePathAndName + " --> " + Path.Combine(destPath, destFileName) + " - SKIPPED. File already exists at destination"; + } + else + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(sourceFilePathAndName, @"^" + Regex.Escape(PathManip.RemoveTrailingSlashInPath(drive.Name)) + @".*", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !File.Exists(sourceFilePathAndName)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (file.cdLabel.Length > 0) + tempMsg += " labeled \"" + file.cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following file:\n" + sourceFilePathAndName + "\n\n Click OK to proceed"; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + + logMsg = "\n" + Common.getIndentation(2) + "Copy " + sourceFilePathAndName + " --> " + Path.Combine(destPath, destFileName) + " - FAILED"; + displayMsg = "\n" + indentation + "- FAILED. Unable to locate file: " + sourceFilePathAndName; + + setupSuccessful = false; + break; + } + } + + break; + } + } + + if (setupSuccessful) + { + if (FileManip.CopyFileWithProgress(sourceFilePath, sourceFileName, file.destPath, destFileName, + true, FileAttributes.Normal, + new FileManip.FileCopyProgressChangeDelegate(DownloadProgressHandler), downloadProgressTracker)) + { + indentation = Common.getIndentation(2); + if (file.SourcePath.Length > 0) + { + logMsg = "\n" + indentation + "Copy " + sourceFilePathAndName + " --> " + Path.Combine(destPath, destFileName) + " - SUCCESS"; + m_fileCopyCount++; + } + else + { + logMsg = "\n" + indentation + "Create " + Path.Combine(destPath, destFileName) + " - SUCCESS"; + m_fileCreatedCount++; + } + } + else + { + errMsg = downloadProgressTracker.errorMsg; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + + if (file.SourcePath.Length > 0) + { + logMsg = "\n" + Common.getIndentation(2) + "Copy " + sourceFilePathAndName + " --> " + Path.Combine(destPath, destFileName) + " - FAILED"; + displayMsg = "\n" + indentation + "- FAILED. Copying file failed. " + Regex.Replace(errMsg, @"\r\n", "", RegexOptions.IgnoreCase) + "\n" + indentation + "From: " + sourceFilePathAndName + "\n" + indentation + "To: " + Path.Combine(destPath, destFileName); + } + else + { + logMsg = "\n" + Common.getIndentation(2) + "Create " + Path.Combine(destPath, destFileName) + " - FAILED"; + displayMsg = "\n" + indentation + "- FAILED. Creating file failed. " + Regex.Replace(errMsg, @"\r\n", "", RegexOptions.IgnoreCase) + "\n" + indentation + "File to be created: " + Path.Combine(destPath, destFileName); + } + + setupSuccessful = false; + } + } + } + + // blank out the line + displayFrm.removeStatusDisplayLine(fileCountLineIndex, false); + + // blank out the line + displayFrm.removeStatusDisplayLine(m_copyProgressLineIndex, false); + + if (!overwriteDestinationFileAlways) + overwriteDestinationFile = false; + + if (!setupSuccessful) + { + break; + } + + UpdateStatusDisplayAndLogEvent("", logMsg, textPropList); + } + + for (int i = 1; i <= 4; i++) + { + // delete the very first line that is the start of the progress update + // all the lines below the first starting lines will get deleted too + displayFrm.removeStatusDisplayLine(fileCountLineIndex, true); + } + + if (!setupSuccessful) + { + UpdateStatusDisplayAndLogEvent(displayMsg, logMsg, textPropList); + } + + return setupSuccessful; + } + + ///=================================================================================== + /// ProcessXML2ndLevelNodes + ///=================================================================================== + /// + /// Process the child nodes of the 2nd level node + /// in the XML file. + /// + /// navigator object for traversing XML tree + /// + /// info about software package in source control + /// + /// file actions associated with source files + /// file name to be saved as at destination + /// backgroundworker + /// backgroundworker event arguments + /// true if processing node successfully, otherwise false + ///=================================================================================== + private bool ProcessXML2ndLevelNodes(XPathNavigator nav, string defaultStartingSourcePath) + { + bool setupSuccessful = true; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string msg, indentation = String.Empty; + string startingSourcePath = ""; + Match regexMatch; + + if (nav == null) + setupSuccessful = false; + + SourceFile sourceFile = new SourceFile(""); + + if (setupSuccessful) + { + do + { + string packageName = nav.GetAttribute("name", String.Empty); + + if (packageName.Length == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. Attribute \"name\" not found or has invalid value in node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 3; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Copying File Package " + packageName; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + + string customStartingSourcePath = nav.GetAttribute("startingsourcepath", string.Empty); + string startingDestPath = nav.GetAttribute("startingdestpath", string.Empty); + + // match macro defined in the value of they key, macro is in the form of {xxxxx} such as {user_desktop}, {user_temp_folder}, {cd_drive} + regexMatch = Regex.Match(customStartingSourcePath, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + // if rootpath is ., then we take the path of the XML package as the root path + if (string.Equals(customStartingSourcePath, ".")) + customStartingSourcePath = defaultStartingSourcePath; + else if (regexMatch.Success) + { + if (Common.pathContainsMacro(regexMatch.Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(regexMatch.Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(regexMatch.Groups[0].Value)) + { + if (resolvedPath.Length == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + regexMatch.Groups[0].Value + " macro was defined. But no CD drive is found in the system" + ". XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + + sourceFile.cdLabel = nav.GetAttribute("cdlabel", string.Empty); + } + + customStartingSourcePath = resolvedPath; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"startingsourcepath\" specifies an invalid macro in the path. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + if (setupSuccessful && customStartingSourcePath.Length > 0) + { + // if path is not absolute path + if (!Path.IsPathRooted(customStartingSourcePath) && !Regex.IsMatch(customStartingSourcePath, @"^\{([^\{\}]+)\}", RegexOptions.IgnoreCase)) + customStartingSourcePath = Path.GetFullPath(Path.Combine(defaultStartingSourcePath, customStartingSourcePath)); + + if (!Hardware.IsCdDrive(customStartingSourcePath) && !Directory.Exists(customStartingSourcePath)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"startingsourcepath\" specifies a path that does not exist. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + // match macro defined in the value of they key, macro is in the form of {xxxxx} such as {user_desktop}, {user_temp_folder}, {cd_drive} + regexMatch = Regex.Match(startingDestPath, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + if (regexMatch.Success) + { + if (Common.pathContainsMacro(regexMatch.Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(regexMatch.Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(regexMatch.Groups[0].Value)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + regexMatch.Groups[0].Value + " macro is not allowed to be specified for attribute \"startingdestpath\"" + ". XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + + startingDestPath = resolvedPath; + + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"startingdestpath\" specifies an invalid macro in the path. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + // if path is not absolute path + else if (startingDestPath.Length > 0 && !Path.IsPathRooted(startingDestPath)) + startingDestPath = Path.GetFullPath(Path.Combine(defaultStartingSourcePath, startingDestPath)); + + if (!Directory.Exists(startingDestPath)) + { + if (startingDestPath.Length > 0) + { + if (!PathManip.PathIsWritable(startingDestPath)) + setupSuccessful = false; + } + else + setupSuccessful = false; + + if (!setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + if (startingDestPath.Length == 0) + msg = "\n" + indentation + "- FAILED. Attribute \"startingdestpath\" is missing or has no value. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + else + msg = "\n" + indentation + "- FAILED. Attribute \"startingdestpath\" specifies a path that is invalid or not accessible. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + break; + } + } + + if (customStartingSourcePath.Length > 0) + startingSourcePath = customStartingSourcePath; + + // move to 3rd level node + if (nav.MoveToFirstChild()) + { + m_fileCreatedCount = 0; + m_fileCopyCount = 0; + if (!ProcessXML3rdLevelNodes(nav, defaultStartingSourcePath, startingSourcePath, startingDestPath, sourceFile)) + setupSuccessful = false; + + // move back to 2nd level node + nav.MoveToParent(); + } + + if (setupSuccessful) + { + if (!m_filePackageProcessedSuccessful) + m_filePackageProcessedSuccessful = true; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + + if (m_fileCreatedCount == 0 && m_fileCopyCount == 0) + { + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + msg = " - SKIPPED. (Files Created: " + m_fileCreatedCount + " ) " + "(Files Copied: " + m_fileCopyCount + " ) "; + } + else + { + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + msg = " - SUCCESS. (Files Created: " + m_fileCreatedCount + " ) " + "(Files Copied: " + m_fileCopyCount + " ) "; + } + textPropList.Add(textProp); + UpdateStatusDisplayAndLogEvent(msg, "", textPropList); + + msg = "\n" + Common.getIndentation(2) + "Total Files Created: " + m_fileCreatedCount + " | Total Files Copied: " + m_fileCopyCount; + UpdateStatusDisplayAndLogEvent("", msg, textPropList); + } + + if (!setupSuccessful) + break; + } + + } while (nav.MoveToNext()); // move to next software package + } + + return setupSuccessful; + } + + ///=================================================================================== + /// ProcessXML3rdLevelNodes + ///=================================================================================== + /// + /// Process the child nodes of the 3rd level node + /// in the XML file. + /// + /// navigator object for traversing XML tree + /// + /// + /// + /// true if processing node successfully, otherwise false + ///=================================================================================== + private bool ProcessXML3rdLevelNodes(XPathNavigator nav, string defaultStartingSourcePath, string startingSourcePath, string startingDestPath, SourceFile sourceFile) + { + bool setupSuccessful = true; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string msg, indentation = String.Empty, errMsg = "", tempStr = ""; + + Match regExMatch; + + eCopyType copyType = eCopyType.FILES; + + do + { + sourceFiles.Clear(); + sourceFile.SourcePath = ""; + sourceFile.destPath = ""; + + if (string.Equals(nav.Name, "filescopy", StringComparison.CurrentCultureIgnoreCase)) + { + copyType = eCopyType.FILES; + } + else if (string.Equals(nav.Name, "folderscopy", StringComparison.CurrentCultureIgnoreCase)) + { + copyType = eCopyType.FOLDERS; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Invalid tag name specified. XML Node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + + // do not force sourcedir to be specified to allow user to be able to create a new file at the destination + sourceFile.SourcePath = nav.GetAttribute("sourcedir", string.Empty); + sourceFile.SourcePath = sourceFile.SourcePath.Trim(' '); + + // match macro defined in the value of they key, macro is in the form of {xxxxx} such as {user_desktop}, {user_temp_folder}, {cd_drive} + regExMatch = Regex.Match(sourceFile.SourcePath, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + if (string.Equals(sourceFile.SourcePath, ".")) + { + if (startingSourcePath.Length > 0) + sourceFile.SourcePath = startingSourcePath; + else + sourceFile.SourcePath = defaultStartingSourcePath; + } + else if (regExMatch.Success) + { + if (Common.pathContainsMacro(regExMatch.Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(regExMatch.Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(regExMatch.Groups[0].Value)) + { + if (resolvedPath.Length == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + regExMatch.Groups[0].Value + " macro was defined. But no CD drive is found in the system" + ". XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + sourceFile.SourcePath = resolvedPath; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"sourcedir\" specifies an invalid macro in the path. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + tempStr = nav.GetAttribute("cdlabel", string.Empty); + + if (tempStr.Length > 0) + { + sourceFile.cdLabel = tempStr; + } + + if (sourceFile.SourcePath.Length > 0) + { + // if path is not absolute path + if (!Path.IsPathRooted(sourceFile.SourcePath)) + { + if (startingSourcePath.Length > 0) + { + if (!PathManip.PathContainsAtLeastOneFolder(startingSourcePath)) + startingSourcePath = PathManip.AddTrailingSlashToPath(startingSourcePath); + + sourceFile.SourcePath = Path.GetFullPath(Path.Combine(startingSourcePath, sourceFile.SourcePath)); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"sourcedir\" cannot specify a relative path here since there's no absolute path defined in the parent node. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + } + + if (setupSuccessful && sourceFile.SourcePath.Length > 0 && !Hardware.IsCdDrive(sourceFile.SourcePath) && !Directory.Exists(sourceFile.SourcePath)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + + // the directory exists but the account being used by application is denied access + if (PathManip.DirectoryVisible(sourceFile.SourcePath, ref errMsg)) + { + msg = "\n" + indentation + "- FAILED. " + errMsg + "."; + + if (PathManip.PathIsNetworkPath(sourceFile.SourcePath)) + { + msg += "\n" + indentation + "This error is caused by the fact that this application is run as an account that does not have access privileges to the network path. " + + "\n" + indentation + "Run this application using an account that is allowed by the network path you're trying to access. XML Node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + } + } + else + { + msg = "\n" + indentation + "- FAILED. Attribute \"sourcedir\" specifies a relative/absolute path that does not exist in file system. XML Node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + break; + + } + + sourceFile.destPath = nav.GetAttribute("destdir", string.Empty).TrimEnd('\\'); + sourceFile.destPath = sourceFile.destPath.Trim(' '); + + // match macro defined in the value of they key, macro is in the form of {xxxxx} such as {user_desktop}, {user_temp_folder}, {cd_drive} + regExMatch = Regex.Match(sourceFile.destPath, @"^\{([^\{\}]+)\}.*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (Common.pathContainsMacro(regExMatch.Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(regExMatch.Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(regExMatch.Groups[0].Value)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + regExMatch.Groups[0].Value + " macro is not allowed to be specified for attribute \"destdir\"" + ". XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + + sourceFile.destPath = resolvedPath; + + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"destdir\" specifies an invalid macro in the path. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + else if (string.Equals(sourceFile.destPath, ".")) + { + if (startingDestPath.Length > 0) + sourceFile.destPath = startingDestPath; + else + sourceFile.destPath = defaultStartingSourcePath; + } + + if (sourceFile.destPath.Length > 0) + { + // if path is not absolute path + if (!Path.IsPathRooted(sourceFile.destPath)) + { + if (startingDestPath.Length > 0) + { + string absPathFiltered = sourceFile.destPath; + // remove unwated characters at beginning of relative path + regExMatch = Regex.Match(sourceFile.destPath, @"^[\\\.]+(.+)", RegexOptions.IgnoreCase); + if (regExMatch.Success) + absPathFiltered = regExMatch.Groups[1].Value; + + if (!PathManip.PathContainsAtLeastOneFolder(startingDestPath)) + startingDestPath = PathManip.AddTrailingSlashToPath(startingDestPath); + + sourceFile.destPath = Path.Combine(startingDestPath, absPathFiltered); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"destdir\" cannot specify a relative path here since there's no absolute path defined in the parent node. XML node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Attribute \"destdir\" is missing or has no value in node " + nav.OuterXml.Substring(0, nav.OuterXml.IndexOf(">") + 1) + " on line " + ((IXmlLineInfo)nav).LineNumber.ToString(); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + + sourceFile.masterOverwrite = nav.GetAttribute("overwriteallfiles", string.Empty).TrimEnd('\\'); + sourceFile.Recursive = nav.GetAttribute("recursive", string.Empty).TrimEnd('\\'); + + if (!ProcessXML4thLevelNodes(nav, sourceFile, copyType)) + setupSuccessful = false; + + // after processing a package, perform file transfer + if (setupSuccessful && sourceFiles.Count > 0) + { + setupSuccessful = processFilePackage(); + } + + } while (nav.MoveToNext()); + + return setupSuccessful; + } + + ///=================================================================================== + /// ProcessXML4thLevelNodes + ///=================================================================================== + /// + /// Process the child nodes of the 4th level node + /// in the XML file. Get all the files to be built + /// + /// navigator object for traversing XML tree + /// + /// true if processing node successfully, otherwise false + ///=================================================================================== + private bool ProcessXML4thLevelNodes(XPathNavigator nav, SourceFile sourceFile, eCopyType copyType) + { + List fileActions = new List(); + List filesSaveAs = new List(); + List listOverwriteFiles = new List(); + string fileInclude = "", fileExclude = ""; + string[,] fileAction = new string[1, 2]; + string[,] fileSaveAs = new string[1, 2]; + string[,] overwriteFiles = new string[1, 2]; + string msg = "", tempMsg = ""; + bool setupSuccessful = true; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string indentation = String.Empty; + + if (nav.MoveToFirstChild()) + { + // extract all the files and actions for files + do + { + fileAction[0, 0] = ""; + fileAction[0, 1] = ""; + + fileSaveAs[0, 0] = ""; + fileSaveAs[0, 1] = ""; + + overwriteFiles[0, 0] = ""; + overwriteFiles[0, 1] = ""; + + if (string.Equals(nav.Name, "fileinclude", StringComparison.CurrentCultureIgnoreCase)) + { + if (nav.Value.Length > 0) + { + if (fileInclude == string.Empty) + fileInclude = nav.Value.Trim(); + else if (nav.Value.Trim() == "*.*") + fileInclude = nav.Value.Trim(); + else if (fileInclude != "*.*") + fileInclude += "," + nav.Value.Trim(); + + // check to see if this file needs to be renamed at the destination + overwriteFiles[0, 0] = nav.GetAttribute("overwritefile", string.Empty); + + if (overwriteFiles[0, 0].Length > 0) + { + // this is the file + overwriteFiles[0, 1] = nav.Value; + } + + if (overwriteFiles[0, 0] != string.Empty && overwriteFiles[0, 1] != string.Empty) + { + listOverwriteFiles.Add(new string[,] { { overwriteFiles[0, 0], overwriteFiles[0, 1] } }); + } + + if (fileInclude != "*.*") + { + // check to see if this file needs to be renamed at the destination + fileSaveAs[0, 0] = nav.GetAttribute("saveas", string.Empty); + + if (fileSaveAs[0, 0].Length > 0) + { + // this is the file + fileSaveAs[0, 1] = nav.Value; + } + } + + if (fileSaveAs[0, 0] != string.Empty && fileSaveAs[0, 1] != string.Empty && sourceFile.SourcePath.Length > 0) + filesSaveAs.Add(new string[,] { { fileSaveAs[0, 0], fileSaveAs[0, 1] } }); + + // as long as the file specified doesn't contain wildcard + if (!Regex.IsMatch(nav.Value, @"\*", RegexOptions.IgnoreCase)) + { + // check if there are any actions specified for this file + string attr = nav.GetAttribute("actions", string.Empty); + + if (attr.Length > 0) + { + string[] actions = attr.Split(','); + + if (actions.Length > 0) + { + foreach (string action in actions) + fileActions.Add(new string[,] { { action, nav.Value } }); + } + } + } + } + } + else if (string.Equals(nav.Name, "fileexclude", StringComparison.CurrentCultureIgnoreCase)) + { + if (nav.Value.Length > 0) + { + if (fileExclude == string.Empty) + fileExclude += nav.Value; + else + fileExclude += "," + nav.Value; + } + } + } while (nav.MoveToNext()); + + nav.MoveToParent(); + } + + Match regExMatch; + + string[] filesToExclude = new string[] { }; + + if (fileExclude.Length > 0) + { + List paths = new List(); + string[] files = fileExclude.Split(','); + string[] files2; + + foreach (string file in files) + { + regExMatch = Regex.Match(file, @"\*\.[^\*,]+"); + if (regExMatch.Success) + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(sourceFile.SourcePath, @"^" + Regex.Escape(PathManip.RemoveTrailingSlashInPath(drive.Name)) + @".*", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !Directory.Exists(sourceFile.SourcePath)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (sourceFile.cdLabel.Length > 0) + tempMsg += " labeled \"" + sourceFile.cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following path:\n" + sourceFile.SourcePath + "\n\n Click OK to proceed"; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Unable to locate path: " + sourceFile.SourcePath; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + break; + } + } + + if (setupSuccessful) + { + if (copyType == eCopyType.FILES) + { + if (String.Equals(sourceFile.Recursive, "yes", StringComparison.OrdinalIgnoreCase) || String.Equals(sourceFile.Recursive, "true", StringComparison.OrdinalIgnoreCase)) + { + files2 = Directory.GetFiles(sourceFile.SourcePath, regExMatch.Value, SearchOption.AllDirectories); + } + else + files2 = Directory.GetFiles(sourceFile.SourcePath, regExMatch.Value, SearchOption.TopDirectoryOnly); + } + else + files2 = Directory.GetFiles(sourceFile.SourcePath, regExMatch.Value, SearchOption.AllDirectories); + + paths.AddRange(files2.ToList()); + } + } + else + { + paths.Add(sourceFile.SourcePath + @"\" + file); + } + } + + filesToExclude = paths.ToArray(); + } + + string[] filesToInclude = new string[] { }; + + if (setupSuccessful) + { + // look for wildcard search for files + regExMatch = Regex.Match(fileInclude, @"^\*\.\*$"); + + // if file to be copied is defined as *.*, then we want to include all files in the source directory + if (regExMatch.Success && sourceFile.SourcePath.Length > 0) + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(sourceFile.SourcePath, @"^" + Regex.Escape(PathManip.RemoveTrailingSlashInPath(drive.Name)) + @".*", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !Directory.Exists(sourceFile.SourcePath)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (sourceFile.cdLabel.Length > 0) + tempMsg += " labeled \"" + sourceFile.cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following path:\n" + sourceFile.SourcePath + "\n\n Click OK to proceed"; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Unable to locate path: " + sourceFile.SourcePath; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + break; + } + } + + if (setupSuccessful) + { + if (copyType == eCopyType.FOLDERS) + { + filesToInclude = Directory.GetFiles(sourceFile.SourcePath, fileInclude, SearchOption.AllDirectories); + } + else + { + if (String.Equals(sourceFile.Recursive, "yes", StringComparison.OrdinalIgnoreCase) || String.Equals(sourceFile.Recursive, "true", StringComparison.OrdinalIgnoreCase)) + { + filesToInclude = Directory.GetFiles(sourceFile.SourcePath, fileInclude, SearchOption.AllDirectories); + } + else + filesToInclude = Directory.GetFiles(sourceFile.SourcePath, fileInclude, SearchOption.TopDirectoryOnly); + + // save overwrite file flag + foreach (string[,] overwriteFlag in listOverwriteFiles) + { + // if there's an overwrite flag associated with this file + if (string.Equals(overwriteFlag[0, 1], fileInclude, StringComparison.CurrentCultureIgnoreCase)) + { + sourceFile.masterOverwrite = overwriteFlag[0, 0]; + break; + } + } + } + } + } + else if (fileInclude.Length > 0) // get the individual files specified in the XML file + { + List paths = new List(); + string[] files = fileInclude.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + string[] files2; + foreach (string file in files) + { + regExMatch = Regex.Match(file, @"\*\.[^\*,]+"); + if (regExMatch.Success) + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(sourceFile.SourcePath, @"^" + Regex.Escape(PathManip.RemoveTrailingSlashInPath(drive.Name)) + @".*", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !Directory.Exists(sourceFile.SourcePath)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (sourceFile.cdLabel.Length > 0) + tempMsg += " labeled \"" + sourceFile.cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following path:\n" + sourceFile.SourcePath + "\n\n Click OK to proceed"; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Unable to locate path: " + sourceFile.SourcePath; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + break; + } + } + + if (setupSuccessful) + { + if (String.Equals(sourceFile.Recursive, "yes", StringComparison.OrdinalIgnoreCase) || String.Equals(sourceFile.Recursive, "true", StringComparison.OrdinalIgnoreCase)) + { + files2 = Directory.GetFiles(sourceFile.SourcePath, regExMatch.Value, SearchOption.AllDirectories); + } + else + files2 = Directory.GetFiles(sourceFile.SourcePath, regExMatch.Value, SearchOption.TopDirectoryOnly); + + if (files2.Length > 0) + { + string overwriteFlag = ""; + // save overwrite file flag + foreach (string[,] overwriteFlag2 in listOverwriteFiles) + { + // if there's an overwrite flag associated with this file + if (string.Equals(overwriteFlag2[0, 1], file, StringComparison.CurrentCultureIgnoreCase)) + { + overwriteFlag = overwriteFlag2[0, 0]; + break; + } + } + + if (overwriteFlag.Length > 0) + { + for (int i = 0; i < files2.Length; i++) + { + files2[i] += "," + overwriteFlag; + } + } + } + + paths.AddRange(files2.ToList()); + } + } + else + { + if (sourceFile.SourcePath.Length > 0) + paths.Add(sourceFile.SourcePath + @"\" + file); + else + paths.Add(file); + } + } + + filesToInclude = paths.ToArray(); + } + } + + if (setupSuccessful) + { + if (filesToInclude.Length == 0 && copyType == eCopyType.FOLDERS) + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(sourceFile.SourcePath, @"^" + Regex.Escape(PathManip.RemoveTrailingSlashInPath(drive.Name)) + @".*", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !Directory.Exists(sourceFile.SourcePath)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (sourceFile.cdLabel.Length > 0) + tempMsg += " labeled \"" + sourceFile.cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following path:\n" + sourceFile.SourcePath + "\n\n Click OK to proceed"; + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg, "cancel", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. Unable to locate path: " + sourceFile.SourcePath; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + break; + } + } + + break; + } + } + + if (setupSuccessful) + filesToInclude = Directory.GetFiles(sourceFile.SourcePath, "*.*", SearchOption.AllDirectories); + } + } + + if (setupSuccessful) + { + // remove files that are excluded from build + if (filesToExclude.Length > 0 && filesToInclude.Length > 0 && sourceFile.SourcePath.Length > 0) + { + List filesToIncludeList = filesToInclude.ToList(); + List filesToExcludeList = filesToExclude.ToList(); + + foreach (string excludePath in filesToExcludeList) + { + string pathToRemove = ""; + foreach (string includePath in filesToIncludeList) + { + if (Regex.IsMatch(includePath, Regex.Escape(excludePath) + @"(,.+)*", RegexOptions.IgnoreCase)) + { + pathToRemove = includePath; + break; + } + } + + if (pathToRemove.Length > 0) + { + filesToIncludeList.Remove(pathToRemove); + } + } + + filesToInclude = filesToIncludeList.ToArray(); + } + } + + string baseSourceFolder = sourceFile.SourcePath; + string baseDestFolder = sourceFile.destPath; + + if (setupSuccessful) + { + // for each file to be copied, determine if there's an action associated with it + // or that it needs to be renamed, etc + foreach (string file in filesToInclude) + { + string[] fileParts = file.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + sourceFile.FileName = Path.GetFileName(fileParts[0]); + sourceFile.FileNameSaveAs = ""; + sourceFile.Actions = new List(); + sourceFile.individualOverwrite = ""; + + if (sourceFile.masterOverwrite.Length > 0) + sourceFile.individualOverwrite = sourceFile.masterOverwrite; + + if (fileParts.Length == 1) + { + // save overwrite file flag + foreach (string[,] overwriteFlag in listOverwriteFiles) + { + // if there's an overwrite flag associated with this file + if (string.Equals(overwriteFlag[0, 1], sourceFile.FileName, StringComparison.CurrentCultureIgnoreCase)) + { + sourceFile.individualOverwrite = overwriteFlag[0, 0]; + break; + } + } + } + else + { + sourceFile.individualOverwrite = fileParts[1]; + } + + // save all the actions needed to be perform for this file + foreach (string[,] action in fileActions) + { + // if there's an action associated with this file + if (string.Equals(action[0, 1], sourceFile.FileName, StringComparison.CurrentCultureIgnoreCase)) + { + //if (string.Equals(action[0, 0], eFileAction.CreateSWBuildIDEntries.ToString(), StringComparison.CurrentCultureIgnoreCase)) + // sourceFile.Actions.Add(eFileAction.CreateSWBuildIDEntries); + //else if (string.Equals(action[0, 0], eFileAction.BuildProjectUsingVS2010Compiler.ToString(), StringComparison.CurrentCultureIgnoreCase)) + // sourceFile.Actions.Add(eFileAction.BuildProjectUsingVS2010Compiler); + //else if (string.Equals(action[0, 0], eFileAction.BuildProjectUsingVS2009Compiler.ToString(), StringComparison.CurrentCultureIgnoreCase)) + // sourceFile.Actions.Add(eFileAction.BuildProjectUsingVS2009Compiler); + //else if (string.Equals(action[0, 0], eFileAction.BuildProjectInDebug.ToString(), StringComparison.CurrentCultureIgnoreCase)) + // sourceFile.Actions.Add(eFileAction.BuildProjectInDebug); + //else if (string.Equals(action[0, 0], eFileAction.BuildProjectInRelease.ToString(), StringComparison.CurrentCultureIgnoreCase)) + // sourceFile.Actions.Add(eFileAction.BuildProjectInRelease); + } + } + + foreach (string[,] fileRename in filesSaveAs) + { + // if a source file is to be renamed at the destination + if (string.Equals(fileRename[0, 1], sourceFile.FileName, StringComparison.CurrentCultureIgnoreCase) && sourceFile.SourcePath.Length > 0) + { + sourceFile.FileNameSaveAs = fileRename[0, 0]; + break; + } + else if (Regex.IsMatch(fileRename[0, 1], @"^\*\.\w+$", RegexOptions.IgnoreCase)) // if the file to be renamed has a wildcard in it + { + regExMatch = Regex.Match(fileRename[0, 1], @".+(\.\w+)$", RegexOptions.IgnoreCase); + + if (regExMatch.Success && regExMatch.Groups.Count > 1) + { + string pattern = Regex.Escape(regExMatch.Groups[1].Value) + @"$"; + + if (Regex.IsMatch(sourceFile.FileName, pattern, RegexOptions.IgnoreCase)) + { + sourceFile.FileNameSaveAs = fileRename[0, 0]; + break; + } + } + } + } + + string fileSourcePath = Path.GetDirectoryName(file); + string regexPattern = Regex.Escape(baseSourceFolder) + @"\\(.+)"; + if (copyType == eCopyType.FOLDERS) + { + regExMatch = Regex.Match(fileSourcePath, regexPattern, RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + sourceFile.SourcePath = fileSourcePath; + sourceFile.destPath = baseDestFolder + @"\" + regExMatch.Groups[1].Value; + } + } + else + sourceFile.SourcePath = fileSourcePath; + + sourceFiles.Add(sourceFile); + } + } + + return setupSuccessful; + } + + bool verifyFilePackagesInfo() + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg; + + List textPropList = new List(); + + for (int i = 0; i < fileTransferPackages.Count; i++) + { + if (fileTransferPackages[i].iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + fileTransferPackages[i].iniSectionName + + "\n" + indentation + "Key: " + fileTransferPackages[i].iniKeyName + + "\n" + indentation + "Value: " + fileTransferPackages[i].iniValue + + "\n" + indentation + "Error Description: The value is missing for the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + break; + } + else + { + iniVal = fileTransferPackages[i]; + iniVal.iniValue = Path.GetFullPath(fileTransferPackages[i].iniValue); + + fileTransferPackages[i] = iniVal; + + if (!File.Exists(iniVal.iniValue)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + fileTransferPackages[i].iniSectionName + + "\n" + indentation + "Key: " + fileTransferPackages[i].iniKeyName + + "\n" + indentation + "Value: " + fileTransferPackages[i].iniValue + + "\n" + indentation + "Error Description: The value indicates an invalid path in the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + break; + } + } + } + + return setupSuccessful; + } + + public struct SourceFile + { + public string FileName + { + get; + set; + } + + public string FileNameSaveAs + { + get; + set; + } + + // specify whether to include files recursively + public string Recursive + { + get; + set; + } + + // specify that all files will be overwritten + public string masterOverwrite + { + get; + set; + } + + // specify that a particular file will be overwritten + public string individualOverwrite + { + get; + set; + } + + public string SourcePath + { + get; + set; + } + + public string destPath + { + get; + set; + } + + public string cdLabel + { + get; + set; + } + + public string SoftwareProduct + { + get; + set; + } + + public List Actions + { + get; + set; + } + + public SourceFile(string str) + : this() + { + FileName = ""; + FileNameSaveAs = ""; + SourcePath = ""; + destPath = ""; + cdLabel = ""; + SoftwareProduct = ""; + Recursive = ""; + masterOverwrite = ""; + individualOverwrite = ""; + } + + } + } +} diff --git a/AllPurposeAutoSetup/FoldersManager.cs b/AllPurposeAutoSetup/FoldersManager.cs new file mode 100644 index 0000000..54f2874 --- /dev/null +++ b/AllPurposeAutoSetup/FoldersManager.cs @@ -0,0 +1,501 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.Windows.Misc; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class FoldersManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public List> dirsToCreate = new List>(); + + // this dictionary stores path and its associated share names + // it would look like this: + // [ path1 ] -> List[sharenames accounts_to_share] + // [ path2 ] -> List[sharenames accounts_to_share] + public Dictionary, List>> pathAndShareNames = new Dictionary, List>>(); + + Form m_parentForm; + + public FoldersManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool shareFolders(string sectionName) + { + string indentation = String.Empty; + bool setupSuccessful = true; + string msg, errorMsg = ""; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Configuring network shares=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + pathAndShareNames.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(path\d+)$", @"(path\d+)[^\d].+$", pathAndShareNames); + + setupSuccessful = verifyNetworkSharesInfo(); + + if (setupSuccessful) + { + if (pathAndShareNames.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to share"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + foreach (KeyValuePair, List>> entry in pathAndShareNames) + { + int autoShareNameKeyIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, @"auto-generated", RegexOptions.IgnoreCase)); + int shareNameKeyIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, @"path\d+_additional.+", RegexOptions.IgnoreCase)); + int allowedAccountKeyIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, @"path\d+_allowed.+", RegexOptions.IgnoreCase)); + + List accounts = new List(); + List shareNames = new List(); + + if (allowedAccountKeyIndex >= 0) + { + accounts = new List(entry.Value[allowedAccountKeyIndex].iniValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)); + } + + if (accounts.Count == 0) + { + accounts.Add("Everyone"); + } + + if (shareNameKeyIndex >= 0) + { + shareNames = new List(entry.Value[shareNameKeyIndex].iniValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)); + } + else if (autoShareNameKeyIndex >= 0) + { + shareNames = new List(entry.Value[autoShareNameKeyIndex].iniValue.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)); + } + + foreach (string name in shareNames) + { + string nameFormatted = name.Trim(); + + if (nameFormatted.Length == 1) + nameFormatted = nameFormatted.ToUpper(); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Sharing " + entry.Key.iniValue + " as " + nameFormatted; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "sharing") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "as") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + if (Directory.Exists("\\\\" + Environment.MachineName + '\\' + nameFormatted)) + { + msg += " - SKIPPED. Share name already exists"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "as") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "- skipped.") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + setupSuccessful = NetworkSharing.EnableNetworkFolderSharing(entry.Key.iniValue, nameFormatted, "", ref errorMsg); + + if (!setupSuccessful) + { + msg += " - FAILED. " + errorMsg; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "as") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "- failed.") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "as") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "- success.") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + foreach (string account in accounts) + { + string accountFormatted = account.Trim(); + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Giving account " + accountFormatted + " Full Permission to network share " + nameFormatted; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "giving account") + 2; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "full permission") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = NetworkSharing.addAccountToNetworkShare(entry.Key.iniValue, nameFormatted, accountFormatted, "", ref errorMsg); + + if (!setupSuccessful) + { + msg += " - FAILED. " + errorMsg; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "network share") + 2; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "- failed.") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "network share") + 2; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg, "- success.") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (!setupSuccessful) + break; + } + + if (!setupSuccessful) + break; + } + } + } + return setupSuccessful; + } + + bool verifyNetworkSharesInfo() + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg, str; + string[] splitStrings; + + Dictionary, List>> tempOneToManyDict = new Dictionary, List>>(); + List textPropList = new List(); + + // for every folder to be shared, extract the folder name and use it as a share name + foreach (KeyValuePair, List>> entry in pathAndShareNames) + { + int shareNameKeyIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, @"path\d+_additional.+", RegexOptions.IgnoreCase)); + + str = PathManip.RemoveTrailingSlashInPath(entry.Key.iniValue); + splitStrings = str.Split(new string[] { "\\", "/", ":" }, StringSplitOptions.RemoveEmptyEntries); + + // get the name of folder to be shared + if (splitStrings.Length > 0 && splitStrings[splitStrings.Length - 1].Length > 0) + { + if (!tempOneToManyDict.ContainsKey(entry.Key)) + { + tempOneToManyDict[entry.Key] = new List>(pathAndShareNames[entry.Key]); + } + + if (shareNameKeyIndex >= 0 && tempOneToManyDict[entry.Key][shareNameKeyIndex].iniValue.Length == 0) + { + tempOneToManyDict[entry.Key].RemoveAt(shareNameKeyIndex); + shareNameKeyIndex = -1; + } + + if (shareNameKeyIndex < 0) + { + // get the folder name of the path and save it as default share name + iniVal.iniSectionName = "Auto-Generated"; + iniVal.iniKeyName = "Auto-Generated-Share-Name"; + iniVal.iniValue = splitStrings[splitStrings.Length - 1]; + + // add default share name to path + tempOneToManyDict[entry.Key].Add(iniVal); + } + else + { + iniVal = tempOneToManyDict[entry.Key][shareNameKeyIndex]; + iniVal.iniValue += ", " + splitStrings[splitStrings.Length - 1]; + tempOneToManyDict[entry.Key][shareNameKeyIndex] = iniVal; + } + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Key: " + entry.Key.iniKeyName + + "\n" + indentation + "Value: " + entry.Key.iniValue + + "\n" + indentation + "Error Description: The value above is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + + pathAndShareNames = new Dictionary, List>>(tempOneToManyDict); + + if (setupSuccessful) + pathAndShareNames = new Dictionary, List>>(tempOneToManyDict); + + return setupSuccessful; + } + + public bool createDirectories(string sectionName) + { + bool setupSuccessful = true; + + DirectoryInfo di; + string msg, indentation; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + + textPropList.Add(textProp); + msg = "\n\n-=Creating Directories=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + dirsToCreate.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, dirsToCreate); + + if (setupSuccessful) + { + if (dirsToCreate.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing create"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + foreach (ConfigFileManager.Ini_KeyValue dir in dirsToCreate) + { + di = new DirectoryInfo(Path.GetFullPath(dir.iniValue)); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + di.ToString(); + // Create the directory only if it does not already exist. + if (di.Exists == false) + { + try + { + di.Create(); + + msg += " - SUCCESS"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS"); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + } + else + { + msg += " - SKIPPED. ( Directory already exists )"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (!setupSuccessful) + break; + } + } + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/GutsConfigFileManager.cs b/AllPurposeAutoSetup/GutsConfigFileManager.cs new file mode 100644 index 0000000..7ae1ccc --- /dev/null +++ b/AllPurposeAutoSetup/GutsConfigFileManager.cs @@ -0,0 +1,448 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class GutsConfigFileManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + // dictionary that stores key value pair for each entry in the GUTS config file + public List> gutsConfigEntries = new List>(); + + public ConfigFileManager.Ini_KeyValue sm3seekerConfigFile = new ConfigFileManager.Ini_KeyValue(""); + public ConfigFileManager.Ini_KeyValue gutsBinariesLocation = new ConfigFileManager.Ini_KeyValue(""); + + Form m_parentForm; + + public GutsConfigFileManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool processGutsConfigFile(string sectionName) + { + bool setupSuccessful = true; + string msg, errMsg = String.Empty, sourceFile, destFile = ""; + string indentation = String.Empty; + bool performFileCopying = true; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Processing GUTS Config File=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + gutsConfigEntries.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, gutsConfigEntries); + + readGutsInfo(); + + setupSuccessful = verifyConfigInfo(); + + if (setupSuccessful) + { + + destFile = PathManip.RemoveTrailingSlashInPath(gutsBinariesLocation.iniValue) + "\\Sm3Seeker.cfg"; + + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Copying " + Path.GetFileName(sm3seekerConfigFile.iniValue); + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + performFileCopying = true; + + sourceFile = sm3seekerConfigFile.iniValue; + sourceFile = PathManip.GetProperFilePathCapitalization(sourceFile); + + if (!File.Exists(sourceFile)) + { + msg = " - FAILED. File " + sourceFile + " not found"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + } + + if (File.Exists(destFile) && setupSuccessful) + { + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "File " + destFile + " already exists.\n\n Would you like to overwrite it?", "Info", -1); + + if (String.Equals(msg, "no", StringComparison.OrdinalIgnoreCase)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.USER_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- SKIPPED by user."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + performFileCopying = false; + } + } + + if (setupSuccessful && performFileCopying) + { + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- From: " + sourceFile; + msg += "\n" + indentation + "- To: " + destFile; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "From:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "To:"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = FileManip.CopyFile(Path.GetDirectoryName(sourceFile), sourceFile, Path.GetDirectoryName(destFile), destFile, true, FileAttributes.Normal, ref errMsg); + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- SUCCESS."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set file to read-write access + if (FileManip.SetFileAttributeToReadAndWrite(destFile, ref errMsg)) + { + if (gutsConfigEntries.Count > 0) + { + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 2; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Modifying file " + destFile; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + string delimiter = "[,]"; + + // first we have to determine the correct keys based on the generic key provided in the INI file + // and add these dynamic keys to the existing dictionary of all the correct keys + foreach (ConfigFileManager.Ini_KeyValue configEntry in gutsConfigEntries) + { + List triplet = new List(configEntry.iniValue.Split(new string[] { delimiter }, StringSplitOptions.RemoveEmptyEntries)); + + if (triplet.Count > 0) + triplet[0] = triplet[0].Trim(); + + if (triplet.Count > 1) + triplet[1] = triplet[1].Trim(); + + if (triplet.Count > 2) + triplet[2] = triplet[2].Trim(); + + // section, key and value exist + if (triplet.Count == 3 && triplet[0].Length > 0 && triplet[1].Length > 0 && triplet[2].Length > 0) + { + setupSuccessful = modifyGutsConfigFile(destFile, triplet[0], triplet[1], triplet[2]); + + if (!setupSuccessful) + break; + } + } + } + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + errMsg; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + } + return setupSuccessful; + } + + public bool modifyGutsConfigFile(string configFile, string configSectionName, string configKey, string configValue) + { + bool setupSuccessful = true; + string msg, errMsg = String.Empty; + + string indentation = String.Empty; + Dictionary gutsSourceFileToDestFile = new Dictionary(); + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string pattern = @"(section +" + configSectionName + @"(?:(?!\nsection).)*\n" + configKey + @" +)[^;\r\n]+"; + string replacement = "${1}" + configValue; + + setupSuccessful = FileManip.ReplaceTextInFile(configFile, pattern, replacement, ref errMsg); + + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "Setting " + configKey + "=" + configValue + " in section " + configSectionName; + if (setupSuccessful) + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + msg += " - FAILED."; + if (errMsg.Length > 0) + msg += " " + errMsg; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + return setupSuccessful; + + } + + public void readGutsInfo() + { + string[] keyDataPair; + Dictionary keyAndValuePair = new Dictionary(); + + string sectionName; + + string[] sectionData; + + sectionName = ConfigFileManager.enum_INI_SECTION_NAMES.GUTS_Info.ToString(); + sectionData = ConfigFileManager.ms_configGeneralInfo.iniFile.ReadSectionData(sectionName); + + gutsBinariesLocation.iniKeyName = "Guts_Bin_Dir"; + gutsBinariesLocation.iniSectionName = sectionName; + + sm3seekerConfigFile.iniKeyName = "sm3seeker_config_file"; + sm3seekerConfigFile.iniSectionName = sectionName; + + foreach (string path in sectionData) + { + keyDataPair = path.Split('='); + + if (String.Equals(keyDataPair[0], gutsBinariesLocation.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + if (keyDataPair.Length == 2) + { + gutsBinariesLocation.iniValue = keyDataPair[1]; + } + } + else if (String.Equals(keyDataPair[0], sm3seekerConfigFile.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + if (keyDataPair.Length == 2 && keyDataPair[1].Length > 0) + { + sm3seekerConfigFile.iniValue = Path.GetFullPath(keyDataPair[1]); + } + } + } + } + + bool verifyConfigInfo() + { + bool setupSuccessful = true; + string indentation = String.Empty; + string msg, tempPath; + + List textPropList = new List(); + + if (gutsBinariesLocation.iniValue.Length == 0) + { + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + gutsBinariesLocation.iniSectionName + + "\n" + indentation + "Key: " + gutsBinariesLocation.iniKeyName + + "\n" + indentation + "Value: " + gutsBinariesLocation.iniValue + + "\n" + indentation + "Error Description: Either one or a combination of Section, Key, or Value is not defined in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + else if (sm3seekerConfigFile.iniValue.Length == 0) + { + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + sm3seekerConfigFile.iniSectionName + + "\n" + indentation + "Key: " + sm3seekerConfigFile.iniKeyName + + "\n" + indentation + "Value: " + sm3seekerConfigFile.iniValue + + "\n" + indentation + "Error Description: Either one or a combination of Section, Key, or Value is not defined in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + tempPath = Path.GetFullPath(gutsBinariesLocation.iniValue); + + if (!Directory.Exists(gutsBinariesLocation.iniValue)) + { + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + gutsBinariesLocation.iniSectionName + + "\n" + indentation + "Key: " + gutsBinariesLocation.iniKeyName + + "\n" + indentation + "Value: " + gutsBinariesLocation.iniValue + + "\n" + indentation + "Error Description: The path defined in the value above is invalid. Translated path " + tempPath; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + else + gutsBinariesLocation.iniValue = tempPath; + } + + if (setupSuccessful) + { + tempPath = Path.GetFullPath(sm3seekerConfigFile.iniValue); ; + + if (!File.Exists(sm3seekerConfigFile.iniValue)) + { + indentation = Common.getIndentation(2); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + sm3seekerConfigFile.iniSectionName + + "\n" + indentation + "Key: " + sm3seekerConfigFile.iniKeyName + + "\n" + indentation + "Value: " + sm3seekerConfigFile.iniValue + + "\n" + indentation + "Error Description: The path defined in the value above is invalid. Translated path " + tempPath; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + else + sm3seekerConfigFile.iniValue = tempPath; + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/GutsSoftwareBuildAssistant.cs b/AllPurposeAutoSetup/GutsSoftwareBuildAssistant.cs new file mode 100644 index 0000000..e6390d0 --- /dev/null +++ b/AllPurposeAutoSetup/GutsSoftwareBuildAssistant.cs @@ -0,0 +1,698 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class GutsSoftwareBuildAssistant + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + public event Action RestartApplication; + + public List> gutsPrebuildParams = new List>(); + + Form m_parentForm; + + public GutsSoftwareBuildAssistant(Form parentForm) + { + m_parentForm = parentForm; + } + + // if one were to build GUTS from the files pulled from Synergy, the build will fail because + // additional files (source and headers) must be added to the GUTS project in order to build + // GUTS successfully. There's a perl script (dashboard.pl) that creates all the necessary files. + // But before the dashboard.pl can create all additional files, that path to the GUTS project + // must be specified in the windows environmental system variables and that the path to the Perl + // executable must be in the system Path variable. If these 2 things are not correct, the dashboard.pl + // will not be able to copy files to the GUTS project folder and GUTS will fail the build + // this function will ensure that everything is right to run the dashboard.pl and that it can create + // files and add them to the GUTS project folders. + public bool gutsPrebuildCheck(string sectionName) + { + string msg, indentation = String.Empty, gutsRootPath = ""; + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue gutsDevelopmentFolder = new ConfigFileManager.Ini_KeyValue(""); + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=GUTS Pre-build Check=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + gutsPrebuildParams.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, gutsPrebuildParams); + + if (setupSuccessful) + { + setupSuccessful = verifyGutsDirectoryStructure(ref gutsRootPath); + + if (setupSuccessful) + setupSuccessful = runGutsPrebuildScript(gutsRootPath); + } + + return setupSuccessful; + } + + bool verifyGutsDirectoryStructure(ref string gutsRootPath) + { + bool setupSuccessful = true; + string msg, indentation = String.Empty; + Match regExMatch; + ConfigFileManager.Ini_KeyValue gutsDevelopmentFolder = new ConfigFileManager.Ini_KeyValue(""); + List paths = new List(); + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + gutsRootPath = ""; + + gutsDevelopmentFolder = getGutsDevelopmentFolderIniInfo(); + if (gutsDevelopmentFolder.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + gutsDevelopmentFolder.iniSectionName + + "\n" + indentation + "Key: " + gutsDevelopmentFolder.iniKeyName + + "\n" + indentation + "Value: " + gutsDevelopmentFolder.iniValue + + "\n" + indentation + "Error Description: The key or value is missing for the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + regExMatch = Regex.Match(gutsDevelopmentFolder.iniValue, @"(.+\\GUTS[^\\]*)\\?.*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + gutsRootPath = regExMatch.Groups[1].Value; + } + else + gutsRootPath = PathManip.RemoveTrailingSlashInPath(gutsDevelopmentFolder.iniValue) + "\\" + "GUTS"; + + paths.Add(gutsRootPath); + paths.Add(gutsRootPath + "\\SM3_Tools\\Dashboard"); + paths.Add(gutsRootPath + "\\SM3\\src\\app"); + + foreach (string path in paths) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Verify path \"" + PathManip.GetProperDirectoryCapitalization(path) + "\""; + + if (Directory.Exists(path)) + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + msg += " - FAILED."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (!setupSuccessful) + break; + } + } + + return setupSuccessful; + } + + bool runGutsPrebuildScript(string gutsRootPath) + { + bool environmentVarChanged = false; + string msg = "", additionalFileMissing = "", errMsg = "", indentation, dashboardScriptPath, currentPathEnvVar = "", currentSm3SeekerEnvVar = ""; + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue genericIniInfo = new ConfigFileManager.Ini_KeyValue(""); + ConfigFileManager.Ini_KeyValue pathAndNameOfAddtionalFilesList = new ConfigFileManager.Ini_KeyValue(""); + ConfigFileManager.Ini_KeyValue perlBinaryPath = new ConfigFileManager.Ini_KeyValue(""); + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + pathAndNameOfAddtionalFilesList = getPathAndNameOfAddtionalFileList(); + genericIniInfo = pathAndNameOfAddtionalFilesList; + + perlBinaryPath = getPerlBinaryPathIniInfo(); + if (genericIniInfo.iniValue.Length > 0) + genericIniInfo = perlBinaryPath; + + if (genericIniInfo.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + genericIniInfo.iniSectionName + + "\n" + indentation + "Key: " + genericIniInfo.iniKeyName + + "\n" + indentation + "Value: " + genericIniInfo.iniValue + + "\n" + indentation + "Error Description: The key or value is missing for the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + if (File.Exists(pathAndNameOfAddtionalFilesList.iniValue)) + { + verifyAdditionalFilesAlreadyExistInGutsProject(gutsRootPath, pathAndNameOfAddtionalFilesList.iniValue, ref additionalFileMissing, ref errMsg); + + if (errMsg.Length > 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Parsing file \"" + pathAndNameOfAddtionalFilesList.iniValue + "\" - FAILED. " + errMsg; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + else if (additionalFileMissing.Length > 0) + { + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, "File \"" + additionalFileMissing + "\" is missing. \n\nProceeding with running pre-build script to create necessary files." , "Info", -1); + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Verify additional files already exist within \"" + gutsRootPath + "\" - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Verify file \"" + pathAndNameOfAddtionalFilesList.iniValue + "\" - FAILED."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + if ( msg.Length > 0 ) + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + // at least 1 required file is missing from the GUTS project folder, we must run script to copy all the necessary files to GUTS folder + if (setupSuccessful && additionalFileMissing.Length > 0) + { + dashboardScriptPath = gutsRootPath + @"\SM3_Tools\Dashboard\dashboard.pl"; + + if (!File.Exists(dashboardScriptPath)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Verify file \"" + dashboardScriptPath + "\" - FAILED. File does not exist"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + string perlAppPath = PathManip.AddTrailingSlashToPath(perlBinaryPath.iniValue) + "Perl.exe"; + if (!File.Exists(perlAppPath)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Verify file \"" + perlAppPath + "\" - FAILED. File does not exist. Please install Perl."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + try + { + currentPathEnvVar = System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); + + perlBinaryPath.iniValue = PathManip.RemoveTrailingSlashInPath(perlBinaryPath.iniValue); + } + catch (Exception e) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Querying system environment variable \"Path\" - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + + if (setupSuccessful) + { + try + { + currentSm3SeekerEnvVar = System.Environment.GetEnvironmentVariable("SM3_SEEKER", EnvironmentVariableTarget.Machine); + } + catch (Exception e) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Querying system environment variable \"SM3_SEEKER\" - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + + if (setupSuccessful) + { + // if the perl binary path is not specified in the system environment variable "Path", we add it + if (!Regex.IsMatch(currentPathEnvVar, @".*" + Regex.Escape(perlBinaryPath.iniValue) + @".*", RegexOptions.IgnoreCase)) + { + currentPathEnvVar += ";" + perlBinaryPath.iniValue; + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting environment variable [Path=$Path;" + perlBinaryPath.iniValue + "]"; + try + { + System.Environment.SetEnvironmentVariable("Path", currentPathEnvVar, EnvironmentVariableTarget.Machine); + + environmentVarChanged = true; + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + } + } + + if (setupSuccessful) + { + // if the SM3_SEEKR path does not match the GUTS Development Folder path, we change it + if (!Regex.IsMatch(currentSm3SeekerEnvVar, @"^" + Regex.Escape(gutsRootPath) + @"\\SM3$", RegexOptions.IgnoreCase)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting environment variable [SM3_SEEKER=" + gutsRootPath + @"\SM3]"; + try + { + System.Environment.SetEnvironmentVariable("SM3_SEEKER", gutsRootPath + @"\SM3", EnvironmentVariableTarget.Machine); + + environmentVarChanged = true; + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + + if (environmentVarChanged) + { + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, "The application has made changes/additions to the System Environment Variables.\n\n The application must be restarted for the System Environment Variables to take effect.\n\n Click OK to close the application and run the application again.", "Info", -1); + + // raise the event to restart the application + RestartApplication(); + } + + if (setupSuccessful && !((frmSetupStatusDisplay)m_parentForm).applicationNeedsToBeRestarted()) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Regular); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Executing script to create required files to GUTS project folder"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + msg = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "Would you like to run the perl script to copy necessary files to GUTS folder?", "Info", -1); + + if (String.Equals(msg, "yes", StringComparison.OrdinalIgnoreCase)) + { + try + { + var process = Process.Start(perlAppPath, dashboardScriptPath); + process.WaitForExit(); + + verifyAdditionalFilesAlreadyExistInGutsProject(gutsRootPath, pathAndNameOfAddtionalFilesList.iniValue, ref additionalFileMissing, ref errMsg); + + if (errMsg.Length == 0 && additionalFileMissing.Length == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = " - SUCCESS"; + + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + if (errMsg.Length > 0 ) + msg = " - FAILED. " + errMsg; + else + msg = " - FAILED. " + additionalFileMissing + " not found."; + + setupSuccessful = false; + } + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = " - FAILED. Error executing file " + dashboardScriptPath + ". " + e.Message; + + setupSuccessful = false; + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = " - FAILED. User chooses to not run script."; + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + + return setupSuccessful; + } + + void verifyAdditionalFilesAlreadyExistInGutsProject(string gutsRootPath, string pathAndNameToListOfFiles, ref string fileMissing, ref string errMsg) + { + string line, filePart2, filePath; + Match regExMatch; + errMsg = ""; + fileMissing = ""; + FileStream fs = null; + StreamReader reader = null; + + try + { + fs = new FileStream(pathAndNameToListOfFiles, FileMode.Open, FileAccess.Read); + reader = new StreamReader(fs, Encoding.Default); + + while ((line = reader.ReadLine()) != null) + { + line = line.Trim(); + + if (line.Length > 0) + { + regExMatch = Regex.Match(line, @"(.*\\)?(SM3\\.+)", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + filePart2 = regExMatch.Groups[2].Value; + + filePath = gutsRootPath + "\\" + filePart2; + + if (!File.Exists(filePath)) + { + fileMissing = filePath; + break; + } + } + } + } + } + catch (Exception ex) + { + errMsg = ex.Message; + } + finally + { + if (reader != null) + { + reader.Close(); + fs.Close(); + } + } + + } + + ConfigFileManager.Ini_KeyValue getPerlBinaryPathIniInfo() + { + ConfigFileManager.Ini_KeyValue iniInfo = new ConfigFileManager.Ini_KeyValue(""); + iniInfo.iniKeyName = "perl_binary_path"; + iniInfo.iniSectionName = ConfigFileManager.enum_INI_SECTION_NAMES.GUTS_Pre_Build_Assistance.ToString(); + + foreach (ConfigFileManager.Ini_KeyValue iniParam in gutsPrebuildParams) + { + if (String.Equals(iniParam.iniKeyName, iniInfo.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + iniInfo = iniParam; + if (iniInfo.iniValue.Length > 0) + iniInfo.iniValue = Path.GetFullPath(iniInfo.iniValue); + break; + } + } + + return iniInfo; + } + + ConfigFileManager.Ini_KeyValue getGutsDevelopmentFolderIniInfo() + { + ConfigFileManager.Ini_KeyValue iniInfo = new ConfigFileManager.Ini_KeyValue(""); + iniInfo.iniKeyName = "GUTS_Development_Folder"; + iniInfo.iniSectionName = ConfigFileManager.enum_INI_SECTION_NAMES.GUTS_Pre_Build_Assistance.ToString(); + + foreach (ConfigFileManager.Ini_KeyValue iniParam in gutsPrebuildParams) + { + if (String.Equals(iniParam.iniKeyName, iniInfo.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + iniInfo = iniParam; + if (iniInfo.iniValue.Length > 0) + iniInfo.iniValue = Path.GetFullPath(iniInfo.iniValue); + break; + } + } + + return iniInfo; + } + + ConfigFileManager.Ini_KeyValue getPathAndNameOfAddtionalFileList() + { + ConfigFileManager.Ini_KeyValue iniInfo = new ConfigFileManager.Ini_KeyValue(""); + iniInfo.iniKeyName = "list_of_additional_files"; + iniInfo.iniSectionName = ConfigFileManager.enum_INI_SECTION_NAMES.GUTS_Pre_Build_Assistance.ToString(); + + foreach (ConfigFileManager.Ini_KeyValue iniParam in gutsPrebuildParams) + { + if (String.Equals(iniParam.iniKeyName, iniInfo.iniKeyName, StringComparison.OrdinalIgnoreCase)) + { + iniInfo = iniParam; + if (iniInfo.iniValue.Length > 0) + iniInfo.iniValue = Path.GetFullPath(iniInfo.iniValue); + break; + } + } + + return iniInfo; + } + } +} diff --git a/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_MK698.ini b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_MK698.ini new file mode 100644 index 0000000..cc090c2 --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_MK698.ini @@ -0,0 +1,663 @@ +; ************************************************* AUTO SETUP CONFIGURATION FILE ***************************************************** +; Description: +; This is an INI file which contains the configuration information for the automated setup of either an +; ENGINEERING or PRODUCTION environment in a Windows OS. +; +; Author: Duc Le +; +; ****************************************************************************************************************************** +; +; +; +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +[General] +Program_Name = SM3 +; 64-bit or 32-bit. Possible values: 32 or 64 +Application_Platform = 32 + +[Global_Settings] +Always_Run_Application_Using_Admin_Account = true +Suppress_All_Prompts = true +Provide_Windows_Password_For_Auto_Login = true + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step +; The key can be anything. +; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name +; Below is a list of all possible setup steps: +; CONFIGURE_NETWORK_ADAPTERS +; RUN_APPLICATIONS +; INSTALL_SOFTWARE_PACKAGES +; ENABLE_INTERNET_INFORMATION_SERVICES +; CREATE_DIRECTORIES +; CREATE_NETWORK_SHARES +; SET_ENVIRONMENT_VARIABLES +; SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +; TRANSFER_FILE_PACKAGES +; MODIFY_WINDOWS_REGISTRY +; PROCESS_GUTS_CONFIG_FILE +; CREATE_WINDOWS_SHORTCUTS +; ASSIST_BUILDING_GUTS_APP +; REMOVE_FILES_FOLDERS +; +; The setup setup can be run more than once by creating another key and assigned the setup step to it +; Each setup step needs a section name. Section name provides all the information necessary for the setup step +; The sequence of the execution of the setup steps will be in the same order as they are specified. +; ****************************************************************************************************************************** +[Setup_Step_Manager] +step = RUN_APPLICATIONS,Extract_Visual_Studio_Archives +step = TRANSFER_FILE_PACKAGES,DVD_Software_Suite +step = RUN_APPLICATIONS,Extract_Software_Suite +step = INSTALL_SOFTWARE_PACKAGES,Install_Microsoft_HotFix +step = RUN_APPLICATIONS,Import_Trusted_Publisher_Certificates +step = INSTALL_SOFTWARE_PACKAGES,Install_Software +step = RUN_APPLICATIONS,Shut_Down_National_Instrument_Processes +step = REMOVE_FILES_FOLDERS , Files_Folders_Removal + +;step = ENABLE_INTERNET_INFORMATION_SERVICES,Windows_Features +;step = CREATE_DIRECTORIES,Paths_Creation +;step = CREATE_NETWORK_SHARES,Paths_Sharing +;step = SET_ENVIRONMENT_VARIABLES,Env_Variables +;step = SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +;step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages +;step = MODIFY_WINDOWS_REGISTRY,Windows_Registry +;step = PROCESS_GUTS_CONFIG_FILE,GUTS_Config_File +;step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts +;step = ASSIST_BUILDING_GUTS_APP,GUTS_Pre_Build_Assistance +;step = REMOVE_FILES_FOLDERS , Files_Folders_Removal + +[Install_Microsoft_HotFix] +app1_name = HotFix for Windows (KB2921916) +app1_setup_file = c:\windows\system32\wusa.exe +app1_setup_argument = "{user_temp_folder}\mk698\extraction\MS_HotFix\Windows6.1-KB2921916-x64.msu" /quiet /norestart +app1_reg_path = SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_2_for_KB2921916~31bf3856ad364e35~amd64~~6.1.1.0 +app1_reg_type = local_machine +app1_reboot_computer_at_completion = yes +app1_reboot_computer_immediately = yes + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to install various software application +; For each software application to be installed, 4 things can be defined: +; +; Possible keys: +; app#_name (REQUIRED. Name of the application to be installed/checked) +; app#_setup_file (OPTIONAL. Path and name of the installer) +; - the setup file can make use of macros. Look below for the available macros +; app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.) +; - possible values: yes, no +; - yes: there will be prompt asking user confirm/refuse install +; - no: installation will start automatically ( this is the default ) +; app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. +; This is used to verify that the software successfully installed) +; app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename) +; app#_reg_type (REQUIRED only if app#_reg_key is specified) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value) +; app#_reg_name (REQUIRED only if app#_reg_key is specified. Registry value name) +; app#_reg_compare (REQUIRED only if app#_reg_key is specified. Compare operator between value name's value specified here versus actual value read from registry) +; - there are only six options for this key ( eq, lt, gt, lte, gte, ne ) +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; example 1: +; app1_name = Perl 5.6.1.638 +; app1_setup_file = {user_temp_folder}\Installer.bat +; app1_exe_file = C:\Perl\bin\perl.exe +; +; example 2: +; app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion +; app1_reg_type = local_machine +; app1_reg_value = 15.0 +; app1_reg_name = Version +; app1_reg_compare = gte +; app1_name = National Instrument 488.2 (v15 or higher) +; app1_setup_file = C:\ni\setup.exe +; +; example 3: +; app1_exe_file = C:\Perl\bin\perl.exe +; app1_name = Perl 5.6.1.638 +; +; example 4: +; app1_name = Sapera LT 8.11 (x64) +; app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe +; app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" +; app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT +; app1_reg_type = local_machine +; app1_reg_name = IsSaperaFrameGrabberSupport +; +; ****************************************************************************************************************************** +; Visual Studio ClassRoot Registry Keys +; +; {"VS2005", "VisualStudio.DTE.8.0"}, +; {"VS2008", "VisualStudio.DTE.9.0"}, +; {"VS2010", "VisualStudio.DTE.10.0"}, +; {"VS2012", "VisualStudio.DTE.11.0"}, +; {"VS2013", "VisualStudio.DTE.12.0"}, +; {"VS2015", "VisualStudio.DTE.13.0"} +; +; Visual Studio Redistributable Local_Machine Registry Keys +; +; {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"}, +; {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"}, +; {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"}, +; {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"}, +; {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"}, +; {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"}, +; {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"}, +; {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"}, +; {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"}, +; {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"}, +; {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"}, +; {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"} +; +; ****************************************************************************************************************************** +[Install_Software] +app1_name = Visual Studio 2012 +app1_setup_argument = /passive /norestart +app1_reg_path = VisualStudio.DTE.11.0 +app1_reg_type = classes_root +app1_setup_file = {user_temp_folder}\mk698\extraction\vs2012\vs_professional.exe + +app2_name = Visual Studio 2012 - Update 4 +app2_setup_file = {user_temp_folder}\mk698\extraction\vs2012_update4\VS2012.4.exe +app2_setup_argument = /passive /norestart +app2_reg_path = SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\11.0\CompilerCore\1033 +app2_reg_type = local_machine +app2_reg_value = 11.0.61030 +app2_reg_name = UpdateVersion +app2_reg_compare = eq + +app3_name = SSI Test Executive 6.42.1 (v1.0.0) +app3_setup_file = c:\windows\system32\msiexec.exe +app3_setup_argument = /i "{user_temp_folder}\mk698\extraction\SSI_Test_Exec_v6_42_1\win32\SSI Test Executive 6.42.1.msi" /passive /norestart ALLUSERS{equal_sign}1 +app3_reg_display_name = SSI Test Executive 6.42.1 +app3_reg_type = local_machine +app3_reg_value = 1.0.0 +app3_reg_name = DisplayVersion +app3_reg_compare = eq + +app4_name = ActivePerl 5.8.8 Build 817 +app4_setup_file = c:\windows\system32\msiexec.exe +app4_setup_argument = /i "{user_temp_folder}\mk698\extraction\ActivePerl_v5_8_8\ActivePerl-5.8.8.817-MSWin32-x86-257965.msi" /passive /norestart +app4_reg_display_name = ActivePerl 5.8.8 Build 817 +app4_reg_type = local_machine +app4_reg_value = 5.8.817 +app4_reg_name = DisplayVersion +app4_reg_compare = eq + +app5_name = Windows Software Development Kit for Windows 8.1 +app5_setup_file = {user_temp_folder}\mk698\extraction\WinSDK_v8_1\sdksetup.exe +app5_setup_argument = /quiet /norestart +app5_reg_display_name = Windows Software Development Kit +app5_reg_type = local_machine +app5_reg_value = 8.100.26936 +app5_reg_name = DisplayVersion +app5_reg_compare = eq +app5_reboot_computer_at_completion = yes + +; needed for National Instrument Drivers +app6_name = Microsoft .NET Framework 4.6.2 +app6_setup_file = {user_temp_folder}\mk698\extraction\DotNet_Framework_4_6_2\NDP462-KB3151800-x86-x64-AllOS-ENU.exe +app6_setup_argument = /passive /norestart +app6_reg_display_name = Microsoft .NET Framework 4.6.2 +app6_reg_type = local_machine +app6_reg_value = 4.6 +app6_reg_name = DisplayVersion +app6_reg_compare = gte + +; app61_name = NI LabWindows/CVI Runtime (v. 17) +; app61_setup_file = {user_temp_folder}\mk698\extraction\NI_LabWindows_CVI_Runtime_v17\setup.exe +; app61_setup_argument = /qb /r:n /AcceptLicenses yes +; app61_reg_display_name = NI LabWindows/CVI SxS Runtime 2017 +; app61_reg_type = local_machine +; app61_reg_value = 17 +; app61_reg_name = DisplayVersion +; app61_reg_compare = gte +; app61_setup_reboot_computer = yes + +app62_name = NI LabWindows/CVI (v. 17) +app62_setup_file = {user_temp_folder}\mk698\extraction\NI_LabWindows_CVI_v17\Distributions\CVI\setup.exe +app62_setup_argument = "{app62_setup_file}\specfile.txt" /qb /r:n /AcceptLicenses yes +app62_reg_display_name = NI LabWindows/CVI 2017 +app62_reg_type = local_machine +app62_reg_value = 17 +app62_reg_name = DisplayVersion +app62_reg_compare = gte +app62_reboot_computer_at_completion = yes + +app7_name = NI 488.2 (v. 17) +app7_setup_file = {user_temp_folder}\mk698\extraction\NI_4882_v17\setup.exe +app7_setup_argument = /qb /r:n /AcceptLicenses yes +app7_reg_display_name = NI-488.2 17.0 +app7_reg_type = local_machine +app7_reg_value = 17 +app7_reg_name = DisplayVersion +app7_reg_compare = gte +app7_reboot_computer_at_completion = yes + +app8_name = NI VXI (v. 16) +app8_setup_file = {user_temp_folder}\mk698\extraction\NI_VXI_v17\setup.exe +app8_setup_argument = /qb /r:n /AcceptLicenses yes +app8_reg_display_name = NI-VXI 16.0 +app8_reg_type = local_machine +app8_reg_value = 16 +app8_reg_name = DisplayVersion +app8_reg_compare = gte +app8_reboot_computer_at_completion = yes + +app9_name = NI IVI Compliance Package (v. 17) +app9_setup_file = {user_temp_folder}\mk698\extraction\NI_IVI_Compliance_Package_v17\setup.exe +app9_setup_argument = /qb /r:n /AcceptLicenses yes +app9_reg_display_name = NI IVI Compliance Package 17.0 +app9_reg_type = local_machine +app9_reg_value = 17 +app9_reg_name = DisplayVersion +app9_reg_compare = gte +app9_reboot_computer_at_completion = yes + +app10_name = NI Serial (v. 17) +app10_setup_file = {user_temp_folder}\mk698\extraction\NI_Serial_v17\setup.exe +app10_setup_argument = /qb /r:n /AcceptLicenses yes +app10_reg_display_name = NI-Serial Runtime 17.0 +app10_reg_type = local_machine +app10_reg_value = 17 +app10_reg_name = DisplayVersion +app10_reg_compare = gte + +app11_name = NI Switch (v. 17) +app11_setup_file = {user_temp_folder}\mk698\extraction\NI_Switch_v17\setup.exe +app11_setup_argument = /qb /r:n /AcceptLicenses yes +app11_reg_display_name = NI-SWITCH 17.0 +app11_reg_type = local_machine +app11_reg_value = 17 +app11_reg_name = DisplayVersion +app11_reg_compare = gte +app11_reboot_computer_at_completion = yes + +app12_name = Sealevel SeaMAX (v3.04) +app12_setup_file = {user_temp_folder}\mk698\extraction\SeaMAX_v3_04\sx03040001.exe +app12_setup_argument = -s -f1{user_temp_folder}\mk698\extraction\SeaMAX_v3_04\seamax_install_params.iss +app12_reg_display_name = SeaMAX +app12_reg_type = local_machine +app12_reg_value = 3.4.0.1 +app12_reg_name = DisplayVersion +app12_reg_compare = gte + +;app2_name = Sealevel SeaMACV5 (v5.0.23) +;app2_setup_file = {user_temp_folder}\mk698\extraction\SeaMACV5_v5_0_23\SM050023.exe +; app2_setup_argument = -s -f1{user_temp_folder}\mk698\extraction\SeaMACV5_v5_0_23\seamac_install_params.iss +; app2_reg_display_name = SeaMAC V5 +; app2_reg_type = local_machine +; app2_reg_value = 5.0.23 +; app2_reg_name = DisplayVersion +; app2_reg_compare = eq + +; app13_name = Sealevel SeaMAC (v5.0.24) +; app13_setup_file = {user_temp_folder}\mk698\extraction\SeaMAC_v5_0_24\SM050024RC4.exe +; app13_setup_argument = /S /v/qn +; app13_reg_display_name = SeaMAC +; app13_reg_type = local_machine +; app13_reg_value = 5.0.24 +; app13_reg_name = DisplayVersion +; app13_reg_compare = eq + +app13_name = Sealevel SeaMAC (v6) +app13_setup_file = {user_temp_folder}\mk698\extraction\SeaMAC_v6\SM060000.exe +app13_setup_argument = /S /v/qn +app13_reg_display_name = SeaMAC +app13_reg_type = local_machine +app13_reg_value = 6.0 +app13_reg_name = DisplayVersion +app13_reg_compare = eq + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to run various applications or scripts +; +; Possible keys: +; app#_description (OPTIONAL. Describe the purpose of running this application) +; app#_path (REQUIRED. Full path and name of the application to be run) +; - the path can take advantage of using macros. Look below for the available macros +; app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application) +; - value is either true/false +; app#_argument (OPTIONAL. Arguments to be passed to the application) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; - sometimes, the argument maybe include equal sign in them, but we can't have equal sign +; in the value of the INI. To make it possible, if an equal sign is needed in the ini file +; use in place of = +; +; app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; Example 1: +; app1_path = C:\ReleaseIB_Production\app.exe +; app1_arguments = -role Datasrv -suite LSPS3 -production +; +; Example 2: +; app1_description = Extracting ActivePerl archive +; app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; +; Example 3: +; app1_description = Extracting ActivePerl archive +; app1_path = {cd_drive}\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; ****************************************************************************************************************************** +[Extract_Software_Suite] +app1_description = Extracting MK698 software suite +app1_path = {user_temp_folder}\mk698\7-Zip\7z.exe +app1_is_console = true +app1_argument = x "{user_temp_folder}\mk698\MK698Software.7z.001" -o"{user_temp_folder}\mk698\extraction" -aos -y + +[Extract_Visual_Studio_Archives] +app1_description = Extracting Visual Studio 2012 Archive +app1_cd_label = Visual Studio 2012 +app1_path = {cd_drive}\7-Zip\7z.exe +app1_is_console = true +app1_argument = x "{cd_drive}\msvs2012.7z" -o"{user_temp_folder}\mk698\extraction\vs2012" -aos -y + +app2_description = Extracting Visual Studio 2012 Update 4 Archive +app2_cd_label = Visual Studio 2012 +app2_path = {cd_drive}\7-Zip\7z.exe +app2_is_console = true +app2_argument = x "{cd_drive}\msvs2012_update4.7z" -o"{user_temp_folder}\mk698\extraction\vs2012_update4" -aos -y + +[Import_Trusted_Publisher_Certificates] +app1_description = Importing trusted publisher certificate for SeaLevel SeaMAX Driver +app1_path = c:\windows\system32\certutil.exe +app1_is_console = true +app1_argument = -addstore "TrustedPublisher" "{user_temp_folder}\mk698\extraction\SeaMax_v3_04\pubcert.cer" + +app2_description = Importing trusted publisher certificate for SeaLevel SeaMAC Driver +app2_path = c:\windows\system32\certutil.exe +app2_is_console = true +app2_argument = -addstore "TrustedPublisher" "{user_temp_folder}\mk698\extraction\SeaMAC_v6\pubcert.cer" + +[Shut_Down_National_Instrument_Processes] +app1_description = Killing process nierserver.exe +app1_path = c:\windows\system32\taskkill.exe +app1_is_console = true +app1_argument = /f /im nierserver.exe + +; +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Modify Network Adapter's settings +; +; Possible keys: +; nic#_pci_location ( REQUIRED.) +; - the value must be in the form of: #,#,# ( bus, device, function) +; i.e.: 0,25,0 - bus = 0, device = 25, function = 0 +; nic#_adapter_name (OPTIONAL. Set the name of the network adapter) +; nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,255.255.255.0 +; nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter) +; - the value must be in the form of: #.#.#.# +; i.e.: 192.168.0.1 +; nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,192.168.0.11 +; nic#_link_speed (OPTIONAL. Set the link speed of the network adapter) +; - Before using this option. Make sure that the network adapter supports link speed setting +; This is really a registry change for the network adapter. The registry name is *SpeedDuplex +; The value for *SpeedDuplex is usually a digit ranging from 0-5. +; Here's an example: +; 0 - Auto Negotiate +; 1 - 10Mbps Half Duplex +; 2 - 10Mbps Full Duplex +; 3 - 100Mpbs Half Duplex +; 4 - 100Mbps Full Duplex +; 6 - 1Gpbs Full Duplex +; There's no 5 defined because there's no 1Gpbs Half Duplex +; IMPORTANT: The above example was taken from a Intel network card. These numbers could +; mean something else different from one network card to the next. Refer to the network +; adapter's manufacturer manual for the actual numbers and their meanings. +; +; nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP) +; - the value must be either: true/false +; - if this is set to true, all the other settings above, except link speed, will be ignored +; this will effectively set IP and DNS Servers to be obtained automatically +; +; Example 1: +; nic1_pci_location = 0,25, 0 +; nic1_link_speed = 2 +; nic1_adapter_name = My Connection +; nic1_enable_dhcp = false +; nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0 +; nic1_default_gateway = 192.168.0.1 +; nic1_dns_servers = 192.168.0.5, 192.168.0.6 +; +; ****************************************************************************************************************************** +[Network_Interface_Cards] + + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to remove/delete various files or folders +; +; Possible keys: +; item (REQUIRED. This is either a file or folder to be removed) +; +; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete +; a folder recursively, add the word "recursive" right after the path separated by a comma +; +; The path can also include user desktop path or temporary folder +; for desktop path, use macro: {user_desktop} +; for temporary folder, use macro: {user_temp_folder} +; +; Example 1 - Delete a file: +; item = A:\test\test.hpp +; +; Example 2 - Delete a folder recursively: +; item = A:\test\test2,recursive +; +; Example 3 - Delete only the files contained in the folder: +; item = A:\test\test2 +; +; Example 4 - Delete a folder on the user's desktop: +; item = {user_desktop}\test2 +; +; Example 5 - Delete a folder in the user's temporary folder +; item = {user_temp_folder}\test2 +; ****************************************************************************************************************************** +[Files_Folders_Removal] +item = {user_temp_folder}\mk698,recursive + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to copy various packages of files from a source location to destination location +; Each XML file contains at least 1 package of files. Each file has a source and destination locations +; Key name can be anything +; Value must a be a path to a XML file +; +; example 1: +; file_package = package1.xml +; ****************************************************************************************************************************** +[DVD_Software_Suite] +file_package = .\PackagesFromCD.xml + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Specify all the paths to be created +; Possible keys: +; path (REQUIRED. Valid path to be created) +; +; example: +; path1 = C:\DataIIB\data\Block_IB\CV +; path2 = C:\DataIIB\data\Block_IB\General\Logs +; ****************************************************************************************************************************** +[Paths_Creation] +path = C:\ReleaseIB_Engineering\ +path = C:\ReleaseIB_Production\ +path = C:\DataIB\data\Block_IB\CV +path = C:\DataIB\data\Block_IB\General\Logs +path = C:\DataIB\data\Block_IB\General\Scripts +path = C:\DataIB\data\Block_IB\General\Temp\SingleStepScript + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; To share a folder, must provide path to a folder. +; Share names are optional as the folder name will be used as the default share name. +; Any share name defined here will be used as additional share name for its corresponding folder +; The # in "path#" must match in both keys. A folder can have more than one share name. +; Possible keys: +; path# (OPTIONAL. A valid path to be shared) +; path#_additional_share_names (OPTIONAL. Additional share names associated with a path) +; - Define one or more shares names separated by comma +; path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control ) +; - if this is not defined, this network share will be accessible to everyone with Full Control +; - if defined, the value must be in the following format: +; User1,User2,User3 (if more than one account is defined, separate by comma) +; The account name must either be a built-in window account or local/domain account +; if the account name is a built-in window account, it can only be one of the following: +; - everyone, authenticated users +; if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName +; +; example: +; path1 = C:\DataIIB\ +; path1_additional_share_names = DataIIB1, DataIIB2 +; path1_allowed_accounts = Authenticated Users,US\1117637 +; path2 = C:\DataIA +; path2__additional_share_names = DataIA_1 +; path2_allowed_accounts = MYCOMPUTERNAME\Duc +; path3 = C:\DataIC +; ****************************************************************************************************************************** +[Paths_Sharing] +path1 = C:\ReleaseIB_Engineering\ +path2_additional_share_names = Data +path2 = C:\DataIB\ +path3_additional_share_names = Release +path3 = C:\ReleaseIB_Production\ + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create windows system environment variables +; the key would be the system environment variable name. +; +; Note: +; Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable +; If a key's name is path, the value specified will be appendeding to existing value +; +; path can have one or more values separated by commas +; Example: +; path = C:\folder1 +; path = C:\folder1, C:\folder2 +; ****************************************************************************************************************************** +[Env_Variables] +SM3_SEEKER = C:\Development\GUTS\SM3 +; the address of the computer where all the data of each test is saved before being pushed to the network +SM3_SKR_SERVER = localhost +; the address of the computer where all test data are pushed to after testing +SM3_SKR_NETWORK = localhost +path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Add/Modify or Delete registry's key +; +; Possible keys: +; reg#_action ( REQUIRED. What action to perform) +; - there are only 2 actions ( add/modify, delete) +; reg#_path (REQUIRED. Registry folder path, not including valuename) +; reg#_type (REQUIRED) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; reg#_name_value_pair# (Optional. Registry name values and their names) +; - the registry key defined by registry path can have multiple value names and their associated values +; - Format of the value: [name:***,value:***,type:***] - replace *** with actual text +; - name can be anything +; - value is either numeric or alphanumeric depending on type +; - type can only be 1 of 4: string, multi_string, dword, qword +; If type is dword or qword then value can only be numeric +; If type is multi-string, then format of the value must be: +; [name:***,:value:***:value:***...,type:multi_string] +; +; Example 1: +; reg1_action = add/modify +; reg1_path = SOFTWARE\MySoftware\ +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version,value:3,type:string] +; reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string] +; +; Example 2: +; reg1_action = add/modify +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; +; Example3: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version] +; +; Example4: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; ****************************************************************************************************************************** +[Windows_Registry] +;reg1_action = delete +;reg1_path = SOFTWARE\Duc\ +;reg1_type = local_machine +;reg1_name_value_pairs = Versionn[:]3[,]ginrl[:]boy + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create shortcuts on the user's desktop +; +; example: +; shortcut1_name = Data Server +; shortcut1_target_path = C:\ReleaseIB_Production\app.exe +; shortcut1_arguments = -role datasrv -suite lsps3 -production +; ****************************************************************************************************************************** +[Windows_Shortcuts] +shortcut1_name = Data Server +shortcut1_target_path = C:\ReleaseIB_Production\app.exe +shortcut1_arguments = -role datasrv -suite lsps3 -production -no_hw + +shortcut2_name = Guts Server +shortcut2_target_path = C:\ReleaseIB_Production\app.exe +shortcut2_arguments = -role gutssrv -suite lsps3 -production -no_hw + +shortcut3_name = Guts Auto +shortcut3_target_path = C:\ReleaseIB_Production\app.exe +shortcut3_arguments = -role auto1b -suite lsps3 -production -no_hw + +shortcut4_name = Guts Manual +shortcut4_target_path = C:\ReleaseIB_Production\app.exe +shortcut4_arguments = -role gutsman -suite lsps3 -production -no_hw + diff --git a/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_NGI.ini b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_NGI.ini new file mode 100644 index 0000000..c04b92c --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_NGI.ini @@ -0,0 +1,452 @@ +; ************************************************* SM3 CONFIGURATION FILE ***************************************************** +; Description: +; This is an INI file which contains the configuration information for the automated setup of either an +; ENGINEERING or PRODUCTION environment for developing or running SM3 GUTS (Guidance Unit Test Software) +; +; Author: Duc Le +; +; ****************************************************************************************************************************** +; +; +; +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +[General] +Program_Name = NGI - ComposableTestSoftware Standalone Build Setup +; 64-bit or 32-bit. Possible values: 32 or 64 +Application_Platform = 32 + +[Global_Settings] +Always_Run_Application_Using_Admin_Account = false +Suppress_All_Prompts = true +Provide_Windows_Password_For_Auto_Login = false + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step +; The key can be anything. +; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name +; Below is a list of all possible setup steps: +; CONFIGURE_NETWORK_ADAPTERS +; RUN_APPLICATIONS +; INSTALL_SOFTWARE_PACKAGES +; ENABLE_INTERNET_INFORMATION_SERVICES +; CREATE_DIRECTORIES +; CREATE_NETWORK_SHARES +; SET_ENVIRONMENT_VARIABLES +; SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +; TRANSFER_FILE_PACKAGES +; MODIFY_WINDOWS_REGISTRY +; PROCESS_GUTS_CONFIG_FILE +; CREATE_WINDOWS_SHORTCUTS +; ASSIST_BUILDING_GUTS_APP +; REMOVE_FILES_FOLDERS +; +; The setup setup can be run more than once by creating another key and assigned the setup step to it +; Each setup step needs a section name. Section name provides all the information necessary for the setup step +; The sequence of the execution of the setup steps will be in the same order as they are specified. +; ****************************************************************************************************************************** +[Setup_Step_Manager] +;step = RUN_APPLICATIONS,Extract_Software_Archives +step = INSTALL_SOFTWARE_PACKAGES,Install_Software +;step = CREATE_DIRECTORIES,Paths_Creation +;step = CREATE_NETWORK_SHARES,Paths_Sharing +;step = SET_ENVIRONMENT_VARIABLES,Env_Variables +;step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages +;step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts +;step = RUN_APPLICATIONS,Shut_Down_National_Instruments_Processes +;step = REMOVE_FILES_FOLDERS , Files_Folders_Removal + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to install various software application +; For each software application to be installed, 4 things can be defined: +; +; Possible keys: +; app#_name (REQUIRED. Name of the application to be installed/checked) +; app#_setup_file (OPTIONAL. Path and name of the installer) +; - the setup file can make use of macros. Look below for the available macros +; app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.) +; - possible values: yes, no +; - yes: there will be prompt asking user confirm/refuse install +; - no: installation will start automatically ( this is the default ) +; app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. +; This is used to verify that the software successfully installed) +; app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename) +; app#_reg_type (REQUIRED only if app#_reg_key is specified) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value) +; app#_reg_name (REQUIRED only if app#_reg_key is specified. Registry value name) +; app#_reg_compare (REQUIRED only if app#_reg_key is specified. Compare operator between value name's value specified here versus actual value read from registry) +; - there are only six options for this key ( eq, lt, gt, lte, gte, ne ) +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; example 1: +; app1_name = Perl 5.6.1.638 +; app1_setup_file = {user_temp_folder}\Installer.bat +; app1_exe_file = C:\Perl\bin\perl.exe +; +; example 2: +; app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion +; app1_reg_type = local_machine +; app1_reg_value = 15.0 +; app1_reg_name = Version +; app1_reg_compare = gte +; app1_name = National Instrument 488.2 (v15 or higher) +; app1_setup_file = C:\ni\setup.exe +; +; example 3: +; app1_exe_file = C:\Perl\bin\perl.exe +; app1_name = Perl 5.6.1.638 +; +; example 4: +; app1_name = Sapera LT 8.11 (x64) +; app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe +; app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" +; app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT +; app1_reg_type = local_machine +; app1_reg_name = IsSaperaFrameGrabberSupport +; +; ****************************************************************************************************************************** +; Visual Studio ClassRoot Registry Keys +; +; {"VS2005", "VisualStudio.DTE.8.0"}, +; {"VS2008", "VisualStudio.DTE.9.0"}, +; {"VS2010", "VisualStudio.DTE.10.0"}, +; {"VS2012", "VisualStudio.DTE.11.0"}, +; {"VS2013", "VisualStudio.DTE.12.0"}, +; {"VS2015", "VisualStudio.DTE.13.0"} +; +; Visual Studio Redistributable Local_Machine Registry Keys +; +; {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"}, +; {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"}, +; {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"}, +; {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"}, +; {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"}, +; {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"}, +; {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"}, +; {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"}, +; {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"}, +; {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"}, +; {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"}, +; {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"} +; +; ****************************************************************************************************************************** +[Install_Software] +app5_name = Visual Studio 2022 +app5_setup_argument = -p --norestart --noweb --add Microsoft.VisualStudio.Workload.ManagedDesktop;includeRecommended Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended Microsoft.VisualStudio.Component.VC.ATLMFC Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Workload.VisualStudioExtension;includeRecommended +app5_reg_path = VisualStudio.DTE.17.0 +app5_reg_type = classes_root +app5_setup_file = D:\Windows_Stuff\Visual_Studio_2022.17.9.5\vs_setup.exe +app5_install_process_name = setup + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used for enabling windows features +; Only one thing needs to be defined for this section. +; - a text file that lists windows feature name line by line +; +; Possible keys: +; feature_list_file +; +; example: +; windows_feature_list_file = .\feature_list.txt +; ****************************************************************************************************************************** +[Windows_Features] +windows_feature_list_file = ..\Data\windows_feature_list.txt + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to run various applications or scripts +; +; Possible keys: +; app#_description (OPTIONAL. Describe the purpose of running this application) +; app#_path (REQUIRED. Full path and name of the application to be run) +; - the path can take advantage of using macros. Look below for the available macros +; app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application) +; - value is either true/false +; app#_argument (OPTIONAL. Arguments to be passed to the application) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; - sometimes, the argument maybe include equal sign in them, but we can't have equal sign +; in the value of the INI. To make it possible, if an equal sign is needed in the ini file +; use in place of = +; +; app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; Example 1: +; app1_path = C:\ReleaseIB_Production\app.exe +; app1_arguments = -role Datasrv -suite LSPS3 -production +; +; Example 2: +; app1_description = Extracting ActivePerl archive +; app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; +; Example 3: +; app1_description = Extracting ActivePerl archive +; app1_path = {cd_drive}\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; ****************************************************************************************************************************** +[Extract_Software_Archives] +;app1_description = Extracting Visual Studio 2012 archive +;app1_cd_label = GUTS Support Appz 1/2 +;app1_path = {cd_drive}\DISK1\7-Zip\7z.exe +;app1_is_console = true +;app1_argument = x "{cd_drive}\DISK1\msvs2012.7z" -o"{user_temp_folder}\vs2012" -y + +; +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Modify Network Adapter's settings +; +; Possible keys: +; nic#_pci_location ( REQUIRED.) +; - the value must be in the form of: #,#,# ( bus, device, function) +; i.e.: 0,25,0 - bus = 0, device = 25, function = 0 +; nic#_adapter_name (OPTIONAL. Set the name of the network adapter) +; nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,255.255.255.0 +; nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter) +; - the value must be in the form of: #.#.#.# +; i.e.: 192.168.0.1 +; nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,192.168.0.11 +; nic#_link_speed (OPTIONAL. Set the link speed of the network adapter) +; - Before using this option. Make sure that the network adapter supports link speed setting +; This is really a registry change for the network adapter. The registry name is *SpeedDuplex +; The value for *SpeedDuplex is usually a digit ranging from 0-5. +; Here's an example: +; 0 - Auto Negotiate +; 1 - 10Mbps Half Duplex +; 2 - 10Mbps Full Duplex +; 3 - 100Mpbs Half Duplex +; 4 - 100Mbps Full Duplex +; 6 - 1Gpbs Full Duplex +; There's no 5 defined because there's no 1Gpbs Half Duplex +; IMPORTANT: The above example was taken from a Intel network card. These numbers could +; mean something else different from one network card to the next. Refer to the network +; adapter's manufacturer manual for the actual numbers and their meanings. +; +; nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP) +; - the value must be either: true/false +; - if this is set to true, all the other settings above, except link speed, will be ignored +; this will effectively set IP and DNS Servers to be obtained automatically +; +; Example 1: +; nic1_pci_location = 0,25, 0 +; nic1_link_speed = 2 +; nic1_adapter_name = My Connection +; nic1_enable_dhcp = false +; nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0 +; nic1_default_gateway = 192.168.0.1 +; nic1_dns_servers = 192.168.0.5, 192.168.0.6 +; +; ****************************************************************************************************************************** +[Network_Interface_Cards] + + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to remove/delete various files or folders +; +; Possible keys: +; item (REQUIRED. This is either a file or folder to be removed) +; +; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete +; a folder recursively, add the word "recursive" right after the path separated by a comma +; +; The path can also include user desktop path or temporary folder +; for desktop path, use macro: {user_desktop} +; for temporary folder, use macro: {user_temp_folder} +; +; Example 1 - Delete a file: +; item = A:\test\test.hpp +; +; Example 2 - Delete a folder recursively: +; item = A:\test\test2,recursive +; +; Example 3 - Delete only the files contained in the folder: +; item = A:\test\test2 +; +; Example 4 - Delete a folder on the user's desktop: +; item = {user_desktop}\test2 +; +; Example 5 - Delete a folder in the user's temporary folder +; item = {user_temp_folder}\test2 +; ****************************************************************************************************************************** +[Files_Folders_Removal] + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to copy various packages of files from a source location to destination location +; Each XML file contains at least 1 package of files. Each file has a source and destination locations +; Key name can be anything +; Value must a be a path to a XML file +; +; example 1: +; file_package = package1.xml +; ****************************************************************************************************************************** +[Files_Transfer_Packages] +file_package = ..\CTS\file_package.xml + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Specify all the paths to be created +; Possible keys: +; path (REQUIRED. Valid path to be created) +; +; example: +; path1 = C:\DataIIB\data\Block_IB\CV +; path2 = C:\DataIIB\data\Block_IB\General\Logs +; ****************************************************************************************************************************** +[Paths_Creation] +path = C:\ReleaseIB_Engineering\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; To share a folder, must provide path to a folder. +; Share names are optional as the folder name will be used as the default share name. +; Any share name defined here will be used as additional share name for its corresponding folder +; The # in "path#" must match in both keys. A folder can have more than one share name. +; Possible keys: +; path# (OPTIONAL. A valid path to be shared) +; path#_additional_share_names (OPTIONAL. Additional share names associated with a path) +; - Define one or more shares names separated by comma +; path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control ) +; - if this is not defined, this network share will be accessible to everyone with Full Control +; - if defined, the value must be in the following format: +; User1,User2,User3 (if more than one account is defined, separate by comma) +; The account name must either be a built-in window account or local/domain account +; if the account name is a built-in window account, it can only be one of the following: +; - everyone, authenticated users +; if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName +; +; example: +; path1 = C:\DataIIB\ +; path1_additional_share_names = DataIIB1, DataIIB2 +; path1_allowed_accounts = Authenticated Users,US\1117637 +; path2 = C:\DataIA +; path2__additional_share_names = DataIA_1 +; path2_allowed_accounts = MYCOMPUTERNAME\Duc +; path3 = C:\DataIC +; ****************************************************************************************************************************** +[Paths_Sharing] + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create windows system environment variables +; the key would be the system environment variable name. +; +; Note: +; Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable +; If a key's name is path, the value specified will be appendeding to existing value +; +; path can have one or more values separated by commas +; Example: +; path = C:\folder1 +; path = C:\folder1, C:\folder2 +; ****************************************************************************************************************************** +[Env_Variables] +SM3_SEEKER = C:\Development\GUTS\SM3 +; the address of the computer where all the data of each test is saved before being pushed to the network +SM3_SKR_SERVER = localhost +; the address of the computer where all test data are pushed to after testing +SM3_SKR_NETWORK = localhost +path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Add/Modify or Delete registry's key +; +; Possible keys: +; reg#_action ( REQUIRED. What action to perform) +; - there are only 2 actions ( add/modify, delete) +; reg#_path (REQUIRED. Registry folder path, not including valuename) +; reg#_type (REQUIRED) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; reg#_name_value_pair# (Optional. Registry name values and their names) +; - the registry key defined by registry path can have multiple value names and their associated values +; - Format of the value: [name:***,value:***,type:***] - replace *** with actual text +; - name can be anything +; - value is either numeric or alphanumeric depending on type +; - type can only be 1 of 4: string, multi_string, dword, qword +; If type is dword or qword then value can only be numeric +; If type is multi-string, then format of the value must be: +; [name:***,:value:***:value:***...,type:multi_string] +; +; Example 1: +; reg1_action = add/modify +; reg1_path = SOFTWARE\MySoftware\ +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version,value:3,type:string] +; reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string] +; +; Example 2: +; reg1_action = add/modify +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; +; Example3: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version] +; +; Example4: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; ****************************************************************************************************************************** +[Windows_Registry] +;reg1_action = delete +;reg1_path = SOFTWARE\Duc\ +;reg1_type = local_machine +;reg1_name_value_pairs = Versionn[:]3[,]ginrl[:]boy + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create shortcuts on the user's desktop +; +; example: +; shortcut1_name = Data Server +; shortcut1_target_path = C:\ReleaseIB_Production\app.exe +; shortcut1_arguments = -role datasrv -suite lsps3 -production +; ****************************************************************************************************************************** +[Windows_Shortcuts] diff --git a/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_control_pc.ini b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_control_pc.ini new file mode 100644 index 0000000..f3b9492 --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_control_pc.ini @@ -0,0 +1,599 @@ +; ************************************************* SM3 CONFIGURATION FILE ***************************************************** +; Description: +; This is an INI file which contains the configuration information for the automated setup of either an +; ENGINEERING or PRODUCTION environment for developing or running SM3 GUTS (Guidance Unit Test Software) +; +; Author: Duc Le +; +; ****************************************************************************************************************************** +; +; +; +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +[General] +Program_Name = SM3 Block IB - Control PC +; 64-bit or 32-bit. Possible values: 32 or 64 +Application_Platform = 32 + +[Global_Settings] +Always_Run_Application_Using_Admin_Account = true +Suppress_All_Prompts = true +Provide_Windows_Password_For_Auto_Login = false + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step +; The key can be anything. +; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name +; Below is a list of all possible setup steps: +; CONFIGURE_NETWORK_ADAPTERS +; RUN_APPLICATIONS +; INSTALL_SOFTWARE_PACKAGES +; ENABLE_INTERNET_INFORMATION_SERVICES +; CREATE_DIRECTORIES +; CREATE_NETWORK_SHARES +; SET_ENVIRONMENT_VARIABLES +; SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +; TRANSFER_FILE_PACKAGES +; MODIFY_WINDOWS_REGISTRY +; PROCESS_GUTS_CONFIG_FILE +; CREATE_WINDOWS_SHORTCUTS +; ASSIST_BUILDING_GUTS_APP +; REMOVE_FILES_FOLDERS +; +; The setup setup can be run more than once by creating another key and assigned the setup step to it +; Each setup step needs a section name. Section name provides all the information necessary for the setup step +; The sequence of the execution of the setup steps will be in the same order as they are specified. +; ****************************************************************************************************************************** +[Setup_Step_Manager] +step = INSTALL_SOFTWARE_PACKAGES,Install_VS2012 +step = INSTALL_SOFTWARE_PACKAGES,Install_VS2012_Update4 +step = INSTALL_SOFTWARE_PACKAGES,Install_4882 +step = INSTALL_SOFTWARE_PACKAGES,Install_VXI +step = INSTALL_SOFTWARE_PACKAGES,Install_Perl +step = INSTALL_SOFTWARE_PACKAGES,Install_Redist2013 +step = RUN_APPLICATIONS,Enable_Network_Sharing +step = CREATE_DIRECTORIES,Paths_Creation +step = CREATE_NETWORK_SHARES,Paths_Sharing +step = SET_ENVIRONMENT_VARIABLES,Env_Variables +step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages +step = MODIFY_WINDOWS_REGISTRY,Windows_Registry +step = CONFIGURE_NETWORK_ADAPTERS,Network_Interface_Cards +step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to install various software application +; For each software application to be installed, 4 things can be defined: +; +; Possible keys: +; app#_name (REQUIRED. Name of the application to be installed/checked) +; app#_setup_file (OPTIONAL. Path and name of the installer) +; - the setup file can make use of macros. Look below for the available macros +; app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.) +; - possible values: yes, no +; - yes: there will be prompt asking user confirm/refuse install +; - no: installation will start automatically ( this is the default ) +; app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. +; This is used to verify that the software successfully installed) +; app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename) +; app#_reg_type (REQUIRED only if app#_reg_key is specified) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value) +; app#_reg_name (REQUIRED only if app#_reg_key is specified. Registry value name) +; app#_reg_compare (REQUIRED only if app#_reg_key is specified. Compare operator between value name's value specified here versus actual value read from registry) +; - there are only six options for this key ( eq, lt, gt, lte, gte, ne ) +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; example 1: +; app1_name = Perl 5.6.1.638 +; app1_setup_file = {user_temp_folder}\Installer.bat +; app1_exe_file = C:\Perl\bin\perl.exe +; +; example 2: +; app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion +; app1_reg_type = local_machine +; app1_reg_value = 15.0 +; app1_reg_name = Version +; app1_reg_compare = gte +; app1_name = National Instrument 488.2 (v15 or higher) +; app1_setup_file = C:\ni\setup.exe +; +; example 3: +; app1_exe_file = C:\Perl\bin\perl.exe +; app1_name = Perl 5.6.1.638 +; +; example 4: +; app1_name = Sapera LT 8.11 (x64) +; app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe +; app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" +; app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT +; app1_reg_type = local_machine +; app1_reg_name = IsSaperaFrameGrabberSupport +; +; ****************************************************************************************************************************** +; Visual Studio ClassRoot Registry Keys +; +; {"VS2005", "VisualStudio.DTE.8.0"}, +; {"VS2008", "VisualStudio.DTE.9.0"}, +; {"VS2010", "VisualStudio.DTE.10.0"}, +; {"VS2012", "VisualStudio.DTE.11.0"}, +; {"VS2013", "VisualStudio.DTE.12.0"}, +; {"VS2015", "VisualStudio.DTE.13.0"} +; +; Visual Studio Redistributable Local_Machine Registry Keys +; +; {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"}, +; {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"}, +; {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"}, +; {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"}, +; {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"}, +; {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"}, +; {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"}, +; {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"}, +; {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"}, +; {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"}, +; {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"}, +; {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"} +; +; ****************************************************************************************************************************** +[Install_VS2012] +app5_name = Visual Studio 2012 +app5_setup_argument = /passive /norestart +app5_reg_path = VisualStudio.DTE.11.0 +app5_reg_type = classes_root +app5_setup_file = ..\Data\software\Visual_Studio_2012\vs_professional.exe + +[Install_VS2012_Update4] +app6_name = Visual Studio 2012 - Update 4 +app6_setup_file = ..\Data\software\Visual_Studio_2012_Update_4\VS2012.4.exe +app6_setup_argument = /passive /norestart +app6_reg_path = SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\11.0\CompilerCore\1033 +app6_reg_type = local_machine +app6_reg_value = 11.0.61030 +app6_reg_name = UpdateVersion +app6_reg_compare = eq + +[Install_4882] +app2_name = National Instrument 488.2 (ver. 17) +app2_setup_file = ..\Data\software\NI_4882_v17\setup.exe +app2_setup_argument = /qb /r:n /AcceptLicenses yes +app2_reg_display_name = NI-488.2 17.0 +app2_reg_type = local_machine +app2_reg_value = 17 +app2_reg_name = DisplayVersion +app2_reg_compare = gte +app2_reboot_computer_at_completion = yes +app2_exit_codes_to_ignore = 3010 + +[Install_VXI] +app3_name = National Instrument VXI (ver. 16) +app3_setup_file = ..\Data\software\NI_VXI_v17\setup.exe +app3_setup_argument = /qb /r:n /AcceptLicenses yes +app3_reg_display_name = NI-VXI 16.0 +app3_reg_type = local_machine +app3_reg_value = 16 +app3_reg_name = DisplayVersion +app3_reg_compare = gte +app3_reboot_computer_at_completion = yes +app3_exit_codes_to_ignore = 3010 + +[Install_Perl] +;app1_setup_confirm_prompt = yes +app1_name = ActivePerl 5.6.1.638 +app1_setup_file = ..\Data\software\Perl_5_6\Installer_Silent.bat +app1_exe_file = C:\Perl\bin\perl.exe + +[Install_Redist2013] +app4_name = Visual Studio Redistributable 2013 (x86) +app4_setup_file = ..\Data\software\VS2013_Redistributable\vcredist_x86.EXE +app4_setup_argument = /install /passive /norestart +app4_reg_path = SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} +app4_reg_type = local_machine + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used for enabling windows features +; Only one thing needs to be defined for this section. +; - a text file that lists windows feature name line by line +; +; Possible keys: +; feature_list_file +; +; example: +; windows_feature_list_file = .\feature_list.txt +; ****************************************************************************************************************************** +[Windows_Features] +windows_feature_list_file = .\Repository\windows_feature_list.txt + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to run various applications or scripts +; +; Possible keys: +; app#_description (OPTIONAL. Describe the purpose of running this application) +; app#_path (REQUIRED. Full path and name of the application to be run) +; - the path can take advantage of using macros. Look below for the available macros +; app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application) +; - value is either true/false +; app#_argument (OPTIONAL. Arguments to be passed to the application) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; - sometimes, the argument maybe include equal sign in them, but we can't have equal sign +; in the value of the INI. To make it possible, if an equal sign is needed in the ini file +; use in place of = +; +; app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; Example 1: +; app1_path = C:\ReleaseIB_Production\app.exe +; app1_arguments = -role Datasrv -suite LSPS3 -production +; +; Example 2: +; app1_description = Extracting ActivePerl archive +; app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; +; Example 3: +; app1_description = Extracting ActivePerl archive +; app1_path = {cd_drive}\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; ****************************************************************************************************************************** +[Enable_Network_Sharing] +app3_description = Enabling Network Discovery +app3_path = c:\windows\system32\netsh.exe +app3_is_console = true +app3_argument = advfirewall firewall set rule group"Network Discovery" new enableYes + +app4_description = Enabling File and Printer Sharing +app4_path = c:\windows\system32\netsh.exe +app4_is_console = true +app4_argument = advfirewall firewall set rule group"File and Printer Sharing" new enableYes + +[Extract_Software_Archives] +app1_description = Extracting Visual Studio 2012 archive +app1_cd_label = GUTS Support Appz 1/2 +app1_path = {cd_drive}\DISK1\7-Zip\7z.exe +app1_is_console = true +app1_argument = x "{cd_drive}\DISK1\msvs2012.7z" -o"{user_temp_folder}\vs2012" -y + +app2_description = Extracting Visual Studio 2012 Update 4 archive +app2_cd_label = GUTS Support Appz 1/2 +app2_path = {cd_drive}\DISK1\7-Zip\7z.exe +app2_is_console = true +app2_argument = x "{cd_drive}\DISK1\msvs2012_update4.7z" -o"{user_temp_folder}\vs2012_update4" -y + +app3_description = Extracting NI 488.2 archive +app3_cd_label = GUTS Support Appz 1/2 +app3_path = {cd_drive}\DISK1\7-Zip\7z.exe +app3_is_console = true +app3_argument = x "{cd_drive}\DISK1\ni4882.7z" -o"{user_temp_folder}\ni4882" -y + +app4_description = Extracting NI VXI archive +app4_cd_label = GUTS Support Appz 1/2 +app4_path = {cd_drive}\DISK1\7-Zip\7z.exe +app4_is_console = true +app4_argument = x "{cd_drive}\DISK1\nivxi.7z" -o"{user_temp_folder}\nivxi" -y + +app5_description = Extracting ActivePerl archive +app5_cd_label = GUTS Support Appz 1/2 +app5_path = {cd_drive}\DISK1\7-Zip\7z.exe +app5_is_console = true +app5_argument = x "{cd_drive}\DISK1\Perl.7z" -o"{user_temp_folder}" -y + +[Shut_Down_National_Instruments_Processes] +app1_description = Killing process nierserver.exe +app1_path = C:\Windows\system32\taskkill.exe +app1_is_console = true +app1_argument = /f /im nierserver.exe + +; +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Modify Network Adapter's settings +; +; Possible keys: +; nic#_pci_location ( REQUIRED.) +; - the value must be in the form of: #,#,# ( bus, device, function) +; i.e.: 0,25,0 - bus = 0, device = 25, function = 0 +; nic#_adapter_name (OPTIONAL. Set the name of the network adapter) +; nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,255.255.255.0 +; nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter) +; - the value must be in the form of: #.#.#.# +; i.e.: 192.168.0.1 +; nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,192.168.0.11 +; nic#_link_speed (OPTIONAL. Set the link speed of the network adapter) +; - Before using this option. Make sure that the network adapter supports link speed setting +; This is really a registry change for the network adapter. The registry name is *SpeedDuplex +; The value for *SpeedDuplex is usually a digit ranging from 0-5. +; Here's an example: +; 0 - Auto Negotiate +; 1 - 10Mbps Half Duplex +; 2 - 10Mbps Full Duplex +; 3 - 100Mpbs Half Duplex +; 4 - 100Mbps Full Duplex +; 6 - 1Gpbs Full Duplex +; There's no 5 defined because there's no 1Gpbs Half Duplex +; IMPORTANT: The above example was taken from a Intel network card. These numbers could +; mean something else different from one network card to the next. Refer to the network +; adapter's manufacturer manual for the actual numbers and their meanings. +; +; nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP) +; - the value must be either: true/false +; - if this is set to true, all the other settings above, except link speed, will be ignored +; this will effectively set IP and DNS Servers to be obtained automatically +; +; Example 1: +; nic1_pci_location = 0,25, 0 +; nic1_link_speed = 2 +; nic1_adapter_name = My Connection +; nic1_enable_dhcp = false +; nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0 +; nic1_default_gateway = 192.168.0.1 +; nic1_dns_servers = 192.168.0.5, 192.168.0.6 +; +; ****************************************************************************************************************************** +[Network_Interface_Cards] +nic1_pci_location = 20,0,0 +nic1_adapter_name = Private_top +nic1_ip_and_subnet = 192.168.1.12 , 255.255.255.0 + +nic2_pci_location = 20,0,1 +nic2_adapter_name = Public_bottom +nic2_enable_dhcp = true + +nic3_pci_location = 5,0,0 +nic3_adapter_name = Spare_side_port +nic3_enable_dhcp = true + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to remove/delete various files or folders +; +; Possible keys: +; item (REQUIRED. This is either a file or folder to be removed) +; +; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete +; a folder recursively, add the word "recursive" right after the path separated by a comma +; +; The path can also include user desktop path or temporary folder +; for desktop path, use macro: {user_desktop} +; for temporary folder, use macro: {user_temp_folder} +; +; Example 1 - Delete a file: +; item = A:\test\test.hpp +; +; Example 2 - Delete a folder recursively: +; item = A:\test\test2,recursive +; +; Example 3 - Delete only the files contained in the folder: +; item = A:\test\test2 +; +; Example 4 - Delete a folder on the user's desktop: +; item = {user_desktop}\test2 +; +; Example 5 - Delete a folder in the user's temporary folder +; item = {user_temp_folder}\test2 +; ****************************************************************************************************************************** +[Files_Folders_Removal] +item = {user_temp_folder}\perl,recursive +item = {user_temp_folder}\vs2012,recursive +item = {user_temp_folder}\vs2012_update4,recursive +item = {user_temp_folder}\ni4882,recursive +item = {user_temp_folder}\nivxi,recursive + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to copy various packages of files from a source location to destination location +; Each XML file contains at least 1 package of files. Each file has a source and destination locations +; Key name can be anything +; Value must a be a path to a XML file +; +; example 1: +; file_package = package1.xml +; ****************************************************************************************************************************** +[Files_Transfer_Packages] +file_package = ..\Data\software\control_pc_software_package.xml +file_package = ..\Data\support_files\control_pc_support_package.xml + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Specify all the paths to be created +; Possible keys: +; path (REQUIRED. Valid path to be created) +; +; example: +; path = C:\DataIIB\data\Block_IB\CV +; path = C:\DataIIB\data\Block_IB\General\Logs +; ****************************************************************************************************************************** +[Paths_Creation] +path = D:\ReleaseIB_Engineering\ +path = D:\ReleaseIB_Production\ +path = D:\Development +path = D:\DataIB\data\Block_IB\CV +path = D:\DataIB\data\Block_IB\General\Logs +path = D:\DataIB\data\Block_IB\General\Scripts +path = D:\DataIB\data\Block_IB\General\Temp\SingleStepScript + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; To share a folder, must provide path to a folder. +; Share names are optional as the folder name will be used as the default share name. +; Any share name defined here will be used as additional share name for its corresponding folder +; The # in "path#" must match in both keys. A folder can have more than one share name. +; Possible keys: +; path# (OPTIONAL. A valid path to be shared) +; path#_additional_share_names (OPTIONAL. Additional share names associated with a path) +; - Define one or more shares names separated by comma +; path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control ) +; - if this is not defined, this network share will be accessible to everyone with Full Control +; - if defined, the value must be in the following format: +; User1,User2,User3 (if more than one account is defined, separate by comma) +; The account name must either be a built-in window account or local/domain account +; if the account name is a built-in window account, it can only be one of the following: +; - everyone, authenticated users +; if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName +; +; example: +; path1 = C:\DataIIB\ +; path1_additional_share_names = DataIIB1, DataIIB2 +; path1_allowed_accounts = Authenticated Users,US\1117637 +; path2 = C:\DataIA +; path2__additional_share_names = DataIA_1 +; path2_allowed_accounts = MYCOMPUTERNAME\Duc +; path3 = C:\DataIC +; ****************************************************************************************************************************** +[Paths_Sharing] +path1 = D:\ReleaseIB_Engineering\ +path1_allowed_accounts = Authenticated Users + +path2 = D:\DataIB\ +path2_allowed_accounts = Authenticated Users + +path3 = D:\ReleaseIB_Production\ +path3_allowed_accounts = Authenticated Users + +path4 = D:\Development\ +path4_allowed_accounts = Authenticated Users + +path5 = C:\ +path5_allowed_accounts = Authenticated Users + +path6 = D:\ +path6_allowed_accounts = Authenticated Users + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create windows system environment variables +; the key would be the system environment variable name. +; +; Note: +; Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable +; If a key's name is path, the value specified will be appending to existing value +; +; path can have one or more values separated by commas +; Example: +; path = C:\folder1 +; path = C:\folder1, C:\folder2 +; ****************************************************************************************************************************** +[Env_Variables] +; the address of the computer where all the data of each test is saved before being pushed to the network +SM3_SKR_SERVER = ste_control_local +; the address of the computer where all test data are pushed to after testing +SM3_SKR_NETWORK = sm3na02 +path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Add/Modify or Delete registry's key +; +; Possible keys: +; reg#_action ( REQUIRED. What action to perform) +; - there are only 2 actions ( add/modify, delete) +; reg#_path (REQUIRED. Registry folder path, not including valuename) +; reg#_type (REQUIRED) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; reg#_name_value_pair# (Optional. Registry name values and their names) +; - the registry key defined by registry path can have multiple value names and their associated values +; - Format of the value: [name:***,value:***,type:***] - replace *** with actual text +; - name can be anything +; - value is either numeric or alphanumeric depending on type +; - type can only be 1 of 4: string, multi_string, dword, qword +; If type is dword or qword then value can only be numeric +; If type is multi-string, then format of the value must be: +; [name:***,:value:***:value:***...,type:multi_string] +; +; Example 1: +; reg1_action = add/modify +; reg1_path = SOFTWARE\MySoftware\ +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version,value:3,type:string] +; reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string] +; +; Example 2: +; reg1_action = add/modify +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; +; Example3: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version] +; +; Example4: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; ****************************************************************************************************************************** +[Windows_Registry] +reg1_action = add/modify +reg1_path = SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 +reg1_type = local_machine +reg1_name_value_pair1 = [name:BackConnectionHostNames,:value:ste_control_local,type:multi_string] + +reg2_action = add/modify +reg2_path = SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters +reg2_type = local_machine +reg2_name_value_pair1 = [name:DisableStrictNameChecking,value:1,type:dword] + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create shortcuts on the user's desktop +; +; example: +; shortcut1_name = Data Server +; shortcut1_target_path = C:\ReleaseIB_Production\app.exe +; shortcut1_arguments = -role datasrv -suite lsps3 -production +; ****************************************************************************************************************************** +[Windows_Shortcuts] +shortcut1_name = GUTS Startup +shortcut1_target_path = C:\Perl\bin\perl.exe +shortcut1_arguments = D:\ReleaseIB_Production\startup.pl +shortcut1_for_all_users = true + +shortcut2_name = WidebandAccount +shortcut2_target_path = D:\ReleaseIB_Production\WidebandAccount.bat +shortcut2_for_all_users = true + +shortcut3_name = Resman +shortcut3_target_path = C:\Program Files (x86)\National Instruments\VXI\Resman.exe +shortcut3_for_all_users = true + + diff --git a/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_dev_pc.ini b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_dev_pc.ini new file mode 100644 index 0000000..bcac99f --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_dev_pc.ini @@ -0,0 +1,596 @@ +; ************************************************* SM3 CONFIGURATION FILE ***************************************************** +; Description: +; This is an INI file which contains the configuration information for the automated setup of either an +; ENGINEERING or PRODUCTION environment for developing or running SM3 GUTS (Guidance Unit Test Software) +; +; Author: Duc Le +; +; ****************************************************************************************************************************** +; +; +; +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +[General] +Program_Name = SM3 Block IB - Dev PC +; 64-bit or 32-bit. Possible values: 32 or 64 +Application_Platform = 32 + +[Global_Settings] +Always_Run_Application_Using_Admin_Account = true +Suppress_All_Prompts = true +Provide_Windows_Password_For_Auto_Login = false + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step +; The key can be anything. +; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name +; Below is a list of all possible setup steps: +; CONFIGURE_NETWORK_ADAPTERS +; RUN_APPLICATIONS +; INSTALL_SOFTWARE_PACKAGES +; ENABLE_INTERNET_INFORMATION_SERVICES +; CREATE_DIRECTORIES +; CREATE_NETWORK_SHARES +; SET_ENVIRONMENT_VARIABLES +; SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +; TRANSFER_FILE_PACKAGES +; MODIFY_WINDOWS_REGISTRY +; PROCESS_GUTS_CONFIG_FILE +; CREATE_WINDOWS_SHORTCUTS +; ASSIST_BUILDING_GUTS_APP +; REMOVE_FILES_FOLDERS +; +; The setup setup can be run more than once by creating another key and assigned the setup step to it +; Each setup step needs a section name. Section name provides all the information necessary for the setup step +; The sequence of the execution of the setup steps will be in the same order as they are specified. +; ****************************************************************************************************************************** +[Setup_Step_Manager] +step = RUN_APPLICATIONS,Import_Trusted_Publisher_Certificates +step = INSTALL_SOFTWARE_PACKAGES,Install_VS2012 +step = INSTALL_SOFTWARE_PACKAGES,Install_VS2012_Update4 +step = INSTALL_SOFTWARE_PACKAGES,Install_Sapera +step = INSTALL_SOFTWARE_PACKAGES,Install_PX4_Driver +step = INSTALL_SOFTWARE_PACKAGES,Install_LabWindows_CVI +step = RUN_APPLICATIONS,Enable_Network_Sharing +step = CREATE_DIRECTORIES,Paths_Creation +step = CREATE_NETWORK_SHARES,Paths_Sharing +step = MODIFY_WINDOWS_REGISTRY,Windows_Registry +step = CONFIGURE_NETWORK_ADAPTERS,Network_Interface_Cards +step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages +step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to install various software application +; For each software application to be installed, 4 things can be defined: +; +; Possible keys: +; app#_name (REQUIRED. Name of the application to be installed/checked) +; app#_setup_file (OPTIONAL. Path and name of the installer) +; - the setup file can make use of macros. Look below for the available macros +; app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.) +; - possible values: yes, no +; - yes: there will be prompt asking user confirm/refuse install +; - no: installation will start automatically ( this is the default ) +; app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. +; This is used to verify that the software successfully installed) +; app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename) +; app#_reg_type (REQUIRED only if app#_reg_key is specified) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value) +; app#_reg_name (REQUIRED only if app#_reg_key is specified. Registry value name) +; app#_reg_compare (REQUIRED only if app#_reg_key is specified. Compare operator between value name's value specified here versus actual value read from registry) +; - there are only six options for this key ( eq, lt, gt, lte, gte, ne ) +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; example 1: +; app1_name = Perl 5.6.1.638 +; app1_setup_file = {user_temp_folder}\Installer.bat +; app1_exe_file = C:\Perl\bin\perl.exe +; +; example 2: +; app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion +; app1_reg_type = local_machine +; app1_reg_value = 15.0 +; app1_reg_name = Version +; app1_reg_compare = gte +; app1_name = National Instrument 488.2 (v15 or higher) +; app1_setup_file = C:\ni\setup.exe +; +; example 3: +; app1_exe_file = C:\Perl\bin\perl.exe +; app1_name = Perl 5.6.1.638 +; +; example 4: +; app1_name = Sapera LT 8.11 (x64) +; app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe +; app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" +; app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT +; app1_reg_type = local_machine +; app1_reg_name = IsSaperaFrameGrabberSupport +; +; ****************************************************************************************************************************** +; Visual Studio ClassRoot Registry Keys +; +; {"VS2005", "VisualStudio.DTE.8.0"}, +; {"VS2008", "VisualStudio.DTE.9.0"}, +; {"VS2010", "VisualStudio.DTE.10.0"}, +; {"VS2012", "VisualStudio.DTE.11.0"}, +; {"VS2013", "VisualStudio.DTE.12.0"}, +; {"VS2015", "VisualStudio.DTE.13.0"} +; +; Visual Studio Redistributable Local_Machine Registry Keys +; +; {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"}, +; {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"}, +; {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"}, +; {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"}, +; {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"}, +; {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"}, +; {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"}, +; {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"}, +; {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"}, +; {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"}, +; {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"}, +; {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"} +; +; ****************************************************************************************************************************** +[Install_VS2012] +app1_name = Visual Studio 2012 +app1_setup_argument = /passive /norestart +app1_reg_path = VisualStudio.DTE.11.0 +app1_reg_type = classes_root +app1_setup_file = ..\Data\software\Visual_Studio_2012\vs_professional.exe + +[Install_VS2012_Update4] +app2_name = Visual Studio 2012 - Update 4 +app2_setup_file = ..\Data\software\Visual_Studio_2012_Update_4\\VS2012.4.exe +app2_setup_argument = /passive /norestart +app2_reg_path = SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\11.0\CompilerCore\1033 +app2_reg_type = local_machine +app2_reg_value = 11.0.61030 +app2_reg_name = UpdateVersion +app2_reg_compare = eq + +[Install_Sapera] +app3_name = Sapera LT 8.11 (x64) +app3_setup_argument = -s -f1"{app3_setup_file}\sapera_setup.iss" +app3_setup_file = ..\Data\software\SaperaLT_Runtime_8_11\Sapera_LT_8.11_RuntimeSetup.exe +app3_reg_display_name = Teledyne DALSA Sapera LT Runtime 8.11.00.1621 (Frame grabbers and CameraLink cameras) +app3_reg_type = local_machine +app3_reg_value = 8.11 +app3_reg_name = DisplayVersion +app3_reg_compare = gte +app3_reboot_computer_at_completion = yes + +[Install_PX4_Driver] +app4_name = Xcelera-LVDS PX4 Device Driver (x64) +app4_setup_argument = -s -f1"{app4_setup_file}\px4_setup.iss" +app4_setup_file = ..\Data\software\TeledyneDalsa_FrameGrabber\X64_Xcelera-LVDS_PX4_1.10.01.0223.exe +app4_reg_path = SOFTWARE\Teledyne DALSA\X64 Xcelera-LVDS PX4 Device Driver +app4_reg_type = local_machine +app4_reg_name = Current Version +app4_reg_value = 1.10.01.0223 +app4_reg_compare = eq + +[Install_LabWindows_CVI] +app5_name = NI LabWindows/CVI Runtime (v. 17) +app5_setup_file = ..\Data\software\NI_LabWindows_CVI_Runtime_v17\setup.exe +app5_setup_argument = /qb /r:n /AcceptLicenses yes +app5_reg_display_name = NI LabWindows/CVI SxS Runtime 2017 +app5_reg_type = local_machine +app5_reg_value = 17 +app5_reg_name = DisplayVersion +app5_reg_compare = gte +app5_setup_reboot_computer = yes + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used for enabling windows features +; Only one thing needs to be defined for this section. +; - a text file that lists windows feature name line by line +; +; Possible keys: +; feature_list_file +; +; example: +; windows_feature_list_file = .\feature_list.txt +; ****************************************************************************************************************************** +[Windows_Features] +windows_feature_list_file = .\Repository\windows_feature_list.txt + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to run various applications or scripts +; +; Possible keys: +; app#_description (OPTIONAL. Describe the purpose of running this application) +; app#_path (REQUIRED. Full path and name of the application to be run) +; - the path can take advantage of using macros. Look below for the available macros +; app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application) +; - value is either true/false +; app#_argument (OPTIONAL. Arguments to be passed to the application) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; - sometimes, the argument maybe include equal sign in them, but we can't have equal sign +; in the value of the INI. To make it possible, if an equal sign is needed in the ini file +; use in place of = +; +; app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; Example 1: +; app1_path = C:\ReleaseIB_Production\app.exe +; app1_arguments = -role Datasrv -suite LSPS3 -production +; +; Example 2: +; app1_description = Extracting ActivePerl archive +; app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; +; Example 3: +; app1_description = Extracting ActivePerl archive +; app1_path = {cd_drive}\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; ****************************************************************************************************************************** +[Enable_Network_Sharing] +app3_description = Enabling Network Discovery +app3_path = c:\windows\system32\netsh.exe +app3_is_console = true +app3_argument = advfirewall firewall set rule group"Network Discovery" new enableYes + +app4_description = Enabling File and Printer Sharing +app4_path = c:\windows\system32\netsh.exe +app4_is_console = true +app4_argument = advfirewall firewall set rule group"File and Printer Sharing" new enableYes + +[Extract_Software_Archives] +app1_description = Extracting Visual Studio 2012 archive +app1_cd_label = GUTS Support Appz 1/2 +app1_path = {cd_drive}\DISK1\7-Zip\7z.exe +app1_is_console = true +app1_argument = x "{cd_drive}\DISK1\msvs2012.7z" -o"{user_temp_folder}\vs2012" -y + +app2_description = Extracting Visual Studio 2012 Update 4 archive +app2_cd_label = GUTS Support Appz 1/2 +app2_path = {cd_drive}\DISK1\7-Zip\7z.exe +app2_is_console = true +app2_argument = x "{cd_drive}\DISK1\msvs2012_update4.7z" -o"{user_temp_folder}\vs2012_update4" -y + +app3_description = Extracting TeledyneDalsa archive +app3_cd_label = GUTS Support Appz 1/2 +app3_path = {cd_drive}\DISK1\7-Zip\7z.exe +app3_is_console = true +app3_argument = x "{cd_drive}\DISK1\TeledyneDalsa.7z" -o"{user_temp_folder}\TeledyneDalsa" -y + +app4_description = Extracting NI LabWindows/CVI Runtime 2017 archive +app4_cd_label = GUTS Support Appz 2/2 +app4_path = {cd_drive}\DISK2\7-Zip\7z.exe +app4_is_console = true +app4_argument = x "{cd_drive}\DISK2\NI_LabWindows_CVI_Runtime_2017.7z" -o"{user_temp_folder}\NI_LabWindows_CVI_Runtime_2017" -y + +[Import_Trusted_Publisher_Certificates] +app3_description = Importing trusted publisher certificate for Teledyne DALSA +app3_path = c:\windows\system32\certutil.exe +app3_is_console = true +app3_argument_path1 = ..\Data\software\TeledyneDalsa_FrameGrabber +app3_argument = -addstore "TrustedPublisher" "{app3_argument_path1}\teledyne_dalsa_trusted_publisher.cer" + +; +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Modify Network Adapter's settings +; +; Possible keys: +; nic#_pci_location ( REQUIRED.) +; - the value must be in the form of: #,#,# ( bus, device, function) +; i.e.: 0,25,0 - bus = 0, device = 25, function = 0 +; nic#_adapter_name (OPTIONAL. Set the name of the network adapter) +; nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,255.255.255.0 +; nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter) +; - the value must be in the form of: #.#.#.# +; i.e.: 192.168.0.1 +; nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,192.168.0.11 +; nic#_link_speed (OPTIONAL. Set the link speed of the network adapter) +; - Before using this option. Make sure that the network adapter supports link speed setting +; This is really a registry change for the network adapter. The registry name is *SpeedDuplex +; The value for *SpeedDuplex is usually a digit ranging from 0-5. +; Here's an example: +; 0 - Auto Negotiate +; 1 - 10Mbps Half Duplex +; 2 - 10Mbps Full Duplex +; 3 - 100Mpbs Half Duplex +; 4 - 100Mbps Full Duplex +; 6 - 1Gpbs Full Duplex +; There's no 5 defined because there's no 1Gpbs Half Duplex +; IMPORTANT: The above example was taken from a Intel network card. These numbers could +; mean something else different from one network card to the next. Refer to the network +; adapter's manufacturer manual for the actual numbers and their meanings. +; +; nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP) +; - the value must be either: true/false +; - if this is set to true, all the other settings above, except link speed, will be ignored +; this will effectively set IP and DNS Servers to be obtained automatically +; +; Example 1: +; nic1_pci_location = 0,25, 0 +; nic1_link_speed = 2 +; nic1_adapter_name = My Connection +; nic1_enable_dhcp = false +; nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0 +; nic1_default_gateway = 192.168.0.1 +; nic1_dns_servers = 192.168.0.5, 192.168.0.6 +; +; ****************************************************************************************************************************** +[Network_Interface_Cards] +nic1_pci_location = 17,0,0 +nic1_adapter_name = Private_top +nic1_ip_and_subnet = 192.168.1.3 , 255.255.255.0 + +nic2_pci_location = 17,0,1 +nic2_adapter_name = Public_bottom +nic2_enable_dhcp = true + +nic3_pci_location = 5,0,0 +nic3_adapter_name = UUT_NodeA_side_port1 +nic3_ip_and_subnet = 192.168.10.201 , 255.255.255.0 +nic3_link_speed = 3 + +nic4_pci_location = 9,0,0 +nic4_adapter_name = UUT_NodeB_side_port2 +nic4_ip_and_subnet = 192.168.10.200 , 255.255.255.0 +nic4_link_speed = 3 + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to remove/delete various files or folders +; +; Possible keys: +; item (REQUIRED. This is either a file or folder to be removed) +; +; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete +; a folder recursively, add the word "recursive" right after the path separated by a comma +; +; The path can also include user desktop path or temporary folder +; for desktop path, use macro: {user_desktop} +; for temporary folder, use macro: {user_temp_folder} +; +; Example 1 - Delete a file: +; item = A:\test\test.hpp +; +; Example 2 - Delete a folder recursively: +; item = A:\test\test2,recursive +; +; Example 3 - Delete only the files contained in the folder: +; item = A:\test\test2 +; +; Example 4 - Delete a folder on the user's desktop: +; item = {user_desktop}\test2 +; +; Example 5 - Delete a folder in the user's temporary folder +; item = {user_temp_folder}\test2 +; ****************************************************************************************************************************** +[Files_Folders_Removal] +item = {user_temp_folder}\vs2012,recursive +item = {user_temp_folder}\vs2012_update4,recursive +item = {user_temp_folder}\TeledyneDalsa,recursive +item = {user_temp_folder}\NI_LabWindows_CVI_Runtime_2017,recursive + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to copy various packages of files from a source location to destination location +; Each XML file contains at least 1 package of files. Each file has a source and destination locations +; Key name can be anything +; Value must a be a path to a XML file +; +; example 1: +; file_package = package1.xml +; ****************************************************************************************************************************** +[Files_Transfer_Packages] +file_package = ..\Data\software\Dev_PC_Software_Package.xml +file_package = ..\Data\support_files\Dev_PC_Support_Package.xml + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Specify all the paths to be created +; Possible keys: +; path (REQUIRED. Valid path to be created) +; +; example: +; path = C:\DataIIB\data\Block_IB\CV +; path = C:\DataIIB\data\Block_IB\General\Logs +; ****************************************************************************************************************************** +[Paths_Creation] +path = D:\ReleaseIB_Production +path = D:\ReleaseIB_Engineering +path = D:\Data +path = D:\Data\RealTimeTM_data +path = D:\Development +path = D:\ReleaseIB_Production\REAL_TIME_TM +path = D:\ReleaseIB_Production\CorecoFrameGrabber\Video_Captures + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; To share a folder, must provide path to a folder. +; Share names are optional as the folder name will be used as the default share name. +; Any share name defined here will be used as additional share name for its corresponding folder +; The # in "path#" must match in both keys. A folder can have more than one share name. +; Possible keys: +; path# (OPTIONAL. A valid path to be shared) +; path#_additional_share_names (OPTIONAL. Additional share names associated with a path) +; - Define one or more shares names separated by comma +; path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control ) +; - if this is not defined, this network share will be accessible to everyone with Full Control +; - if defined, the value must be in the following format: +; User1,User2,User3 (if more than one account is defined, separate by comma) +; The account name must either be a built-in window account or local/domain account +; if the account name is a built-in window account, it can only be one of the following: +; - everyone, authenticated users +; if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName +; +; example: +; path1 = C:\DataIIB\ +; path1_additional_share_names = DataIIB1, DataIIB2 +; path1_allowed_accounts = Authenticated Users,US\1117637 +; path2 = C:\DataIA +; path2__additional_share_names = DataIA_1 +; path2_allowed_accounts = MYCOMPUTERNAME\Duc +; path3 = C:\DataIC +; ****************************************************************************************************************************** +[Paths_Sharing] +path1 = D:\ReleaseIB_Production\ +path1_allowed_accounts = Authenticated Users + +path2 = D:\ReleaseIB_Engineering\ +path2_allowed_accounts = Authenticated Users + +path3 = D:\Data\ +path3_allowed_accounts = Authenticated Users + +path4 = D:\Development\ +path4_allowed_accounts = Authenticated Users + +path5 = D:\ReleaseIB_Production\REAL_TIME_TM +path5_allowed_accounts = Authenticated Users + +path6 = C:\ +path6_allowed_accounts = Authenticated Users + +path7 = D:\ +path7_allowed_accounts = Authenticated Users + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create windows system environment variables +; the key would be the system environment variable name. +; +; Note: +; Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable +; If a key's name is path, the value specified will be appendeding to existing value +; +; path can have one or more values separated by commas +; Example: +; path = C:\folder1 +; path = C:\folder1, C:\folder2 +; ****************************************************************************************************************************** +[Env_Variables] +;SM3_SEEKER = C:\Development\GUTS\SM3 +; the address of the computer where all the data of each test is saved before being pushed to the network +;SM3_SKR_SERVER = localhost +; the address of the computer where all test data are pushed to after testing +;SM3_SKR_NETWORK = localhost +;path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Add/Modify or Delete registry's key +; +; Possible keys: +; reg#_action ( REQUIRED. What action to perform) +; - there are only 2 actions ( add/modify, delete) +; reg#_path (REQUIRED. Registry folder path, not including valuename) +; reg#_type (REQUIRED) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; reg#_name_value_pair# (Optional. Registry name values and their names) +; - the registry key defined by registry path can have multiple value names and their associated values +; - Format of the value: [name:***,value:***,type:***] - replace *** with actual text +; - name can be anything +; - value is either numeric or alphanumeric depending on type +; - type can only be 1 of 4: string, multi-string, dword, qword +; If type is dword or qword then value can only be numeric +; If type is multi-string, then format of the value must be: +; [name:***,:value:***:value:***...,type:multi-string] +; +; Example 1: +; reg1_action = add/modify +; reg1_path = SOFTWARE\MySoftware\ +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version,value:3,type:string] +; reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string] +; +; Example 2: +; reg1_action = add/modify +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; +; Example3: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version] +; +; Example4: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; ****************************************************************************************************************************** +[Windows_Registry] +reg1_action = add/modify +reg1_path = SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 +reg1_type = local_machine +reg1_name_value_pair1 = [name:BackConnectionHostNames,:value:ste_gu_dev_local,type:multi_string] + +reg2_action = add/modify +reg2_path = SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters +reg2_type = local_machine +reg2_name_value_pair1 = [name:DisableStrictNameChecking,value:1,type:dword] + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create shortcuts on the user's desktop +; +; example: +; shortcut1_name = Data Server +; shortcut1_target_path = C:\ReleaseIB_Production\app.exe +; shortcut1_arguments = -role datasrv -suite lsps3 -production +; ****************************************************************************************************************************** +[Windows_Shortcuts] +shortcut1_name = CorecoFrameGrabber +shortcut1_target_path = D:\ReleaseIB_Production\CorecoFrameGrabber\CorecoFrameGrabber.exe +shortcut1_for_all_users = true + +shortcut2_name = RealTime TM +shortcut2_target_path = D:\ReleaseIB_Production\REAL_TIME_TM\RealTimeTm.exe +shortcut2_for_all_users = true + +shortcut3_name = ASP Diagnostics GUI +shortcut3_target_path = D:\ReleaseIB_Production\ASP Diagnostics GUI\diag_64.exe +shortcut3_for_all_users = true + diff --git a/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_engineering.ini b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_engineering.ini new file mode 100644 index 0000000..1dff77c --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/Config_Files/config_engineering.ini @@ -0,0 +1,636 @@ +; ************************************************* SM3 CONFIGURATION FILE ***************************************************** +; Description: +; This is an INI file which contains the configuration information for the automated setup of either an +; ENGINEERING or PRODUCTION environment for developing or running SM3 GUTS (Guidance Unit Test Software) +; +; Author: Duc Le +; +; ****************************************************************************************************************************** +; +; +; +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +[General] +Program_Name = SM3 Block IB - Engineering Setup +; 64-bit or 32-bit. Possible values: 32 or 64 +Application_Platform = 32 + +[Global_Settings] +Always_Run_Application_Using_Admin_Account = true +Suppress_All_Prompts = true +Provide_Windows_Password_For_Auto_Login = false + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step +; The key can be anything. +; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name +; Below is a list of all possible setup steps: +; CONFIGURE_NETWORK_ADAPTERS +; RUN_APPLICATIONS +; INSTALL_SOFTWARE_PACKAGES +; ENABLE_INTERNET_INFORMATION_SERVICES +; CREATE_DIRECTORIES +; CREATE_NETWORK_SHARES +; SET_ENVIRONMENT_VARIABLES +; SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS +; TRANSFER_FILE_PACKAGES +; MODIFY_WINDOWS_REGISTRY +; PROCESS_GUTS_CONFIG_FILE +; CREATE_WINDOWS_SHORTCUTS +; ASSIST_BUILDING_GUTS_APP +; REMOVE_FILES_FOLDERS +; +; The setup setup can be run more than once by creating another key and assigned the setup step to it +; Each setup step needs a section name. Section name provides all the information necessary for the setup step +; The sequence of the execution of the setup steps will be in the same order as they are specified. +; ****************************************************************************************************************************** +[Setup_Step_Manager] +;step = RUN_APPLICATIONS,Extract_Software_Archives +step = INSTALL_SOFTWARE_PACKAGES,Install_Software +step = CREATE_DIRECTORIES,Paths_Creation +step = CREATE_NETWORK_SHARES,Paths_Sharing +step = SET_ENVIRONMENT_VARIABLES,Env_Variables +step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages +step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts +;step = RUN_APPLICATIONS,Shut_Down_National_Instruments_Processes +;step = REMOVE_FILES_FOLDERS , Files_Folders_Removal + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to install various software application +; For each software application to be installed, 4 things can be defined: +; +; Possible keys: +; app#_name (REQUIRED. Name of the application to be installed/checked) +; app#_setup_file (OPTIONAL. Path and name of the installer) +; - the setup file can make use of macros. Look below for the available macros +; app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.) +; - possible values: yes, no +; - yes: there will be prompt asking user confirm/refuse install +; - no: installation will start automatically ( this is the default ) +; app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. +; This is used to verify that the software successfully installed) +; app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename) +; app#_reg_type (REQUIRED only if app#_reg_key is specified) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value) +; app#_reg_name (REQUIRED only if app#_reg_key is specified. Registry value name) +; app#_reg_compare (REQUIRED only if app#_reg_key is specified. Compare operator between value name's value specified here versus actual value read from registry) +; - there are only six options for this key ( eq, lt, gt, lte, gte, ne ) +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; example 1: +; app1_name = Perl 5.6.1.638 +; app1_setup_file = {user_temp_folder}\Installer.bat +; app1_exe_file = C:\Perl\bin\perl.exe +; +; example 2: +; app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion +; app1_reg_type = local_machine +; app1_reg_value = 15.0 +; app1_reg_name = Version +; app1_reg_compare = gte +; app1_name = National Instrument 488.2 (v15 or higher) +; app1_setup_file = C:\ni\setup.exe +; +; example 3: +; app1_exe_file = C:\Perl\bin\perl.exe +; app1_name = Perl 5.6.1.638 +; +; example 4: +; app1_name = Sapera LT 8.11 (x64) +; app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe +; app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" +; app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT +; app1_reg_type = local_machine +; app1_reg_name = IsSaperaFrameGrabberSupport +; +; ****************************************************************************************************************************** +; Visual Studio ClassRoot Registry Keys +; +; {"VS2005", "VisualStudio.DTE.8.0"}, +; {"VS2008", "VisualStudio.DTE.9.0"}, +; {"VS2010", "VisualStudio.DTE.10.0"}, +; {"VS2012", "VisualStudio.DTE.11.0"}, +; {"VS2013", "VisualStudio.DTE.12.0"}, +; {"VS2015", "VisualStudio.DTE.13.0"} +; +; Visual Studio Redistributable Local_Machine Registry Keys +; +; {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"}, +; {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"}, +; {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"}, +; {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"}, +; {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"}, +; {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"}, +; {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"}, +; {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"}, +; {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"}, +; {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"}, +; {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"}, +; {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"} +; +; ****************************************************************************************************************************** +[Install_Software] +app5_name = Visual Studio 2012 +app5_setup_argument = /passive /norestart +app5_reg_path = VisualStudio.DTE.11.0 +app5_reg_type = classes_root +app5_setup_file = ..\Data\software\Visual_Studio_2012\vs_professional.exe + +app6_name = Visual Studio 2012 - Update 4 +app6_setup_file = ..\Data\software\Visual_Studio_2012_Update_4\VS2012.4.exe +app6_setup_argument = /passive /norestart +app6_reg_path = SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\11.0\CompilerCore\1033 +app6_reg_type = local_machine +app6_reg_value = 11.0.61030 +app6_reg_name = UpdateVersion +app6_reg_compare = eq + +app2_name = National Instrument 488.2 (ver. 17) +app2_setup_file = ..\Data\software\NI_4882_v17\setup.exe +app2_setup_argument = /qb /r:n /AcceptLicenses yes +app2_reg_display_name = NI-488.2 17.0 +app2_reg_type = local_machine +app2_reg_value = 17 +app2_reg_name = DisplayVersion +app2_reg_compare = gte +app2_reboot_computer_at_completion = yes +app2_exit_codes_to_ignore = 3010 + +app3_name = National Instrument VXI (ver. 16) +app3_setup_file = ..\Data\software\NI_VXI_v17\setup.exe +app3_setup_argument = /qb /r:n /AcceptLicenses yes +app3_reg_display_name = NI-VXI 16.0 +app3_reg_type = local_machine +app3_reg_value = 16 +app3_reg_name = DisplayVersion +app3_reg_compare = gte +app3_reboot_computer_at_completion = yes +app3_exit_codes_to_ignore = 3010 + +app7_name = Sapera LT 8.11 (x64) +app7_setup_argument = -s -f1"{app7_setup_file}\sapera_setup.iss" +app7_setup_file = ..\Data\software\TeledyneDalsa_FrameGrabber\Sapera_LT_8.11_RuntimeSetup.exe +app7_reg_display_name = Teledyne DALSA Sapera LT Runtime 8.11.00.1621 (Frame grabbers and CameraLink cameras) +app7_reg_type = local_machine +app7_reg_value = 8.11 +app7_reg_name = DisplayVersion +app7_reg_compare = gte +app7_reboot_computer_at_completion = yes + +;app1_setup_confirm_prompt = yes +app1_name = ActivePerl 5.6.1.638 +app1_setup_file = ..\Data\software\Perl_5_6\Installer_Silent.bat +app1_exe_file = C:\Perl\bin\perl.exe + +app4_name = Visual Studio Redistributable 2013 (x86) +app4_setup_file = ..\Data\software\VS2013_Redistributable\vcredist_x86.EXE +app4_setup_argument = /install /passive /norestart +app4_reg_path = SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1} +app4_reg_type = local_machine + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used for enabling windows features +; Only one thing needs to be defined for this section. +; - a text file that lists windows feature name line by line +; +; Possible keys: +; feature_list_file +; +; example: +; windows_feature_list_file = .\feature_list.txt +; ****************************************************************************************************************************** +[Windows_Features] +windows_feature_list_file = ..\Data\windows_feature_list.txt + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to run various applications or scripts +; +; Possible keys: +; app#_description (OPTIONAL. Describe the purpose of running this application) +; app#_path (REQUIRED. Full path and name of the application to be run) +; - the path can take advantage of using macros. Look below for the available macros +; app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application) +; - value is either true/false +; app#_argument (OPTIONAL. Arguments to be passed to the application) +; - sometimes the argument can include paths. Some programs will require absolute path while others allow relative paths +; the user has the option of specifying relative paths in the argument and have the program resolve them at runtime +; In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument +; - the argument can specify {app#_path} +; - the argument can make use of macros. Look below for the available macros +; - the actual path being inserted in the argument will not have backslash at the end of the path +; - sometimes, the argument maybe include equal sign in them, but we can't have equal sign +; in the value of the INI. To make it possible, if an equal sign is needed in the ini file +; use in place of = +; +; app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument +; +; Available Path macros: +; {user_desktop}, {user_temp_folder}, {cd_drive} +; +; Example 1: +; app1_path = C:\ReleaseIB_Production\app.exe +; app1_arguments = -role Datasrv -suite LSPS3 -production +; +; Example 2: +; app1_description = Extracting ActivePerl archive +; app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; +; Example 3: +; app1_description = Extracting ActivePerl archive +; app1_path = {cd_drive}\7-Zip\7z.exe +; app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\ +; app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y +; ****************************************************************************************************************************** +[Extract_Software_Archives] +;app1_description = Extracting Visual Studio 2012 archive +;app1_cd_label = GUTS Support Appz 1/2 +;app1_path = {cd_drive}\DISK1\7-Zip\7z.exe +;app1_is_console = true +;app1_argument = x "{cd_drive}\DISK1\msvs2012.7z" -o"{user_temp_folder}\vs2012" -y + +;app2_description = Extracting Visual Studio 2012 Update 4 archive +;app2_cd_label = GUTS Support Appz 1/2 +;app2_path = {cd_drive}\DISK1\7-Zip\7z.exe +;app2_is_console = true +;app2_argument = x "{cd_drive}\DISK1\msvs2012_update4.7z" -o"{user_temp_folder}\vs2012_update4" -y + +app3_description = Extracting NI 488.2 v17 archive +app3_cd_label = GUTS Support Appz 1/2 +app3_path = E:\Duc\IB_Appz\DISK1\7-Zip\7z.exe +app3_is_console = true +app3_argument = x "E:\Duc\IB_Appz\DISK1\NI_4882_v17.7z" -o"{user_temp_folder}" -y + +app4_description = Extracting NI VXI v16 archive +app4_cd_label = GUTS Support Appz 1/2 +app4_path = E:\Duc\IB_Appz\DISK1\7-Zip\7z.exe +app4_is_console = true +app4_argument = x "E:\Duc\IB_Appz\DISK1\NI_VXI_v17.7z" -o"{user_temp_folder}" -y + +app5_description = Extracting ActivePerl 5.6 archive +app5_cd_label = GUTS Support Appz 1/2 +app5_path = E:\Duc\IB_Appz\DISK1\7-Zip\7z.exe +app5_is_console = true +app5_argument = x "E:\Duc\IB_Appz\DISK1\Perl_5_6.7z" -o"{user_temp_folder}" -y + +app6_description = Extracting Teledyne Dalsa SaperaLT Runtime 8.11 archive +app6_cd_label = GUTS Support Appz 1/2 +app6_path = E:\Duc\IB_Appz\DISK1\7-Zip\7z.exe +app6_is_console = true +app6_argument = x "E:\Duc\IB_Appz\DISK1\SaperaLT_Runtime_8_11.7z" -o"{user_temp_folder}" -y + +[Shut_Down_National_Instruments_Processes] +app1_description = Killing process nierserver.exe +app1_path = C:\Windows\system32\taskkill.exe +app1_is_console = true +app1_argument = /f /im nierserver.exe + +; +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Modify Network Adapter's settings +; +; Possible keys: +; nic#_pci_location ( REQUIRED.) +; - the value must be in the form of: #,#,# ( bus, device, function) +; i.e.: 0,25,0 - bus = 0, device = 25, function = 0 +; nic#_adapter_name (OPTIONAL. Set the name of the network adapter) +; nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,255.255.255.0 +; nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter) +; - the value must be in the form of: #.#.#.# +; i.e.: 192.168.0.1 +; nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter) +; - the value must be in the form of: #.#.#.#,#.#.#.# +; i.e.: 192.168.0.10,192.168.0.11 +; nic#_link_speed (OPTIONAL. Set the link speed of the network adapter) +; - Before using this option. Make sure that the network adapter supports link speed setting +; This is really a registry change for the network adapter. The registry name is *SpeedDuplex +; The value for *SpeedDuplex is usually a digit ranging from 0-5. +; Here's an example: +; 0 - Auto Negotiate +; 1 - 10Mbps Half Duplex +; 2 - 10Mbps Full Duplex +; 3 - 100Mpbs Half Duplex +; 4 - 100Mbps Full Duplex +; 6 - 1Gpbs Full Duplex +; There's no 5 defined because there's no 1Gpbs Half Duplex +; IMPORTANT: The above example was taken from a Intel network card. These numbers could +; mean something else different from one network card to the next. Refer to the network +; adapter's manufacturer manual for the actual numbers and their meanings. +; +; nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP) +; - the value must be either: true/false +; - if this is set to true, all the other settings above, except link speed, will be ignored +; this will effectively set IP and DNS Servers to be obtained automatically +; +; Example 1: +; nic1_pci_location = 0,25, 0 +; nic1_link_speed = 2 +; nic1_adapter_name = My Connection +; nic1_enable_dhcp = false +; nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0 +; nic1_default_gateway = 192.168.0.1 +; nic1_dns_servers = 192.168.0.5, 192.168.0.6 +; +; ****************************************************************************************************************************** +[Network_Interface_Cards] + + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to remove/delete various files or folders +; +; Possible keys: +; item (REQUIRED. This is either a file or folder to be removed) +; +; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete +; a folder recursively, add the word "recursive" right after the path separated by a comma +; +; The path can also include user desktop path or temporary folder +; for desktop path, use macro: {user_desktop} +; for temporary folder, use macro: {user_temp_folder} +; +; Example 1 - Delete a file: +; item = A:\test\test.hpp +; +; Example 2 - Delete a folder recursively: +; item = A:\test\test2,recursive +; +; Example 3 - Delete only the files contained in the folder: +; item = A:\test\test2 +; +; Example 4 - Delete a folder on the user's desktop: +; item = {user_desktop}\test2 +; +; Example 5 - Delete a folder in the user's temporary folder +; item = {user_temp_folder}\test2 +; ****************************************************************************************************************************** +[Files_Folders_Removal] +item = {user_temp_folder}\Perl_5_6,recursive +item = {user_temp_folder}\vs2012,recursive +item = {user_temp_folder}\vs2012_update4,recursive +item = {user_temp_folder}\NI_4882_v17,recursive +item = {user_temp_folder}\NI_VXI_v17,recursive +item = {user_temp_folder}\SaperaLT_Runtime_8_11,recursive + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is used to copy various packages of files from a source location to destination location +; Each XML file contains at least 1 package of files. Each file has a source and destination locations +; Key name can be anything +; Value must a be a path to a XML file +; +; example 1: +; file_package = package1.xml +; ****************************************************************************************************************************** +[Files_Transfer_Packages] +file_package = ..\Data\software\Engineering_PC_Software_Package.xml +file_package = ..\Data\support_files\Engineering_PC_Support_Package.xml + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Specify all the paths to be created +; Possible keys: +; path (REQUIRED. Valid path to be created) +; +; example: +; path1 = C:\DataIIB\data\Block_IB\CV +; path2 = C:\DataIIB\data\Block_IB\General\Logs +; ****************************************************************************************************************************** +[Paths_Creation] +path = C:\ReleaseIB_Engineering\ +path = C:\ReleaseIB_Production\ +path = C:\DataIB\data\Block_IB\CV +path = C:\DataIB\data\Block_IB\General\Logs +path = C:\DataIB\data\Block_IB\General\Scripts +path = C:\DataIB\data\Block_IB\General\Temp\SingleStepScript + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; To share a folder, must provide path to a folder. +; Share names are optional as the folder name will be used as the default share name. +; Any share name defined here will be used as additional share name for its corresponding folder +; The # in "path#" must match in both keys. A folder can have more than one share name. +; Possible keys: +; path# (OPTIONAL. A valid path to be shared) +; path#_additional_share_names (OPTIONAL. Additional share names associated with a path) +; - Define one or more shares names separated by comma +; path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control ) +; - if this is not defined, this network share will be accessible to everyone with Full Control +; - if defined, the value must be in the following format: +; User1,User2,User3 (if more than one account is defined, separate by comma) +; The account name must either be a built-in window account or local/domain account +; if the account name is a built-in window account, it can only be one of the following: +; - everyone, authenticated users +; if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName +; +; example: +; path1 = C:\DataIIB\ +; path1_additional_share_names = DataIIB1, DataIIB2 +; path1_allowed_accounts = Authenticated Users,US\1117637 +; path2 = C:\DataIA +; path2__additional_share_names = DataIA_1 +; path2_allowed_accounts = MYCOMPUTERNAME\Duc +; path3 = C:\DataIC +; ****************************************************************************************************************************** +[Paths_Sharing] +path1 = C:\ReleaseIB_Engineering\ +path2_additional_share_names = Data +path2 = C:\DataIB\ +path3_additional_share_names = Release +path3 = C:\ReleaseIB_Production\ + + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create windows system environment variables +; the key would be the system environment variable name. +; +; Note: +; Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable +; If a key's name is path, the value specified will be appendeding to existing value +; +; path can have one or more values separated by commas +; Example: +; path = C:\folder1 +; path = C:\folder1, C:\folder2 +; ****************************************************************************************************************************** +[Env_Variables] +SM3_SEEKER = C:\Development\GUTS\SM3 +; the address of the computer where all the data of each test is saved before being pushed to the network +SM3_SKR_SERVER = localhost +; the address of the computer where all test data are pushed to after testing +SM3_SKR_NETWORK = localhost +path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Add/Modify or Delete registry's key +; +; Possible keys: +; reg#_action ( REQUIRED. What action to perform) +; - there are only 2 actions ( add/modify, delete) +; reg#_path (REQUIRED. Registry folder path, not including valuename) +; reg#_type (REQUIRED) +; - there are only three options for this key ( classes_root, current_user, local_machine) +; reg#_name_value_pair# (Optional. Registry name values and their names) +; - the registry key defined by registry path can have multiple value names and their associated values +; - Format of the value: [name:***,value:***,type:***] - replace *** with actual text +; - name can be anything +; - value is either numeric or alphanumeric depending on type +; - type can only be 1 of 4: string, multi_string, dword, qword +; If type is dword or qword then value can only be numeric +; If type is multi-string, then format of the value must be: +; [name:***,:value:***:value:***...,type:multi_string] +; +; Example 1: +; reg1_action = add/modify +; reg1_path = SOFTWARE\MySoftware\ +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version,value:3,type:string] +; reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string] +; +; Example 2: +; reg1_action = add/modify +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; +; Example3: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; reg1_name_value_pair1 = [name:Version] +; +; Example4: +; reg1_action = delete +; reg1_path = SOFTWARE\Duc\Sup +; reg1_type = local_machine +; ****************************************************************************************************************************** +[Windows_Registry] +;reg1_action = delete +;reg1_path = SOFTWARE\Duc\ +;reg1_type = local_machine +;reg1_name_value_pairs = Versionn[:]3[,]ginrl[:]boy + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Create shortcuts on the user's desktop +; +; example: +; shortcut1_name = Data Server +; shortcut1_target_path = C:\ReleaseIB_Production\app.exe +; shortcut1_arguments = -role datasrv -suite lsps3 -production +; ****************************************************************************************************************************** +[Windows_Shortcuts] +shortcut1_name = GUTS Startup - Dev +shortcut1_target_path = C:\Perl\bin\perl.exe +shortcut1_arguments = C:\ReleaseIB_Production\Utils\guts_startup_dev.pl + +shortcut2_name = CorecoFramegrabber +shortcut2_target_path = C:\ReleaseIB_Production\CorecoFrameGrabber\CorecoFrameGrabber.exe + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; Before building GUTS, the dashboard.pl must be executed to copy additional files to the GUTS project folder +; Before dashboard.pl can be run, 2 environment variables must be set: +; 1. Path to the GUTS development folder - this is where the script know to put the files in +; 2. Path to the Perl executable +; Possible keys: +; GUTS_Development_Folder - (REQUIRED. The path to where the GUTS Project is located) +; list_of_additional_files (REQUIRED. The full path and name of file that contains a complete list of files to be added by the dashboard.pl) +; perl_binary_path (REQUIRED. Path to where the perl executable is. This is necessary to run perl scripts) +; +; example: +; ****************************************************************************************************************************** +[GUTS_Pre_Build_Assistance] +GUTS_Development_Folder = C:\GUTS_31202_VS2012_Synergy_PostScriptRun1\GUTS\SM3 +list_of_additional_files = ..\..\..\..\GUTS\list_of_guts_additional_files.txt +perl_binary_path = C:\Perl\bin\ + +; ****************************************************************************************************************************** +; THIS SECTION IS REQUIRED +; ****************************************************************************************************************************** +; This section is mainly to configure the GUTS config file's settings and renaming to the right name for the GUTS app to use +; ****************************************************************************************************************************** +[GUTS_Info] +sm3seeker_config_file = .\Repository\support_files\All\sm3seeker.cfg +; folder where GUTS app and DLLs are located and run from +Guts_Bin_Dir = C:\ReleaseIB_Production\ + +; ****************************************************************************************************************************** +; THIS SECTION IS OPTIONAL +; ****************************************************************************************************************************** +; This section is responsible for changing the values of the keys in the GUTS Config File. +; The GUTS config file name and location are determined by the various settings in section [GUTS_Info], therefore there's no need to +; specify what and where the file is located at. It should be in the GUTS Bin directory and named according to the hardware +; type that is defined in section [GUTS_Info]. +; +; Key Format: Can be anything +; Value Format: the value should have a [,] as a delimiter between the Section, Key and Value in the GUTS' Config File +; +; Example: +; Setting = General[,]DATA_SRV_ADDR[,]localhost +; General - section name in the GUTS Config File +; DATA_SRV_ADDR - the key in the section in the GUTS Config File +; localhost - value associated with the key +; +; ****************************************************************************************************************************** +[GUTS_Config_File] +; IP address of the GUTS Data Server +Setting = General[,]DATA_SRV_ADDR[,]localhost + +; IP address of the GUTS Server +Setting = General[,]GUTS_SRV_ADDR[,]localhost + +; IP address of the GUTS GUOT Server +Setting = General[,]GUTS_GUOT_SRV_ADDR[,]localhost + +; IP address of the Coreco Framegrabber Server +Setting = General[,]CORECO_FRAMEGRABBER_SRV_ADDR[,]localhost + +; IP address of the Acroamatics server +Setting = General[,]TM_DECOM_ADDR[,]localhost + +; IP address of the wideband server +Setting = General[,]TM_DDR100_ADDR[,]localhost + +; IP address of the LSPS controller server +Setting = General[,]LSPS_ADDR[,]localhost + +; IP address of the vendor's guot server +Setting = UUT_CONTROLLER[,]VENDOR_GUOT_SRV_ADDR[,]localhost + +Setting = OPTICS[,]WAVELENGTH[,]2.2 \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Software_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Software_Package.xml new file mode 100644 index 0000000..a9a1bec --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Software_Package.xml @@ -0,0 +1,110 @@ + + + + + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Support_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Support_Package.xml new file mode 100644 index 0000000..921a3e9 --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Control_PC_Support_Package.xml @@ -0,0 +1,134 @@ + + + + + + PathLossLog.txt + + + DaqSetup.dat + + + SecretTlmMsg.dll + + + Sm3Seeker.cfg + + + startup.pl + + + startupConfig.ini + + + WidebandAccount.bat + + + + + hosts + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Software_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Software_Package.xml new file mode 100644 index 0000000..0d3e85e --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Software_Package.xml @@ -0,0 +1,111 @@ + + + + + + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Support_package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Support_package.xml new file mode 100644 index 0000000..d7b8cbe --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Dev_PC_Support_package.xml @@ -0,0 +1,119 @@ + + + + + + Grabber.cfg + + + *.* + + + + + hosts + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Software_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Software_Package.xml new file mode 100644 index 0000000..12bf9bc --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Software_Package.xml @@ -0,0 +1,110 @@ + + + + + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Support_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Support_Package.xml new file mode 100644 index 0000000..35482f5 --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/Engineering_PC_Support_Package.xml @@ -0,0 +1,118 @@ + + + + + + PathLossLog.txt + + + guts_startup_dev.pl + guts_startup.ini + + + Sm3Seeker.cfg + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/NGI_CTS_File_Package.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/NGI_CTS_File_Package.xml new file mode 100644 index 0000000..12d53db --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/NGI_CTS_File_Package.xml @@ -0,0 +1,116 @@ + + + + + + nuget.config + + + + + *.nupkg + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Important_Files/Examples/XML/PackagesFromCD.xml b/AllPurposeAutoSetup/Important_Files/Examples/XML/PackagesFromCD.xml new file mode 100644 index 0000000..4d28d46 --- /dev/null +++ b/AllPurposeAutoSetup/Important_Files/Examples/XML/PackagesFromCD.xml @@ -0,0 +1,13 @@ + + + + + + + MK698Software.7z.001 + + + MK698Software.7z.002 + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/NetworkAdapterManager.cs b/AllPurposeAutoSetup/NetworkAdapterManager.cs new file mode 100644 index 0000000..89b3618 --- /dev/null +++ b/AllPurposeAutoSetup/NetworkAdapterManager.cs @@ -0,0 +1,746 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.Windows.Misc; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class NetworkAdapterManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + // this dictionary stores the application to be executed and the arguments associated with it + // it would look like this: + // [ c:\app1.exe ] -> [path arg arg_path] + // [ c:\app2.exe ] -> [path arg arg_path] + public Dictionary, List>> networkAdapterPciLocationToVarious = new Dictionary, List>>(); + + // event for thread to notify other threads that it has exited + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + Form m_parentForm; + + public NetworkAdapterManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool configureNetworkAdapters(string sectionName) + { + bool setupSuccessful = true; + string msg = "", msg2 = "", indentation = String.Empty, errMsg = ""; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + List textPropList2 = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Configuring Network Adapters=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + networkAdapterPciLocationToVarious.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(nic\d+)_pci_location$", @"(nic\d+)_.+$", networkAdapterPciLocationToVarious); + + setupSuccessful = verifyConfigInfo(); + + if (setupSuccessful) + { + if (networkAdapterPciLocationToVarious.Count == 0 || + (networkAdapterPciLocationToVarious.Count == 1 && networkAdapterPciLocationToVarious.First().Value.Count == 0)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to configure"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + // for every app to be run + foreach (KeyValuePair, List>> entry in networkAdapterPciLocationToVarious) + { + string pciLocation = entry.Key.iniValue; + string networkAdapterName = ""; + string networkAdapterIp = ""; + string networkAdapterSubnetMask = ""; + string networkAdapterDefaultGateway = ""; + string networkAdapterLinkSpeed = ""; + bool enableDhcp = false; + List dnsServers = new List(); + + getNicInfo(entry.Value, ref networkAdapterName, ref networkAdapterIp, + ref networkAdapterSubnetMask, ref networkAdapterDefaultGateway, + ref networkAdapterLinkSpeed, ref enableDhcp, ref dnsServers); + + ManagementObject networkAdapter = null; + ManagementObject networkAdapterConfiguration = null; + + setupSuccessful = NetworkManagement.GetNetworkAdapterAndConfigurationBasedOnPciLocation(ref networkAdapter, ref networkAdapterConfiguration, pciLocation, ref errMsg); + + if (!setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. No network card is associated with PCI Location: " + pciLocation; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + if (setupSuccessful && networkAdapterLinkSpeed.Length > 0) + { + setupSuccessful = NetworkManagement.SetNetworkAdapterLinkSpeed(networkAdapter, networkAdapterConfiguration, networkAdapterLinkSpeed, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting link speed to " + networkAdapterLinkSpeed + " for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + + if (setupSuccessful && networkAdapterName.Length > 0) + { + setupSuccessful = NetworkManagement.ChangeNetworkAdapterName(networkAdapter, networkAdapterConfiguration, networkAdapterName, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting adapter name to " + networkAdapterName + " for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + + if (setupSuccessful) + { + if (enableDhcp) + { + setupSuccessful = NetworkManagement.SetNetworkAdapterForDhcp(networkAdapter, networkAdapterConfiguration, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Enabling DHCP for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + else + { + if (setupSuccessful && networkAdapterIp.Length > 0 && networkAdapterSubnetMask.Length > 0) + { + setupSuccessful = NetworkManagement.SetNetworkAdapterIpAddress(networkAdapterConfiguration, networkAdapterIp, networkAdapterSubnetMask, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting IP=" + networkAdapterIp + " and subnet=" + networkAdapterSubnetMask + " for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + + if (setupSuccessful && networkAdapterDefaultGateway.Length > 0 ) + { + setupSuccessful = NetworkManagement.SetNetworkAdapterDefaultGateway(networkAdapterConfiguration, networkAdapterDefaultGateway, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting default gateway=" + networkAdapterDefaultGateway + " for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + + if (setupSuccessful && dnsServers.Count > 0) + { + setupSuccessful = NetworkManagement.SetNetworkAdapterDnsServers(networkAdapter, networkAdapterConfiguration, dnsServers, ref errMsg); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Setting DNS Server1=" + dnsServers[0]; + + if (dnsServers.Count > 1) + msg += " and Server2=" + dnsServers[1]; + + msg += " for network adapter at PCI Location " + pciLocation; + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + } + } + + if (!setupSuccessful) + break; + } + } + + return setupSuccessful; + } + + // get all the necessary info if user choose to verify software by looking at the registry + public void getNicInfo(List> iniKeys, + ref string networkAdapterName, + ref string networkAdapterIp, ref string networkAdapterSubnetMask, + ref string networkAdapterDefaultGateway, ref string networkAdapterLinkSpeed, + ref bool enableDhcp, ref List dnsServers) + { + // for every key specified for the app to be installed/checked + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_adapter_name$", RegexOptions.IgnoreCase)) + { + networkAdapterName = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_ip_and_subnet$", RegexOptions.IgnoreCase)) + { + string[] ips = iniKey.iniValue.Split(','); + networkAdapterIp = ips[0].Trim(); + networkAdapterSubnetMask = ips[1].Trim(); + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_default_gateway$", RegexOptions.IgnoreCase)) + { + networkAdapterDefaultGateway = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_link_speed$", RegexOptions.IgnoreCase)) + { + networkAdapterLinkSpeed = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_enable_dhcp$", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "true", StringComparison.OrdinalIgnoreCase)) + enableDhcp = true; + else + enableDhcp = false; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_dns_servers$", RegexOptions.IgnoreCase)) + { + string[] ips = iniKey.iniValue.Split(','); + ips[0] = ips[0].Trim(); + + if (ips.Length > 1) + ips[1] = ips[1].Trim(); + + dnsServers = new List(ips); + } + } + } + + bool verifyConfigInfo() + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg; + + List textPropList = new List(); + + // for every app name to be installed, verify that each app name has the required information specified in the INI file + foreach (KeyValuePair, List>> entry in networkAdapterPciLocationToVarious) + { + if (!Regex.IsMatch(entry.Key.iniValue, @"\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*", RegexOptions.IgnoreCase)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Key: " + entry.Key.iniKeyName + + "\n" + indentation + "Value: " + entry.Key.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The value must be in format: #,#,# (i.e.: 1,25,0)"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + + // for every key specified for the app to be installed + foreach (ConfigFileManager.Ini_KeyValue iniKey in entry.Value) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"(nic\d+)_link_speed$", RegexOptions.IgnoreCase)) + { + uint linkSpeed = 0; + + if (iniKey.iniValue.Length == 0 || !UInt32.TryParse(iniKey.iniValue, out linkSpeed)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. Value must be a number"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_adapter_name", RegexOptions.IgnoreCase)) + { + if (iniKey.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_ip_and_subnet", RegexOptions.IgnoreCase)) + { + if (iniKey.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else + { + string[] ips = iniKey.iniValue.Split(','); + ips[0] = ips[0].Trim(); + + if ( ips.Length > 1) + ips[1] = ips[1].Trim(); + List ipList = new List(ips); + + if (ipList.Count != 2) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. Expecting IP address and subnet mask separated by comma"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else + { + if (!StringManip.IsValidIPv4(ips[0])) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The IP specified is an invalid IPv4 address."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else if (ipList.Count > 1 && !StringManip.IsValidIPv4(ips[1])) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The subnet mask specified is an invalid IPv4 address."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_default_gateway", RegexOptions.IgnoreCase)) + { + if (iniKey.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else + { + if (!StringManip.IsValidIPv4(iniKey.iniValue)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The gateway specified is an invalid IPv4 address."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"nic\d+_dns_servers", RegexOptions.IgnoreCase)) + { + if (iniKey.iniValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else + { + string[] ips = iniKey.iniValue.Split(','); + ips[0] = ips[0].Trim(); + + if (ips.Length > 1) + ips[1] = ips[1].Trim(); + + List ipList = new List(ips); + + if (ipList.Count > 2) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. Expecting at least one DNS server, maximum 2 separated by comma"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else + { + if (!StringManip.IsValidIPv4(ips[0])) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The 1st DNS Server specified is an invalid IPv4 address."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else if (ipList.Count > 1 && !StringManip.IsValidIPv4(ips[1])) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. The 2nd DNS Server specified is an invalid IPv4 address."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + } + } + + if (!setupSuccessful) + break; + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/Program.cs b/AllPurposeAutoSetup/Program.cs new file mode 100644 index 0000000..07217af --- /dev/null +++ b/AllPurposeAutoSetup/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace All_Purpose_Auto_Setup +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new frmMain()); + } + } +} diff --git a/AllPurposeAutoSetup/Properties/AssemblyInfo.cs b/AllPurposeAutoSetup/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..eecc1ed --- /dev/null +++ b/AllPurposeAutoSetup/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Sm3_Block_IB_GUTS_Setup")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Raytheon")] +[assembly: AssemblyProduct("Sm3_Block_IB_GUTS_Setup")] +[assembly: AssemblyCopyright("Copyright © Raytheon 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e3d2c81c-7b82-4780-ae92-06910e189973")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.6")] +[assembly: AssemblyFileVersion("1.0")] diff --git a/AllPurposeAutoSetup/Properties/Resources.Designer.cs b/AllPurposeAutoSetup/Properties/Resources.Designer.cs new file mode 100644 index 0000000..72365ec --- /dev/null +++ b/AllPurposeAutoSetup/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace All_Purpose_Auto_Setup.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("All_Purpose_Auto_Setup.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sm3missile { + get { + object obj = ResourceManager.GetObject("sm3missile", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/AllPurposeAutoSetup/Properties/Resources.resx b/AllPurposeAutoSetup/Properties/Resources.resx new file mode 100644 index 0000000..56c73be --- /dev/null +++ b/AllPurposeAutoSetup/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\sm3missile.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Properties/Settings.Designer.cs b/AllPurposeAutoSetup/Properties/Settings.Designer.cs new file mode 100644 index 0000000..df582b7 --- /dev/null +++ b/AllPurposeAutoSetup/Properties/Settings.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace All_Purpose_Auto_Setup.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ConfigFile { + get { + return ((string)(this["ConfigFile"])); + } + set { + this["ConfigFile"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool AutoRunOnStartup { + get { + return ((bool)(this["AutoRunOnStartup"])); + } + set { + this["AutoRunOnStartup"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("-1")] + public int CurrentSetupStep { + get { + return ((int)(this["CurrentSetupStep"])); + } + set { + this["CurrentSetupStep"] = value; + } + } + } +} diff --git a/AllPurposeAutoSetup/Properties/Settings.settings b/AllPurposeAutoSetup/Properties/Settings.settings new file mode 100644 index 0000000..edd6f8d --- /dev/null +++ b/AllPurposeAutoSetup/Properties/Settings.settings @@ -0,0 +1,15 @@ + + + + + + + + + False + + + -1 + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/Resources/sm3missile.jpg b/AllPurposeAutoSetup/Resources/sm3missile.jpg new file mode 100644 index 0000000..680e386 Binary files /dev/null and b/AllPurposeAutoSetup/Resources/sm3missile.jpg differ diff --git a/AllPurposeAutoSetup/RunApplicationsManager.cs b/AllPurposeAutoSetup/RunApplicationsManager.cs new file mode 100644 index 0000000..9e60e1a --- /dev/null +++ b/AllPurposeAutoSetup/RunApplicationsManager.cs @@ -0,0 +1,911 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class RunApplicationsManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public event Action> UpdateStatusDisplayAtLine; + + // this dictionary stores the application to be executed and the arguments associated with it + // it would look like this: + // [ c:\app1.exe ] -> [path arg arg_path] + // [ c:\app2.exe ] -> [path arg arg_path] + public Dictionary, List>> runAppToArguments = new Dictionary, List>>(); + + // event for thread to notify other threads that it has exited + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + int m_progressLine = 0; + + string m_consoleAppStatusMessage = ""; + + Form m_parentForm; + + public RunApplicationsManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool runApplications(string sectionName) + { + bool setupSuccessful = true; + string msg, indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Running applications=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + runAppToArguments.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(app\d+)_path$", @"(app\d+)_.+$", runAppToArguments); + + if (setupSuccessful) + { + if (runAppToArguments.Count == 0 || + (runAppToArguments.Count == 1 && runAppToArguments.First().Value.Count == 0)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to run"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + KeyValuePair, List>> processedConfigInfo = new KeyValuePair, List>>(); + + // for every app to be run + foreach (KeyValuePair, List>> entry in runAppToArguments) + { + string appDescription = ""; + string appArg = ""; + bool isConsoleApp = false; + bool waitForExit = true; + string cdLabel = ""; + string displayMessage = ""; + + setupSuccessful = processConfigInfo(entry, ref processedConfigInfo); + + if (!setupSuccessful) + break; + + getAppInfo(processedConfigInfo.Value, ref appDescription, ref appArg, ref isConsoleApp, ref waitForExit, ref cdLabel, ref displayMessage); + setupSuccessful = startApp(appDescription, processedConfigInfo.Key.alternateValue, appArg, isConsoleApp, waitForExit, cdLabel, displayMessage); + + if (!setupSuccessful) + break; + } + } + + return setupSuccessful; + } + + public bool startApp(string appDescription, string appPath, string appArguments, bool isConsoleApp, bool waitForExit, string cdLabel, string displayMessage) + { + string msg1 = String.Empty, msg2 = String.Empty, msg3, indentation = String.Empty, tempMsg = string.Empty; + bool setupSuccessful = true; + Match regExMatch; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList1 = new List(); + List textPropList2 = new List(); + + indentation = Common.getIndentation(1); + + appPath = Path.GetFullPath(appPath); + + // the argument may specify equal sign in it. But since INI files doesn't allow = to be + // specified in the value of they key, we have to specify in place of =. + // so now we replace instances of with = + appArguments = Regex.Replace(appArguments, @"", "=", RegexOptions.IgnoreCase); + + if (appDescription.Length == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + msg1 = "\n" + indentation + "Running " + StringManip.ShortenStringToSize(appPath, 60); + msg2 = "\n" + indentation + "Running " + appPath; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + msg1 = "\n" + indentation + appDescription; + msg2 = "\n" + indentation + appDescription; + } + + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(appPath, @"^" + Regex.Escape(drive.Name) + @".+", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !File.Exists(appPath)) + { + Hardware.OpenCdDrive(drive.Name); + + tempMsg = "Please insert a disc"; + + if (cdLabel.Length > 0) + tempMsg += " labeled \"" + cdLabel + "\""; + + tempMsg += " into drive " + drive.Name + " that has the following path:\n" + appPath + "\n\n Click OK to proceed"; + + msg3 = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, + tempMsg, "Info", -1); + + if (String.Equals(msg3, "cancel", StringComparison.OrdinalIgnoreCase)) + { + break; + } + } + + break; + } + } + + if (File.Exists(appPath)) + { + if (displayMessage.Length > 0) + { + displayMessage = Regex.Replace(displayMessage, @"\{newline\}", "\n"); + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, displayMessage, "Info", -1); + } + + BackgroundWorker bgwInformUserToWait; + + bgwInformUserToWait = new BackgroundWorker(); + bgwInformUserToWait.WorkerSupportsCancellation = true; + bgwInformUserToWait.DoWork += new DoWorkEventHandler(bgwInformUserToWait_DoWork); + bgwInformUserToWait.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwInformUserToWait_RunWorkerCompleted); + + frmSetupStatusDisplay displayFrm = (frmSetupStatusDisplay)m_parentForm; + m_progressLine = displayFrm.updateStatusDisplayAndLog("\n ", "", null); + if (!bgwInformUserToWait.IsBusy) + { + indentation = Common.getIndentation(1); + + if (appDescription.Length == 0) + { + bgwInformUserToWait.RunWorkerAsync(indentation + "Running " + Path.GetFileName(appPath) + ". Please wait"); + } + else + { + bgwInformUserToWait.RunWorkerAsync(indentation + appDescription + ". Please wait"); + } + + } + + try + { + regExMatch = Regex.Match(appPath, @"\.bat$", RegexOptions.IgnoreCase); + + // if we're executing a bat file + if (regExMatch.Success) + { + ProcessStartInfo ProcStartInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe"); + ProcStartInfo.RedirectStandardOutput = false; + ProcStartInfo.UseShellExecute = false; + ProcStartInfo.CreateNoWindow = true; + ProcStartInfo.RedirectStandardError = true; + System.Diagnostics.Process process = new System.Diagnostics.Process(); + ProcStartInfo.Arguments = "/c start /wait /d \"" + Path.GetDirectoryName(appPath) + "\" " + Path.GetFileName(appPath); + process.StartInfo = ProcStartInfo; + process.Start(); + + if (waitForExit) + { + process.WaitForExit(); + + int exitCode = process.ExitCode; + process.Close(); + + if (exitCode != 0) + throw new Exception(Path.GetFileName(appPath) + " exited with code: " + exitCode.ToString()); + } + } + else if (isConsoleApp) + { + ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); + cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe"; + cmdStartInfo.RedirectStandardOutput = true; + cmdStartInfo.RedirectStandardError = true; + cmdStartInfo.RedirectStandardInput = true; + cmdStartInfo.UseShellExecute = false; + cmdStartInfo.CreateNoWindow = true; + + Process process = new Process(); + process.StartInfo = cmdStartInfo; + process.ErrorDataReceived += cmd_Error; + process.OutputDataReceived += cmd_DataReceived; + process.EnableRaisingEvents = true; + process.Start(); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + process.StandardInput.WriteLine(appPath + " " + appArguments); //Execute command + + process.StandardInput.WriteLine("exit"); //Execute exit. + + if (waitForExit) + { + process.WaitForExit(); + + int exitCode = process.ExitCode; + process.Close(); + + if (exitCode != 0) + { + if (appReturnedFatalError(appPath, exitCode, "")) + { + throw new Exception(Path.GetFileName(appPath) + " exited with code: " + exitCode.ToString() + ". " + m_consoleAppStatusMessage); + } + } + } + } + else + { + var process = Process.Start(appPath, appArguments); + + if (waitForExit) + { + process.WaitForExit(); + + int exitCode = process.ExitCode; + process.Close(); + + if (exitCode != 0) + throw new Exception(Path.GetFileName(appPath) + " exited with code: " + exitCode.ToString()); + } + } + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg3 = " - SUCCESS"; + + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg3 = " - FAILED. Error executing file " + appPath + ". " + e.Message; + + setupSuccessful = false; + } + finally + { + if (!bgwInformUserToWait.CancellationPending && bgwInformUserToWait.IsBusy) + { + bgwInformUserToWait.CancelAsync(); + _resetEvent.WaitOne(); + _resetEvent.Reset(); + } + + displayFrm.removeStatusDisplayLine(m_progressLine, true); + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg3 = " - FAILED. File " + appPath + " was not found."; + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg1, msg2, textPropList1); + UpdateStatusDisplayAndLogEvent(msg3, msg3, textPropList2); + + return setupSuccessful; + } + + void cmd_DataReceived(object sender, DataReceivedEventArgs e) + { + if (e.Data == null) + { + return; + } + + if (e.Data.Length > 0) + { + // since we are receiving everything that's being output to the standard output + // we're only interested in the response of the command, and not the command itself + if ( !Regex.IsMatch(e.Data, @"^[a-zA-Z]:[^>]+>.+", RegexOptions.IgnoreCase)) + m_consoleAppStatusMessage = e.Data; + } + } + + void cmd_Error(object sender, DataReceivedEventArgs e) + { + if (e.Data == null) + { + return; + } + + if (e.Data.Length > 0) + { + // since we are receiving everything that's being output to the standard output + // we're only interested in the response of the command, and not the command itself + if (!Regex.IsMatch(e.Data, @"^[a-zA-Z]:[^>]+>.+", RegexOptions.IgnoreCase)) + m_consoleAppStatusMessage = e.Data; + } + } + + private bool appReturnedFatalError(string appPath, int errCode, string errMsg) + { + bool fatalError = true; + + if (Regex.IsMatch(appPath, @"c:\\windows\\system32\\taskkill.exe", RegexOptions.IgnoreCase)) + { + if (errCode == 128) + fatalError = false; + } + + return fatalError; + } + + private void bgwInformUserToWait_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // First, handle the case where an exception was thrown. + if (e.Error != null) + { + + } + else if (e.Cancelled) // user cancelled + { + + } + else // thread completed on its own + { + + } + _resetEvent.Set(); // signal that execution of this thread is done + } + + private void bgwInformUserToWait_DoWork(object sender, DoWorkEventArgs e) + { + BackgroundWorker bgw = sender as BackgroundWorker; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string text = (string)e.Argument; + string dots = ""; + + while (true) + { + if (bgw != null && bgw.CancellationPending) + { + if (e != null) + e.Cancel = true; + + break; + } + + if (dots.Length < 3) + dots += "."; + else + dots = "."; + + if (StringManip.GetPhraseWordIndexInText(text, "running") > -1) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "running"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(42, 176, 173); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "running") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(text, "please wait") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "please wait"); + textProp.wordCount = 10; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(17, 75, 237); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAtLine(text + dots, m_progressLine, textPropList); + + Thread.Sleep(500); + } + } + + // get all the necessary info if user choose to verify software by looking at the registry + public void getAppInfo(List> iniKeys, ref string appDescription, ref string appArg, ref bool isConsoleApp, ref bool waitForExit, ref string cdLabel, ref string displayMessage) + { + appDescription = ""; + appArg = ""; + displayMessage = ""; + isConsoleApp = false; + waitForExit = true; + + // for every key specified for the app to be installed/checked + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_description$", RegexOptions.IgnoreCase)) + { + appDescription = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_argument$", RegexOptions.IgnoreCase)) + { + appArg = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_cd_label$", RegexOptions.IgnoreCase)) + { + cdLabel = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_display_message_to_user$", RegexOptions.IgnoreCase)) + { + displayMessage = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_is_console$", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "true", StringComparison.OrdinalIgnoreCase)) + isConsoleApp = true; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_wait_for_exit$", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "true", StringComparison.OrdinalIgnoreCase)) + waitForExit = true; + else + waitForExit = false; + } + } + } + + bool processConfigInfo(KeyValuePair, List>> entry, + ref KeyValuePair, List>> processedEntry) + { + string fileExt = ""; + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + ConfigFileManager.Ini_KeyValue iniVal2 = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg = "", msg2 = ""; + Match regExMatch; + int matchedArgumentIndex = -1; + + Dictionary, List>> tempOneToManyDict = new Dictionary, List>>(); + List textPropList = new List(); + + Dictionary idToPath = new Dictionary(StringComparer.OrdinalIgnoreCase); + + iniVal = entry.Key; + + bool appTypeSpecified = false; + string appId = ""; + + regExMatch = Regex.Match(entry.Key.iniKeyName, @"(app\d+)_.+$", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + appId = regExMatch.Groups[1].Value; + + // process the key of the map which contains the setup file path + if (!Common.pathContainsMacro(entry.Key.iniValue)) + { + regExMatch = Regex.Match(entry.Key.iniValue, @".*\{browse_to_file:([^\}]+)\}.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + fileExt = Path.GetExtension(regExMatch.Groups[1].Value); + msg = "Please browse to location where file \"" + regExMatch.Groups[1].Value + "\" is located at"; + + regExMatch = Regex.Match(entry.Key.iniValue, @".*\{message_to_user:([^\}]+)\}.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + msg += "\n" + regExMatch.Groups[1].Value; + + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, msg, "Info", -1); + + m_parentForm.Invoke((MethodInvoker)(() => + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + + openFileDialog1.InitialDirectory = Application.StartupPath; + + openFileDialog1.Filter = "File (*" + fileExt + ")|*" + fileExt; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + iniVal.alternateValue = openFileDialog1.FileName; + } + })); + + if (iniVal.alternateValue.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Key: " + entry.Key.iniKeyName + + "\n" + indentation + "Value: " + entry.Key.iniValue + + "\n" + indentation + "Error Description: User did not provide a valid file"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + else + { + iniVal.alternateValue = Path.GetFullPath(entry.Key.iniValue); + + // check only relative path + if (!Path.IsPathRooted(entry.Key.iniValue) && (!File.Exists(iniVal.alternateValue))) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Key: " + entry.Key.iniKeyName + + "\n" + indentation + "Value: " + entry.Key.iniValue + + "\n" + indentation + "Error Description: The path defined in the value above is invalid. Translated path " + iniVal.alternateValue; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + } + else // the path specified contains macros, we have to resolve macros + { + iniVal.alternateValue = Common.resolveMacroPath(entry.Key.iniValue); + + if (Common.pathContainsCdDriveMacro(entry.Key.iniValue)) + { + if (iniVal.alternateValue.Length == 0) + { + setupSuccessful = false; + msg2 = PathManip.enumWindowsDesignatedPaths.CD_DRIVE.ToString() + " macro was defined. But no CD drive is found in the system"; + } + //else + //{ + // setupSuccessful = Common.validatePathInCdDrive(iniVal.alternateValue, m_parentForm); + + // if ( !setupSuccessful ) + // msg2 = "\"" + iniVal.alternateValue + "\" does not exist. Please insert a CD with that path"; + //} + + if (!setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Key: " + entry.Key.iniKeyName + + "\n" + indentation + "Value: " + entry.Key.iniValue + + "\n" + indentation + "Error Description: " + msg2; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + } + + // process the values of the map which contains various related things like application argument, description, is_console, wait_for_exit, etc + if (setupSuccessful) + { + tempOneToManyDict[iniVal] = new List>(entry.Value); + + matchedArgumentIndex = tempOneToManyDict[iniVal].FindIndex(x => Regex.IsMatch(x.iniKeyName, @"app\d+_argument$", RegexOptions.IgnoreCase)); + + // for every key specified for the app to be run + foreach (ConfigFileManager.Ini_KeyValue iniKey in entry.Value) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_is_console$", RegexOptions.IgnoreCase)) + { + appTypeSpecified = true; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_argument$", RegexOptions.IgnoreCase)) + { + iniVal2 = tempOneToManyDict[iniVal][matchedArgumentIndex]; + + regExMatch = Regex.Match(iniKey.iniValue, @".*\{browse_to_file:([^\}]+)\}.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + fileExt = Path.GetExtension(regExMatch.Groups[1].Value); + msg = "Please browse to location where file \"" + regExMatch.Groups[1].Value + "\" is located at"; + + regExMatch = Regex.Match(iniKey.iniValue, @".*\{message_to_user:([^\}]+)\}.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + msg += "\n" + regExMatch.Groups[1].Value; + + ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, msg, "Info", -1); + + m_parentForm.Invoke((MethodInvoker)(() => + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + + openFileDialog1.InitialDirectory = Application.StartupPath; + + openFileDialog1.Filter = "File (*" + fileExt + ")|*" + fileExt; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + iniVal2.iniValue = openFileDialog1.FileName; + tempOneToManyDict[iniVal][matchedArgumentIndex] = iniVal2; + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniVal2.iniSectionName + + "\n" + indentation + "Key: " + iniVal2.iniKeyName + + "\n" + indentation + "Value: " + iniVal2.iniValue + + "\n" + indentation + "Error Description: User did not provide a valid file"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + })); + } + else + { + // matches every macro defined in the value of they key, macro is in the form of {xxxxx} such as {user_desktop}, {user_temp_folder}, {cd_drive}, {keyname} + MatchCollection matches = Regex.Matches(iniKey.iniValue, @"\{([^\{\}]+)\}", RegexOptions.IgnoreCase); + + if (matches.Count > 0) + { + // each match can have multiple parts i.e. $1 $2...$n + for (int i = 0; i < matches.Count; i++) + { + // matches[i].Groups[0].Value is the actual macro itself, i.e. {keyname} + // matches[i].Groups[1].Value is the string inside curly brackets, i.e. keyname + string pattern = Regex.Escape(matches[i].Groups[1].Value); + + // looking for a key that defines the actual path to be used in the argument + int matchedPathIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, pattern, RegexOptions.IgnoreCase)); + + // if the macro in the argument refers to another key the defines a path + if (matchedPathIndex >= 0 && !idToPath.ContainsKey(matches[i].Groups[0].Value)) + { + if (PathManip.PathIsFile(entry.Value[matchedPathIndex].iniValue)) + idToPath[matches[i].Groups[0].Value] = Path.GetDirectoryName(Path.GetFullPath(entry.Value[matchedPathIndex].iniValue)); + else + idToPath[matches[i].Groups[0].Value] = Path.GetFullPath(entry.Value[matchedPathIndex].iniValue); + + } + // if the macro in the argument refers to the path defined by primary key app#_path + else if (String.Equals(entry.Key.iniKeyName, matches[i].Groups[1].Value, StringComparison.OrdinalIgnoreCase) && !idToPath.ContainsKey(matches[i].Groups[0].Value)) + { + if (PathManip.PathIsFile(iniVal.alternateValue)) + idToPath[matches[i].Groups[0].Value] = Path.GetDirectoryName(Path.GetFullPath(iniVal.alternateValue)); + else + idToPath[matches[i].Groups[0].Value] = Path.GetFullPath(iniVal.alternateValue); + } + // if the macro refers to user's desktop, temp folder, cd drive + else if (Common.pathContainsMacro(matches[i].Groups[0].Value)) + { + if (!idToPath.ContainsKey(matches[i].Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(matches[i].Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(matches[i].Groups[0].Value)) + { + if (resolvedPath.Length == 0) + { + setupSuccessful = false; + msg2 = matches[i].Groups[1].Value + " macro was defined. But no CD drive is found in the system"; + } + + if (!setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: " + msg2; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + + if (setupSuccessful) + idToPath[matches[i].Groups[0].Value] = resolvedPath; + } + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value above specifies a variable \"" + matches[i].Groups[0].Value + "\" in the argument." + + " Key \"" + iniKey.iniKeyName + "_" + matches[i].Groups[1].Value + + "\" must be defined to specify the actual path for variable \"" + matches[i].Groups[0].Value + "\""; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + } + + if (!setupSuccessful) + break; + } + } + } + + if (setupSuccessful && !appTypeSpecified) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Error Description: The key name \"" + appId + "_is_console\" is missing in the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + } + + if (setupSuccessful) + { + if (idToPath.Count > 0) + { + // goes through each marco in the argument ini key and replace with actual paths + foreach (KeyValuePair item in idToPath) + { + if (matchedArgumentIndex >= 0) + { + iniVal2 = tempOneToManyDict[iniVal][matchedArgumentIndex]; + iniVal2.iniValue = Regex.Replace(iniVal2.iniValue, Regex.Escape(item.Key), item.Value, RegexOptions.IgnoreCase); + + tempOneToManyDict[iniVal][matchedArgumentIndex] = iniVal2; + } + } + } + + processedEntry = new KeyValuePair, List>>(iniVal, new List>(tempOneToManyDict[iniVal])); + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/SetupMiscellaneous.cs b/AllPurposeAutoSetup/SetupMiscellaneous.cs new file mode 100644 index 0000000..a176965 --- /dev/null +++ b/AllPurposeAutoSetup/SetupMiscellaneous.cs @@ -0,0 +1,453 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + class SetupMiscellaneous + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public Dictionary environmentVars = new Dictionary(); + + public Dictionary userPrompt = new Dictionary(StringComparer.OrdinalIgnoreCase); + + Form m_parentForm; + + public SetupMiscellaneous(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool setEnvironmentVariables(string sectionName) + { + bool setupSuccessful = true; + string msg; + string indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Setting System Environment Variables=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + environmentVars.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, environmentVars); + + if (setupSuccessful) + { + if (environmentVars.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to set"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + foreach (KeyValuePair entry in environmentVars) + { + if (String.Equals(entry.Key, "path", StringComparison.OrdinalIgnoreCase)) + { + setupSuccessful = processPathEnvironmentVariable(entry.Value); + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + entry.Key + "=" + entry.Value; + try + { + System.Environment.SetEnvironmentVariable(entry.Key, entry.Value, EnvironmentVariableTarget.Machine); + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message; + + uint code = (uint)e.HResult; + + if (code == 0x8013150a) + { + msg += " Need ADMIN privilege."; + } + + msg += ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + if (!setupSuccessful) + break; + } + } + return setupSuccessful; + } + + public bool processPathEnvironmentVariable(string value) + { + bool setupSuccessful = true; + + string msg; + string indentation = String.Empty, currentPathEnvVar = ""; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + List newPathList = new List(value.Split(',')); + + try + { + currentPathEnvVar = System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); + } + catch (Exception e) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Querying system environment variable \"Path\" - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + List currentPathList = new List(currentPathEnvVar.Split(';')); + + indentation = Common.getIndentation(1); + foreach (string item in newPathList) + { + string path = item.Trim(); + + if (currentPathList.Count == 0) + { + currentPathEnvVar = path; + + msg = "\n" + indentation + " Path=" + path; + + try + { + System.Environment.SetEnvironmentVariable("Path", currentPathEnvVar, EnvironmentVariableTarget.Machine); + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + } + else if (currentPathList.FindIndex(x => x == path) < 0 && currentPathList.FindIndex(x => x == PathManip.RemoveTrailingSlashInPath(path)) < 0) + { + currentPathEnvVar += ";" + path; + msg = "\n" + indentation + " Path={Path};" + path; + + try + { + System.Environment.SetEnvironmentVariable("Path", currentPathEnvVar, EnvironmentVariableTarget.Machine); + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message; + + uint code = (uint)e.HResult; + + if (code == 0x8013150a) + { + msg += " Need ADMIN privilege."; + } + + msg += ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + } + else + { + msg = "\n" + indentation + "Path=" + "{Path};" + path; + + msg += " - SKIPPED. " + path + " already exists in {Path}"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (!setupSuccessful) + break; + + } + } + return setupSuccessful; + } + + public bool promptUser(string sectionName) + { + bool setupSuccessful = true; + string msg, displayMsg, result; + string indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=User Prompt=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + userPrompt.Clear(); + + ConfigFileManager.parseConfigInfo(sectionName, userPrompt); + + if (setupSuccessful) + { + if (userPrompt.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. No-operation"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + else + { + if (!userPrompt.ContainsKey("prompt_message")) + { + msg = "\n" + indentation + "- FAILED. (Expecting key \"prompt_message\" in section \"" + sectionName + "\")"; + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + if (!userPrompt.ContainsKey("prompt_message_type")) + { + msg = "\n" + indentation + "- FAILED. Expecting key \"prompt_message_type\" in section \"" + sectionName + "\""; + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + } + + if (setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Promp user"; + + displayMsg = Regex.Replace(userPrompt["prompt_message"], @"\{newline\}", "\n"); + + if ( String.Equals(userPrompt["prompt_message_type"], MessageBoxCustom.PopUpMsgType.YESNO.ToString(), StringComparison.CurrentCultureIgnoreCase)) + result = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, displayMsg, "Info", -1); + else if (String.Equals(userPrompt["prompt_message_type"], MessageBoxCustom.PopUpMsgType.OKCANCEL.ToString(), StringComparison.CurrentCultureIgnoreCase)) + result = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, displayMsg, "Info", -1); + else + result = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, displayMsg, "Info", -1); + + if ( Regex.IsMatch(result, @"(yes|ok)", RegexOptions.IgnoreCase)) + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + msg += " - FAILED. (User selected to abort the operation)"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + } + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/SoftwareInstallManager.cs b/AllPurposeAutoSetup/SoftwareInstallManager.cs new file mode 100644 index 0000000..1adb8a3 --- /dev/null +++ b/AllPurposeAutoSetup/SoftwareInstallManager.cs @@ -0,0 +1,1513 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; +using CommonLib.Runtime.InteropServices; + +namespace All_Purpose_Auto_Setup +{ + class SoftwareInstallManager + { + + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public event Action> UpdateStatusDisplayAtLine; + + public event Action RebootComputer; + + public event Action SetupProcessNeedRestartToProceed; + + // event for thread to notify other threads that it has exited + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + // this dictionary stores application name and its associated setup file and exe file + // it would look like this: + // [ app1_name ] -> List[setup_file exe_file setup_args] + // [ app2_name ] -> List[setup_file setup_args reg_path reg_type ...] + public Dictionary, List>> appNameToInstallerAndExe = new Dictionary, List>>(); + + int m_progressLine = 0; + + Form m_parentForm; + + public SoftwareInstallManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool manageRequiredSoftwarePackages(string sectionName) + { + bool setupSuccessful = true; + string msg, indentation = String.Empty; + string setupFile, exeFile, registryPath, registryDisplayName, registryType, registryName, registryValue, registryCompareOperator, installArgs, + exitCodesToIgnore, installProcessName; + bool promptBeforeInstallation = false, rebootComputerAtCompletionRequested = false, rebootComputerImmediatelyRequested = false; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Installing/checking required software packages=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + appNameToInstallerAndExe.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(app\d+)_name$", @"(app\d+)_.+", appNameToInstallerAndExe); + + if (setupSuccessful) + { + if (appNameToInstallerAndExe.Count == 0 || + (appNameToInstallerAndExe.Count == 1 && appNameToInstallerAndExe.First().Value.Count == 0)) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to install/check"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + KeyValuePair, List>> processedConfigInfo = new KeyValuePair, List>>(); + + // for every app name to be installed/checked + foreach (KeyValuePair, List>> entry in appNameToInstallerAndExe) + { + promptBeforeInstallation = false; + setupFile = ""; + exeFile = ""; + registryPath = ""; + registryDisplayName = ""; + registryType = ""; + registryName = ""; + registryValue = ""; + registryCompareOperator = ""; + installArgs = ""; + exitCodesToIgnore = ""; + installProcessName = ""; + rebootComputerAtCompletionRequested = false; + rebootComputerImmediatelyRequested = false; + + + setupSuccessful = processConfigInfo(entry, ref processedConfigInfo); + + if (!setupSuccessful) + break; + + getInfoUsingExeVerification(processedConfigInfo.Value, ref setupFile, ref exeFile, ref promptBeforeInstallation, ref rebootComputerAtCompletionRequested, ref rebootComputerImmediatelyRequested); + getInfoUsingRegistryVerification(processedConfigInfo.Value, ref registryPath, ref registryDisplayName, ref registryType, ref registryName, ref registryValue, ref registryCompareOperator, ref installArgs, ref exitCodesToIgnore, ref installProcessName); + + if (exeFile.Length > 0) + { + setupSuccessful = checkSoftwareExe(processedConfigInfo.Key.iniValue, setupFile, installArgs, exeFile, exitCodesToIgnore, promptBeforeInstallation, rebootComputerAtCompletionRequested, rebootComputerImmediatelyRequested); + } + else + { + setupSuccessful = checkSoftwareRegistry(processedConfigInfo.Key.iniValue, setupFile, promptBeforeInstallation, installArgs, registryPath, + registryDisplayName, registryType, registryName, registryValue, registryCompareOperator, + exitCodesToIgnore, installProcessName, rebootComputerAtCompletionRequested, rebootComputerImmediatelyRequested); + } + + if (!setupSuccessful || ((frmSetupStatusDisplay)m_parentForm).applicationNeedsToBeRestarted()) + break; + } + } + return setupSuccessful; + } + + // check if software is installed + public bool checkSoftwareExe(string softwareName, string setupFile, string setupArgs, string exeFile, string exitCodesToIgnore, bool promptBeforeInstall, bool rebootComputerAtCompletionRequested, bool rebootComputerImmediatelyRequested) + { + bool setupSuccessful = true; + bool installSuccess = true; + bool installExecuted = false; + string msg1, msg2 = "", indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList1 = new List(); + List textPropList2 = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 3; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + indentation = Common.getIndentation(1); + msg1 = "\n" + indentation + "Checking installation of " + softwareName; + + for (int checkAttempt = 1; checkAttempt <= 2; checkAttempt++) + { + // if software application does not exist + if (!File.Exists(exeFile)) + { + if (checkAttempt == 1 && setupFile.Length > 0) + { + installSuccess = installSoftware(softwareName, setupFile, setupArgs, exitCodesToIgnore, "", promptBeforeInstall); + + installExecuted = true; + + if (!installSuccess) + setupSuccessful = false; + + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. Unable to detect presence of file " + exeFile; + setupSuccessful = false; + } + + } + else if (checkAttempt == 2) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - PASSED"; + } + } + + if (installSuccess) + { + UpdateStatusDisplayAndLogEvent(msg1, msg1, textPropList1); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + + if (installExecuted && rebootComputerAtCompletionRequested) + { + RebootComputer(); + + if (rebootComputerImmediatelyRequested) + { + Common.enableAutoRunAfterReboot("Auto_Win_Setup_Task", Application.ExecutablePath); + + // raise event to signal that we need to stop the setup process for changes to take effect + SetupProcessNeedRestartToProceed(); + } + } + } + + return setupSuccessful; + } + + public bool installSoftware(string softwareName, string setupFile, string setupArgs, string exitCodesToIgnore, string installProcessName, bool promptBeforeInstall) + { + string msg1 = String.Empty, msg2 = String.Empty, msg3, indentation = String.Empty; + bool setupSuccessful = true; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList1 = new List(); + List textPropList2 = new List(); + List textPropList3 = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + indentation = Common.getIndentation(1); + msg1 = "\n" + indentation + "Installing " + softwareName; + + if (setupFile.Length > 0) + { + setupFile = Path.GetFullPath(setupFile); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + softwareName + " is not installed on system. Please install it."; + setupSuccessful = false; + } + + if (setupSuccessful) + { + foreach (var drive in DriveInfo.GetDrives() + .Where(d => d.DriveType == DriveType.CDRom)) + { + if (Regex.IsMatch(setupFile, @"^" + Regex.Escape(drive.Name) + @".+", RegexOptions.IgnoreCase)) + { + while (!drive.IsReady || !File.Exists(setupFile)) + { + Hardware.OpenCdDrive(drive.Name); + + msg3 = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.OKCANCEL, null, "Please insert the " + softwareName + " disc into drive " + drive.Name + "\n\n Click OK to proceed", "Info", -1); + + if (String.Equals(msg3, "cancel", StringComparison.OrdinalIgnoreCase)) + { + break; + } + } + + break; + } + } + + if (File.Exists(setupFile)) + { + if (promptBeforeInstall) + msg3 = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "Required software \"" + softwareName + "\" is not detected in the system.\n\n Would you like to perform the install now?", "Info", -1); + else + msg3 = "yes"; + + if (String.Equals(msg3, "yes", StringComparison.OrdinalIgnoreCase)) + { + + BackgroundWorker bgwInformUserToWait; + + bgwInformUserToWait = new BackgroundWorker(); + bgwInformUserToWait.WorkerSupportsCancellation = true; + bgwInformUserToWait.DoWork += new DoWorkEventHandler(bgwInformUserToWait_DoWork); + bgwInformUserToWait.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwInformUserToWait_RunWorkerCompleted); + + frmSetupStatusDisplay displayFrm = (frmSetupStatusDisplay)m_parentForm; + m_progressLine = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList3); + if (!bgwInformUserToWait.IsBusy) + { + indentation = Common.getIndentation(1); + bgwInformUserToWait.RunWorkerAsync(indentation + "Installing " + softwareName + ". Please wait"); + + } + + try + { + System.Diagnostics.Process process = null; + + // if we have to execute install from a command line + if (Regex.IsMatch(setupFile, @"\.bat$", RegexOptions.IgnoreCase)) + { + ProcessStartInfo ProcStartInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe"); + ProcStartInfo.RedirectStandardOutput = false; + ProcStartInfo.UseShellExecute = false; + ProcStartInfo.CreateNoWindow = true; + ProcStartInfo.RedirectStandardError = true; + process = new System.Diagnostics.Process(); + ProcStartInfo.Arguments = "/c start /wait /d \"" + Path.GetDirectoryName(setupFile) + "\" " + Path.GetFileName(setupFile); + process.StartInfo = ProcStartInfo; + process.Start(); + } + else if (setupArgs.Length > 0 && Regex.IsMatch(setupFile, @"\.exe$", RegexOptions.IgnoreCase)) + { + ProcessStartInfo ProcStartInfo = new ProcessStartInfo(setupFile); + ProcStartInfo.RedirectStandardOutput = false; + ProcStartInfo.UseShellExecute = false; + ProcStartInfo.CreateNoWindow = true; + ProcStartInfo.RedirectStandardError = true; + process = new System.Diagnostics.Process(); + ProcStartInfo.Arguments = setupArgs; + process.StartInfo = ProcStartInfo; + process.Start(); + } + else + { + process = Process.Start(setupFile); + } + + int exitCode = WaitForAllToExit(process); + + process.Close(); + + if (exitCodesToIgnore.Length == 0) + exitCodesToIgnore = ",0,"; + else + exitCodesToIgnore = ",0," + exitCodesToIgnore + ","; + + if (!Regex.IsMatch(exitCodesToIgnore, @",\s*" + exitCode.ToString() + @"\s*,", RegexOptions.IgnoreCase)) + { + throw new Exception(Path.GetFileName(setupFile) + " exited with code: " + exitCode.ToString()); + } + } + catch (Exception e) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. Error executing setup file " + setupFile + ". " + e.Message; + + setupSuccessful = false; + } + finally + { + if (!bgwInformUserToWait.CancellationPending && bgwInformUserToWait.IsBusy) + { + bgwInformUserToWait.CancelAsync(); + _resetEvent.WaitOne(); + _resetEvent.Reset(); + } + + displayFrm.removeStatusDisplayLine(m_progressLine, true); + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. User chooses to not install required software."; + + setupSuccessful = false; + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. Setup file " + setupFile + " was not found."; + + setupSuccessful = false; + } + } + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS"; + } + + UpdateStatusDisplayAndLogEvent(msg1, msg1, textPropList1); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + + return setupSuccessful; + } + + private void bgwInformUserToWait_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // First, handle the case where an exception was thrown. + if (e.Error != null) + { + + } + else if (e.Cancelled) // user cancelled + { + + } + else // thread completed on its own + { + + } + _resetEvent.Set(); // signal that execution of this thread is done + } + + private int WaitForAllToExit(Process process) + { + int exitCode = -1; + + // even though this line doesn't appear to do anything, it + // helps in getting the exit code of the child process + // without this line, if we try to get exit code of child process + // exception will be thrown + var sh = process.SafeHandle; + + while (true) + { + ManagementObjectSearcher searcher = new ManagementObjectSearcher( + "SELECT * " + + "FROM Win32_Process " + + "WHERE ParentProcessId=" + process.Id); + ManagementObjectCollection collection = searcher.Get(); + if (collection.Count > 0) + { + foreach (var item in collection) + { + UInt32 childProcessId = (UInt32)item["ProcessId"]; + if ((int)childProcessId != Process.GetCurrentProcess().Id) + { + Process childProcess = null; + try + { + childProcess = Process.GetProcessById((int)childProcessId); + } + catch (Exception) + { + continue; + } + + exitCode = WaitForAllToExit(childProcess); + } + } + } + + if (process.HasExited) + { + if (exitCode == -1) + exitCode = process.ExitCode; + + break; + } + else + Thread.Sleep(500); + } + + return exitCode; + } + + private void bgwInformUserToWait_DoWork(object sender, DoWorkEventArgs e) + { + BackgroundWorker bgw = sender as BackgroundWorker; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string text = (string)e.Argument; + string dots = ""; + + while (true) + { + if (bgw != null && bgw.CancellationPending) + { + if (e != null) + e.Cancel = true; + + break; + } + + if (dots.Length < 3) + dots += "."; + else + dots = "."; + + if (StringManip.GetPhraseWordIndexInText(text, "installing") > -1) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "installing"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(42, 176, 173); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "installing") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(text, "please wait") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "please wait"); + textProp.wordCount = 10; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(17, 75, 237); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAtLine(text + dots, m_progressLine, textPropList); + + Thread.Sleep(500); + } + } + + public bool checkSoftwareRegistry(string softwareName, string setupFile, bool promptBeforeInstall, string setupArgs, string registryPath, string registryDisplayName, string registryType, + string registryName, string registryValue, string registryCompareOperator, + string exitCodesToIgnore, string installProcessName, bool rebootComputerAtCompletionRequested, bool rebootComputerImmediatelyRequested) + { + bool setupSuccessful = true; + bool installSuccessful = true; + bool installExecuted = false; + string msg, indentation = String.Empty, statusMsg = ""; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList1 = new List(); + List textPropList2 = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 3; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "Checking installation of " + softwareName; + + int maxSoftwareCheckRetries = 15; + int retriesCount = 1; + while (true) + { + // if software application does not exist + if (!checkSoftwareRegistrySetting(registryPath, registryDisplayName, registryType, registryName, registryValue, registryCompareOperator, ref statusMsg)) + { + if (retriesCount == 1 && setupFile.Length > 0) + { + installSuccessful = installSoftware(softwareName, setupFile, setupArgs, exitCodesToIgnore, installProcessName, promptBeforeInstall); + + installExecuted = true; + + if (!installSuccessful) + setupSuccessful = false; + + } + + if (!installExecuted || retriesCount == maxSoftwareCheckRetries || !installSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + setupSuccessful = false; + break; + } + + if (installExecuted && installSuccessful) + { + // wait for all the registry settings to be applied before we check again + Thread.Sleep(1000); + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + statusMsg = " - PASSED"; + + break; + } + + retriesCount++; + } + + if (installSuccessful) + { + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList1); + UpdateStatusDisplayAndLogEvent(statusMsg, statusMsg, textPropList2); + + if (installExecuted && rebootComputerAtCompletionRequested) + { + RebootComputer(); + + if (rebootComputerImmediatelyRequested) + { + Common.enableAutoRunAfterReboot("Auto_Win_Setup_Task", Application.ExecutablePath); + + // raise event to signal that we need to stop the setup process for changes to take effect + SetupProcessNeedRestartToProceed(); + } + } + } + + return setupSuccessful; + } + + bool checkSoftwareRegistrySetting(string registryPath, string registryDisplayName, string registryType, + string registryName, string registryValue, string registryCompareOperator, ref string statusMsg) + { + bool setupSuccessful = true; + string indentation = String.Empty, actualRegistryValue = ""; + RegistryHive regHive = RegistryHive.LocalMachine; + + RegistryKey rkSubKey = null; + + statusMsg = ""; + + RegistryKey hklm = null; + + if (String.Equals(registryType, "local_machine", StringComparison.OrdinalIgnoreCase)) + { + regHive = RegistryHive.LocalMachine; + } + else if (String.Equals(registryType, "classes_root", StringComparison.OrdinalIgnoreCase)) + { + regHive = RegistryHive.ClassesRoot; + } + else if (String.Equals(registryType, "current_user", StringComparison.OrdinalIgnoreCase)) + { + regHive = RegistryHive.CurrentUser; + } + else + { + statusMsg = " - FAILED. Registry type of \"" + registryType + "\" is invalid"; + setupSuccessful = false; + } + + if (setupSuccessful) + { + List registryPaths = new List(); + if (registryDisplayName.Length > 0) + { + registryPaths = WindowsRegistry.GetRegistryDynamicUninstallKeys(regHive, registryDisplayName); + + if (registryPaths.Count == 0) + { + statusMsg = " - FAILED. Unable to find any registry key associated with \"" + registryDisplayName + "\""; + setupSuccessful = false; + } + } + else if (registryPath.Length > 0) + { + registryPaths.Add(registryPath); + } + + hklm = RegistryKey.OpenBaseKey(regHive, RegistryView.Registry64); + + foreach (string regPath in registryPaths) + { + setupSuccessful = true; + + rkSubKey = hklm.OpenSubKey(regPath, false); + + if (rkSubKey != null) + { + if (registryName.Length > 0) + { + List list = new List(rkSubKey.GetValueNames()); + + if (list.FindIndex(x => x.Equals(registryName, StringComparison.OrdinalIgnoreCase)) != -1) + { + actualRegistryValue = rkSubKey.GetValue(registryName).ToString(); + + if (Regex.IsMatch(actualRegistryValue, @"^[\.0-9]+$", RegexOptions.IgnoreCase) && Regex.IsMatch(registryValue, @"^[\.0-9]+$", RegexOptions.IgnoreCase)) + { + if (softwareVersionComparisonSuccessful(registryValue, actualRegistryValue, registryCompareOperator)) + { + statusMsg = " - PASSED"; + } + else + { + statusMsg = " - FAILED. Actual registry value of \"" + actualRegistryValue + "\" is not " + getStringEquivalentOfComparisonOperator(registryCompareOperator) + " the base registry value of \"" + registryValue + "\""; + setupSuccessful = false; + } + } + else if (!String.Equals(actualRegistryValue, registryValue, StringComparison.OrdinalIgnoreCase)) + { + statusMsg = " - FAILED. Actual registry value of \"" + actualRegistryValue + "\" is not " + getStringEquivalentOfComparisonOperator(registryCompareOperator) + " the base registry value of \"" + registryValue + "\""; + setupSuccessful = false; + } + } + else + { + statusMsg = " - FAILED. Unable to find registry key's value name \"" + registryName + "\""; + setupSuccessful = false; + } + } + } + else + { + statusMsg = " - FAILED. Unable to find registry key \"" + registryPath + "\". Either the registry key is wrong or the software is not installed."; + setupSuccessful = false; + } + } + } + + if (rkSubKey != null) + rkSubKey.Close(); + + if (hklm != null) + hklm.Close(); + + return setupSuccessful; + } + + static bool softwareVersionComparisonSuccessful(string baseVersion, string actualVersion, string compareOperator) + { + bool compareSuccess = false; + List baseVersionParts = new List(baseVersion.Split('.').ToList()); + List actualVersionParts = new List(actualVersion.Split('.').ToList()); + int actualVal = 0, expectedVal = 0; + + // remove any trailing .0 + for (int i = baseVersionParts.Count - 1; i >= 0; --i) + { + if (i != 0 && Regex.IsMatch(baseVersionParts[i], @"^[0]+$", RegexOptions.IgnoreCase)) + { + baseVersionParts.RemoveAt(i); + } + else + break; + } + + // remove any trailing .0 + for (int i = actualVersionParts.Count - 1; i >= 0; --i) + { + if (i != 0 && Regex.IsMatch(actualVersionParts[i], @"^[0]+$", RegexOptions.IgnoreCase)) + { + actualVersionParts.RemoveAt(i); + } + else + break; + } + + if (baseVersionParts.Count == 0) + baseVersionParts.Add("0"); + + if (actualVersionParts.Count == 0) + actualVersionParts.Add("0"); + + if (compareOperator.Length == 0) + compareOperator = "eq"; + + if (String.Equals(compareOperator, "eq", StringComparison.OrdinalIgnoreCase)) + { + compareSuccess = actualAndBaseVersionsAreEqual(baseVersionParts, actualVersionParts); + } + else if (String.Equals(compareOperator, "ne", StringComparison.OrdinalIgnoreCase)) + { + compareSuccess = !actualAndBaseVersionsAreEqual(baseVersionParts, actualVersionParts); + } + else if (String.Equals(compareOperator, "lte", StringComparison.OrdinalIgnoreCase)) + { + bool isEqual = false; + + for (int i = 0; i < actualVersionParts.Count; i++) + { + if (baseVersionParts.Count >= i + 1) + { + if (Int32.TryParse(actualVersionParts[i], out actualVal) && Int32.TryParse(baseVersionParts[i], out expectedVal)) + { + if (actualVal < expectedVal) + { + isEqual = false; + compareSuccess = true; + break; + } + else if (actualVal > expectedVal) + { + isEqual = false; + break; + } + else if (i == actualVersionParts.Count - 1 && actualVersionParts.Count == baseVersionParts.Count) + { + isEqual = false; + compareSuccess = true; + break; + } + else + isEqual = true; + } + } + } + + if (isEqual && baseVersionParts.Count > actualVersionParts.Count) + compareSuccess = true; + } + else if (String.Equals(compareOperator, "gte", StringComparison.OrdinalIgnoreCase)) + { + for (int i = 0; i < actualVersionParts.Count; i++) + { + if (baseVersionParts.Count >= i + 1) + { + if (Int32.TryParse(actualVersionParts[i], out actualVal) && Int32.TryParse(baseVersionParts[i], out expectedVal)) + { + if (actualVal > expectedVal) + { + compareSuccess = true; + break; + } + else if (actualVal < expectedVal) + break; + else if (i == actualVersionParts.Count - 1 && actualVersionParts.Count == baseVersionParts.Count) + { + compareSuccess = true; + break; + } + } + } + else + { + compareSuccess = true; + break; + } + } + } + else if (String.Equals(compareOperator, "gt", StringComparison.OrdinalIgnoreCase)) + { + for (int i = 0; i < actualVersionParts.Count; i++) + { + if (baseVersionParts.Count >= i + 1) + { + if (Int32.TryParse(actualVersionParts[i], out actualVal) && Int32.TryParse(baseVersionParts[i], out expectedVal)) + { + if (actualVal > expectedVal) + { + compareSuccess = true; + break; + } + } + } + else + { + compareSuccess = true; + break; + } + } + } + else if (String.Equals(compareOperator, "lt", StringComparison.OrdinalIgnoreCase)) + { + compareSuccess = true; + bool isEqual = false; + + for (int i = 0; i < actualVersionParts.Count; i++) + { + if (baseVersionParts.Count >= i + 1) + { + if (Int32.TryParse(actualVersionParts[i], out actualVal) && Int32.TryParse(baseVersionParts[i], out expectedVal)) + { + if (actualVal > expectedVal) + { + isEqual = false; + compareSuccess = false; + break; + } + else if (actualVal < expectedVal) + { + isEqual = false; + break; + } + else + isEqual = true; + } + } + } + + if (isEqual && baseVersionParts.Count == actualVersionParts.Count) + compareSuccess = false; + } + + return compareSuccess; + } + + private static bool actualAndBaseVersionsAreEqual(List baseVersionParts, List actualVersionParts) + { + bool compareSuccess = true; + int actualVal = 0, baseVal = 0; + + if (baseVersionParts.Count != actualVersionParts.Count) + compareSuccess = false; + else + { + for (int i = 0; i < actualVersionParts.Count; i++) + { + if (baseVersionParts.Count >= i + 1) + { + if (Int32.TryParse(actualVersionParts[i], out actualVal) && Int32.TryParse(baseVersionParts[i], out baseVal)) + { + if (actualVal != baseVal) + { + compareSuccess = false; + break; + } + } + } + } + } + + return compareSuccess; + } + + public static string getStringEquivalentOfComparisonOperator(string compareOperator) + { + string description = ""; + + if (String.Equals(compareOperator, "eq", StringComparison.OrdinalIgnoreCase)) + { + description = "equal to"; + } + else if (String.Equals(compareOperator, "lte", StringComparison.OrdinalIgnoreCase)) + { + description = "less than or equal to"; + } + else if (String.Equals(compareOperator, "gte", StringComparison.OrdinalIgnoreCase)) + { + description = "greater than or equal to"; + } + else if (String.Equals(compareOperator, "gt", StringComparison.OrdinalIgnoreCase)) + { + description = "greater than"; + } + else if (String.Equals(compareOperator, "lt", StringComparison.OrdinalIgnoreCase)) + { + description = "less than"; + } + else if (String.Equals(compareOperator, "ne", StringComparison.OrdinalIgnoreCase)) + { + description = "not equal to"; ; + } + + return description; + } + + // get all the necessary info if user choose to verify software by looking for exe name + public void getInfoUsingExeVerification(List> iniKeys, ref string setupFile, ref string exeFile, ref bool promptBeforeInstall, ref bool rebootComputerAtCompletionRequested, ref bool rebootComputerImmediatelyRequested) + { + setupFile = ""; + exeFile = ""; + // for every key specified for the app to be installed/checked + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_setup_file", RegexOptions.IgnoreCase)) + { + setupFile = iniKey.alternateValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_exe_file", RegexOptions.IgnoreCase)) + { + exeFile = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_setup_confirm_prompt", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "yes", StringComparison.OrdinalIgnoreCase)) + promptBeforeInstall = true; + else + promptBeforeInstall = false; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reboot_computer_at_completion", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "yes", StringComparison.OrdinalIgnoreCase)) + rebootComputerAtCompletionRequested = true; + else + rebootComputerAtCompletionRequested = false; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reboot_computer_immediately", RegexOptions.IgnoreCase)) + { + if (String.Equals(iniKey.iniValue, "yes", StringComparison.OrdinalIgnoreCase)) + rebootComputerImmediatelyRequested = true; + else + rebootComputerImmediatelyRequested = false; + } + } + } + + // get all the necessary info if user choose to verify software by looking at the registry + public void getInfoUsingRegistryVerification(List> iniKeys, ref string registryPath, ref string registryDisplayName, + ref string registryType, ref string registryName, ref string registryValue, ref string registryCompareOperator, ref string installArgs, ref string exitCodesToIgnore, ref string installProcessName) + { + registryPath = ""; + registryDisplayName = ""; + registryType = ""; + registryName = ""; + registryValue = ""; + registryCompareOperator = ""; + installArgs = ""; + exitCodesToIgnore = ""; + + // for every key specified for the app to be installed/checked + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_path$", RegexOptions.IgnoreCase)) + { + registryPath = iniKey.iniValue; + } + if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_display_name$", RegexOptions.IgnoreCase)) + { + registryDisplayName = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_type", RegexOptions.IgnoreCase)) + { + registryType = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_name", RegexOptions.IgnoreCase)) + { + registryName = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_value", RegexOptions.IgnoreCase)) + { + registryValue = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_compare", RegexOptions.IgnoreCase)) + { + registryCompareOperator = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_setup_argument", RegexOptions.IgnoreCase)) + { + installArgs = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_exit_codes_to_ignore", RegexOptions.IgnoreCase)) + { + exitCodesToIgnore = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_install_process_name", RegexOptions.IgnoreCase)) + { + installProcessName = iniKey.iniValue; + } + } + } + + bool processConfigInfo(KeyValuePair, List>> entry, + ref KeyValuePair, List>> processedEntry) + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + ConfigFileManager.Ini_KeyValue iniVal2 = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg = "", msg2 = ""; + Match regExMatch; + + Dictionary, List>> tempOneToManyDict = new Dictionary, List>>(); + List textPropList = new List(); + + bool appVerifiedByCheckingRegistry = false; + bool appVerifiedByCheckingExe = false; + bool appRegistryTypeSpecified = false; + string appId = ""; + string registryKeyType = ""; + + appVerifiedByCheckingRegistry = false; + appVerifiedByCheckingExe = false; + appRegistryTypeSpecified = false; + + Dictionary idToPath = new Dictionary(StringComparer.OrdinalIgnoreCase); + + // for every key specified for the app to be installed + foreach (ConfigFileManager.Ini_KeyValue iniKey in entry.Value) + { + regExMatch = Regex.Match(iniKey.iniKeyName, @"(app\d+)_.+$", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + appId = regExMatch.Groups[1].Value; + + // user has specified the verification method + if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_exe_file", RegexOptions.IgnoreCase)) + { + appVerifiedByCheckingExe = true; + break; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_reg_path$", RegexOptions.IgnoreCase) + || Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_reg_display_name$", RegexOptions.IgnoreCase)) + { + appVerifiedByCheckingRegistry = true; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_reg_type$", RegexOptions.IgnoreCase)) + { + regExMatch = Regex.Match(iniKey.iniKeyName, @"(app\d+)_reg_type$", RegexOptions.IgnoreCase); + + registryKeyType = regExMatch.Groups[1].Value; + appRegistryTypeSpecified = true; + + if (!WindowsRegistryManager.registryTypeIsValid(iniKey.iniValue)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_reg_compare", RegexOptions.IgnoreCase)) + { + string description = SoftwareInstallManager.getStringEquivalentOfComparisonOperator(iniKey.iniValue); + + if (description.Length == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"app\d+_setup_file", RegexOptions.IgnoreCase) && iniKey.iniValue.Length > 0) + { + iniVal = iniKey; + + if (!Common.pathContainsMacro(iniKey.iniValue)) + { + iniVal.alternateValue = Path.GetFullPath(iniKey.iniValue); + + // check only relative path + if (!Path.IsPathRooted(iniKey.iniValue) && (!File.Exists(iniVal.alternateValue))) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The path defined in the value above is invalid. Translated path " + iniVal.alternateValue; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + else // the path specified contains macros, we have to resolve macros + { + iniVal.alternateValue = Common.resolveMacroPath(iniKey.iniValue); + + if (Common.pathContainsCdDriveMacro(iniKey.iniValue)) + { + if (iniVal.alternateValue.Length == 0) + { + setupSuccessful = false; + msg2 = PathManip.enumWindowsDesignatedPaths.CD_DRIVE.ToString() + " macro was defined. But no CD drive is found in the system"; + } + //else + //{ + // setupSuccessful = Common.validatePathInCdDrive(iniVal.alternateValue, m_parentForm); + // msg2 = "\"" + iniVal.alternateValue + "\" does not exist. Please insert a CD with that path"; + //} + + if (!setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: " + msg2; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + } + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"(app\d+)_setup_argument$", RegexOptions.IgnoreCase)) + { + MatchCollection matches = Regex.Matches(iniKey.iniValue, @"\{([^\{\}]+)\}", RegexOptions.IgnoreCase); + + if (matches.Count > 0) + { + // each match can have multiple parts i.e. $1 $2...$n + for (int i = 0; i < matches.Count; i++) + { + // matches[i].Groups[0].Value is the actual macro itself, i.e. {keyname} + // matches[i].Groups[1].Value is the string inside curly brackets, i.e. keyname + string pattern = Regex.Escape(matches[i].Groups[1].Value); + + // looking for a key that defines the actual path to be used in the argument + int matchedPathIndex = entry.Value.FindIndex(x => Regex.IsMatch(x.iniKeyName, pattern, RegexOptions.IgnoreCase)); + + // if the macro in the argument refers to another key the defines a path + if (matchedPathIndex >= 0 && !idToPath.ContainsKey(matches[i].Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(entry.Value[matchedPathIndex].iniValue); + + if (Common.pathContainsCdDriveMacro(entry.Value[matchedPathIndex].iniValue)) + { + if (resolvedPath.Length == 0) + { + setupSuccessful = false; + msg2 = matches[i].Groups[1].Value + " macro was defined. But no CD drive is found in the system"; + } + else + { + setupSuccessful = Common.validatePathInCdDrive(resolvedPath, m_parentForm); + msg2 = "\"" + resolvedPath + "\" does not exist. Please insert a CD with that path"; + } + + if (!setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: " + msg2; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + + if (PathManip.PathIsFile(resolvedPath)) + idToPath[matches[i].Groups[0].Value] = Path.GetDirectoryName(Path.GetFullPath(resolvedPath)); + else + idToPath[matches[i].Groups[0].Value] = Path.GetFullPath(resolvedPath); + } + // if the macro refers to user's desktop, temp folder, cd drive + else if (Common.pathContainsMacro(matches[i].Groups[0].Value) && !idToPath.ContainsKey(matches[i].Groups[0].Value)) + { + string resolvedPath = Common.resolveMacroPath(matches[i].Groups[0].Value); + + if (Common.pathContainsCdDriveMacro(matches[i].Groups[0].Value)) + { + if (resolvedPath.Length == 0) + { + setupSuccessful = false; + msg2 = matches[i].Groups[1].Value + " macro was defined. But no CD drive is found in the system"; + } + + if (!setupSuccessful) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: " + msg2; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + + idToPath[matches[i].Groups[0].Value] = resolvedPath; + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value above specifies a variable \"" + matches[i].Groups[0].Value + "\" in the argument." + + " Key \"" + iniKey.iniKeyName + "_" + matches[i].Groups[1].Value + + "\" must be defined to specify the actual path for variable \"" + matches[i].Groups[0].Value + "\""; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + + if (!setupSuccessful) + break; + } + } + + if (setupSuccessful) + { + + if (appVerifiedByCheckingExe) + { + tempOneToManyDict[entry.Key] = new List>(entry.Value); + } + else if (appVerifiedByCheckingRegistry) + { + if (!appRegistryTypeSpecified) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Error Description: The key name " + appId + "_reg_type is missing in the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + } + + if (setupSuccessful) + { + tempOneToManyDict[entry.Key] = new List>(entry.Value); + } + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Error Description: One of the following 3 key names must be defined: " + appId + "_exe_file, " + appId + "_reg_path, " + appId + "_reg_display_name, "; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + } + } + + if (setupSuccessful) + { + int matchedArgumentIndex = -1; + + matchedArgumentIndex = tempOneToManyDict[entry.Key].FindIndex(x => Regex.IsMatch(x.iniKeyName, @"app\d+_setup_file$", RegexOptions.IgnoreCase)); + + if (matchedArgumentIndex >= 0) + { + tempOneToManyDict[entry.Key][matchedArgumentIndex] = iniVal; + } + + if (idToPath.Count > 0) + { + matchedArgumentIndex = -1; + foreach (KeyValuePair item in idToPath) + { + if (matchedArgumentIndex < 0) + { + matchedArgumentIndex = tempOneToManyDict[entry.Key].FindIndex(x => Regex.IsMatch(x.iniKeyName, @"app\d+_setup_argument$", RegexOptions.IgnoreCase)); + iniVal2 = tempOneToManyDict[entry.Key][matchedArgumentIndex]; + } + + if (matchedArgumentIndex >= 0) + { + iniVal2.iniValue = Regex.Replace(iniVal2.iniValue, Regex.Escape(item.Key), item.Value, RegexOptions.IgnoreCase); + } + } + + if (matchedArgumentIndex >= 0) + tempOneToManyDict[entry.Key][matchedArgumentIndex] = iniVal2; + } + + processedEntry = new KeyValuePair, List>>(entry.Key, new List>(tempOneToManyDict[entry.Key])); + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/WindowFeaturesManager.cs b/AllPurposeAutoSetup/WindowFeaturesManager.cs new file mode 100644 index 0000000..ae93b17 --- /dev/null +++ b/AllPurposeAutoSetup/WindowFeaturesManager.cs @@ -0,0 +1,555 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; + +namespace All_Purpose_Auto_Setup +{ + class WindowFeaturesManager + { + List iisFeatures = new List(); + + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + public event Action> UpdateStatusDisplayAtLine; + + // event for thread to notify other threads that it has exited + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + public ConfigFileManager.Ini_KeyValue windowsFeatureListFile = new ConfigFileManager.Ini_KeyValue(""); + + Form m_parentForm; + + List iisFeaturesToBeInstalled = new List(); + private bool windowFeatureInstalledSuccessful = false; + private bool needElevatedPermission = false; + private bool otherErrorOccurred = false; + private string dismErrorMsg = ""; + private int windowFeatureState = 1; + private string currentWindowFeature; + + int m_progressLine = 0; + + public WindowFeaturesManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool enableWindowsOptionalFeatures(string sectionName) + { + bool setupSuccessful = true; + + string msg; + string indentation = String.Empty; + int featureInstalledCount = 0; + + currentWindowFeature = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + BackgroundWorker bgwInformUserToWait; + + bgwInformUserToWait = new BackgroundWorker(); + bgwInformUserToWait.WorkerSupportsCancellation = true; + bgwInformUserToWait.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwInformUserToWait_RunWorkerCompleted); + bgwInformUserToWait.DoWork += new DoWorkEventHandler(bgwInformUserToWait_DoWork); + + ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); + cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe"; + cmdStartInfo.RedirectStandardOutput = true; + cmdStartInfo.RedirectStandardError = true; + cmdStartInfo.RedirectStandardInput = true; + cmdStartInfo.UseShellExecute = false; + cmdStartInfo.CreateNoWindow = true; + + Process cmdProcess; + //cmdProcess.StandardInput.WriteLine("Dism /online /disable-feature /featurename:IIS-FTPSvc /norestart"); //Execute command + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Enabling Windows Features=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + parseConfigInfo(sectionName); + + setupSuccessful = verifyConfigInfo(); + + frmSetupStatusDisplay displayFrm = (frmSetupStatusDisplay)m_parentForm; + if (setupSuccessful) + { + getWindowsFeatures(iisFeatures); + + m_progressLine = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + if (!bgwInformUserToWait.IsBusy) + { + indentation = Common.getIndentation(1); + bgwInformUserToWait.RunWorkerAsync(indentation + "Gathering information about windows features to be installed. Please wait"); + } + + windowFeatureState = 1; + + cmdProcess = new Process(); + cmdProcess.StartInfo = cmdStartInfo; + cmdProcess.ErrorDataReceived += cmd_Error; + cmdProcess.OutputDataReceived += cmd_WindowFeature_DataReceived; + cmdProcess.EnableRaisingEvents = true; + cmdProcess.Start(); + cmdProcess.BeginOutputReadLine(); + cmdProcess.BeginErrorReadLine(); + + string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative", "dism.exe"); + cmdProcess.StandardInput.WriteLine(system32Directory + " /online /get-features"); //Execute command + + cmdProcess.StandardInput.WriteLine("exit"); //Execute exit. + + cmdProcess.WaitForExit(); + cmdProcess.Close(); + + if (!bgwInformUserToWait.CancellationPending && bgwInformUserToWait.IsBusy) + { + bgwInformUserToWait.CancelAsync(); + _resetEvent.WaitOne(); + _resetEvent.Reset(); + } + + windowFeatureState++; + + displayFrm.removeStatusDisplayLine(m_progressLine, true); + if (needElevatedPermission) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. Need administrator privilege to access Windows Features."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + } + else if (otherErrorOccurred) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + dismErrorMsg; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + } + else if (iisFeaturesToBeInstalled.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. All necessary windows features are already enabled."; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + else + { + m_progressLine = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + int featureCountLine = m_progressLine; + foreach (string feature in iisFeaturesToBeInstalled) + { + indentation = Common.getIndentation(1); + msg = indentation + "Features enabled: " + featureInstalledCount.ToString() + " / " + iisFeaturesToBeInstalled.Count.ToString(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 2; + textProp.wordCount = 10; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(msg, featureCountLine, textPropList); + + m_progressLine = displayFrm.updateStatusDisplayAndLog("\n ", "", textPropList); + if (!bgwInformUserToWait.IsBusy) + { + indentation = Common.getIndentation(1); + bgwInformUserToWait.RunWorkerAsync(indentation + "Enabling " + feature + ". Please wait"); + } + + windowFeatureInstalledSuccessful = false; + + dismErrorMsg = ""; + cmdProcess = new Process(); + cmdProcess.StartInfo = cmdStartInfo; + cmdProcess.ErrorDataReceived += cmd_Error; + cmdProcess.OutputDataReceived += cmd_WindowFeature_DataReceived; + cmdProcess.EnableRaisingEvents = true; + cmdProcess.Start(); + cmdProcess.BeginOutputReadLine(); + cmdProcess.BeginErrorReadLine(); + + cmdProcess.StandardInput.WriteLine(system32Directory + " /online /enable-feature /featurename:" + feature + " /all /norestart"); //Execute command + cmdProcess.StandardInput.WriteLine("exit"); //Execute exit. + + cmdProcess.WaitForExit(); + cmdProcess.Close(); + + if (!bgwInformUserToWait.CancellationPending && bgwInformUserToWait.IsBusy) + { + bgwInformUserToWait.CancelAsync(); + _resetEvent.WaitOne(); + _resetEvent.Reset(); + } + + displayFrm.removeStatusDisplayLine(m_progressLine, true); + + if (!windowFeatureInstalledSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n" + Common.getIndentation(1) + "- FAILED. Failed enabling " + feature + "." + dismErrorMsg; + setupSuccessful = false; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + break; + } + else + { + featureInstalledCount++; + msg = indentation + "Features enabled: " + featureInstalledCount.ToString() + " / " + iisFeaturesToBeInstalled.Count.ToString(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(5, 112, 1); + textProp.wordIndex = 2; + textProp.wordCount = 10; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 10, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAtLine(msg, featureCountLine, textPropList); + msg = "\n" + Common.getIndentation(1) + "Enabling " + feature + " - SUCCESS"; + UpdateStatusDisplayAndLogEvent("", msg, textPropList); + } + } + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n" + Common.getIndentation(1) + "- SUCCESS"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + } + + return setupSuccessful; + } + + void getWindowsFeatures(List featureList) + { + string line; + StreamReader file = new StreamReader(windowsFeatureListFile.iniValue); + + while ((line = file.ReadLine()) != null) + { + line = line.Trim(); + if (line.Length > 0) + iisFeatures.Add(line); + } + + file.Close(); + } + + private void bgwInformUserToWait_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // First, handle the case where an exception was thrown. + if (e.Error != null) + { + + } + else if (e.Cancelled) // user cancelled + { + + } + else // thread completed on its own + { + + } + _resetEvent.Set(); + } + + private void bgwInformUserToWait_DoWork(object sender, DoWorkEventArgs e) + { + BackgroundWorker bgw = sender as BackgroundWorker; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string text = (string)e.Argument; + string dots = ""; + + while (true) + { + if (bgw != null && bgw.CancellationPending) + { + if (e != null) + e.Cancel = true; + + break; + } + + if (dots.Length < 3) + dots += "."; + else + dots = "."; + + if (StringManip.GetPhraseWordIndexInText(text, "enabling") > -1) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "enabling"); + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 11, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(42, 176, 173); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "enabling") + 1; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(text, "please wait") - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 11, FontStyle.Bold); + textPropList.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(157, 150, 19); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(text, "please wait"); + textProp.wordCount = 10; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 11, FontStyle.Bold); + textPropList.Add(textProp); + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(17, 75, 237); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont.FontFamily, 13, FontStyle.Bold); + textPropList.Add(textProp); + } + + UpdateStatusDisplayAtLine(text + dots, m_progressLine, textPropList); + + Thread.Sleep(500); + } + } + + void cmd_WindowFeature_DataReceived(object sender, DataReceivedEventArgs e) + { + Match regExMatch; + string result; + + if (e.Data == null) + { + return; + } + + if (windowFeatureState == 1) + { + regExMatch = Regex.Match(e.Data, @"error: 740", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + needElevatedPermission = true; + } + + if (otherErrorOccurred && e.Data.Length > 0) + { + dismErrorMsg += ". " + e.Data; + } + + regExMatch = Regex.Match(e.Data, @"error: \d+", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + otherErrorOccurred = true; + dismErrorMsg += e.Data; + } + + regExMatch = Regex.Match(e.Data, @"feature name\s+:\s+(.+)$", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + currentWindowFeature = regExMatch.Groups[1].Value; + } + + regExMatch = Regex.Match(e.Data, @"state\s+:\s+disabled", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + result = iisFeatures.Find(item => item == currentWindowFeature); + + if (result != null && result.Length > 0) + { + iisFeaturesToBeInstalled.Add(result); + } + } + } + else + { + if (otherErrorOccurred && e.Data.Length > 0) + { + dismErrorMsg += ". " + e.Data; + } + + regExMatch = Regex.Match(e.Data, @"error: \d+", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + otherErrorOccurred = true; + dismErrorMsg += e.Data; + } + + regExMatch = Regex.Match(e.Data, @".*successfully.*", RegexOptions.IgnoreCase); + if (regExMatch.Success) + { + windowFeatureInstalledSuccessful = true; + } + } + } + + void cmd_Error(object sender, DataReceivedEventArgs e) + { + //Console.WriteLine("Error from other process"); + //Console.WriteLine(e.Data); + } + + private void parseConfigInfo(string sectionName) + { + windowsFeatureListFile.iniSectionName = sectionName; + windowsFeatureListFile.iniKeyName = "windows_feature_list_file"; + windowsFeatureListFile.iniValue = ConfigFileManager.ms_configGeneralInfo.iniFile.ReadValue(sectionName, windowsFeatureListFile.iniKeyName); + } + + bool verifyConfigInfo() + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg, tempPath; + + List textPropList = new List(); + + if (windowsFeatureListFile.iniValue.Length > 0) + { + tempPath = Path.GetFullPath(windowsFeatureListFile.iniValue); + + if (!File.Exists(tempPath)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + windowsFeatureListFile.iniSectionName + + "\n" + indentation + "Key: " + windowsFeatureListFile.iniKeyName + + "\n" + indentation + "Value: " + windowsFeatureListFile.iniValue + + "\n" + indentation + "Error Description: The path defined in the value above is invalid. Translated path " + tempPath; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + setupSuccessful = false; + } + else + windowsFeatureListFile.iniValue = tempPath; + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/WindowsRegistryManager.cs b/AllPurposeAutoSetup/WindowsRegistryManager.cs new file mode 100644 index 0000000..a41478e --- /dev/null +++ b/AllPurposeAutoSetup/WindowsRegistryManager.cs @@ -0,0 +1,604 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + class WindowsRegistryManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + // this dictionary stores registry path and its associated properties + // it would look like this: + // [ reg1_path ] -> List[reg1_action,reg1_type, etc] + // [ reg2_path ] -> List[reg2_action,reg2_type, etc] + public Dictionary, List>> regPathToVariousThings = new Dictionary, List>>(); + + Form m_parentForm; + + public WindowsRegistryManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool ModifyWindowsRegistry(string sectionName) + { + bool setupSuccessful = true; + string msg; + string indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string registryPath, registryType, registryAction; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Modifying Windows Registry=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + regPathToVariousThings.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(reg\d+)_path$", @"(reg\d+)_.+", regPathToVariousThings); + + setupSuccessful = verifyConfigInfo(); + + if (setupSuccessful) + { + + if (regPathToVariousThings.Count == 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. Nothing to set"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + + // for every app name to be installed/checked + foreach (KeyValuePair, List>> entry in regPathToVariousThings) + { + registryPath = entry.Key.iniValue; + registryType = ""; + registryAction = ""; + + Dictionary registryNameValuePairs = new Dictionary(); + + getRegistryInfo(entry.Value, ref registryAction, ref registryType, registryNameValuePairs); + + registryAction = registryAction.Trim(); + registryType = registryType.Trim(); + + setupSuccessful = modifyRegistryKey(registryPath, registryType, registryAction, registryNameValuePairs); + + if (!setupSuccessful) + break; + } + } + + return setupSuccessful; + } + + public bool modifyRegistryKey(string registryPath, string registryType, string registryAction, Dictionary registryNameValuePairs) + { + bool setupSuccessful = true; + string errMsg = "", msg1 = "", msg2 = "", indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList1 = new List(); + List textPropList2 = new List(); + Match regExMatch; + + indentation = Common.getIndentation(1); + + if (registryNameValuePairs.Count > 0) + { + foreach (KeyValuePair entry in registryNameValuePairs) + { + msg1 = ""; + + if (String.Equals(registryAction, "delete", StringComparison.OrdinalIgnoreCase)) + { + setupSuccessful = WindowsRegistry.DeleteRegistryValueName(registryPath, getRegistryHive(registryType), entry.Key, ref errMsg); + + msg1 = "\n" + indentation + "Deleting value name " + entry.Key + " in " + registryPath; + } + else // add to registry + { + // match single-value registry value name + regExMatch = Regex.Match(entry.Value, @"^\s*value\s*:\s*(.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + List pair = new List() { regExMatch.Groups[1].Value, regExMatch.Groups[2].Value }; + + if (getRegistryValueKind(pair[1]) != RegistryValueKind.MultiString) + setupSuccessful = WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, getRegistryHive(registryType), entry.Key, getRegistryValueKind(pair[1]), pair[0], ref errMsg); + else + { + setupSuccessful = false; + errMsg = "Expected a value name of type single value (string, dword, qword). Actual type is multi-string"; + } + + msg1 = "\n" + indentation + "Setting value name " + entry.Key + "=" + pair[0] + " in " + registryPath; + } + else + { + // match multi-string registry value name + regExMatch = Regex.Match(entry.Value, @"^(\s*:\s*value\s*:\s*.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + List pair = new List() { regExMatch.Groups[1].Value, regExMatch.Groups[2].Value }; + List values = new List(regExMatch.Groups[1].Value.Split(new string[] { ":value:" }, StringSplitOptions.RemoveEmptyEntries)); + + if (getRegistryValueKind(pair[1]) == RegistryValueKind.MultiString) + { + setupSuccessful = WindowsRegistry.AddOrModifyRegistryKeyMultiStringValue(registryPath, getRegistryHive(registryType), entry.Key, values, ref errMsg); + } + else + { + setupSuccessful = false; + errMsg = "Expected a value name of type multi-string. Actual type is single value (string, qword, dword)"; + } + + msg1 = "\n" + indentation + "Setting value name " + entry.Key + "={"; + + string tempStr = ""; + foreach (string val in values) + { + if (tempStr.Length > 0) + tempStr += ";"; + tempStr += val; + } + + msg1 += tempStr + "} in " + registryPath; + } + } + } + + if ( msg1.Length > 0 ) + { + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 3; + textProp.wordCount = StringManip.GetPhraseWordIndexInText(msg1, "in " + registryPath) - textProp.wordIndex; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg1, "in " + registryPath) + 1; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + if (errMsg.Length > 0 && !setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + else if (errMsg.Length > 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SKIPPED. " + errMsg; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS."; + } + + UpdateStatusDisplayAndLogEvent(msg1, msg1, textPropList1); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + + } + + if (!setupSuccessful) + break; + } + } + else // add/delete registry path + { + if (String.Equals(registryAction, "delete", StringComparison.OrdinalIgnoreCase)) + { + setupSuccessful = WindowsRegistry.DeleteRegistryKey(registryPath, getRegistryHive(registryType), ref errMsg); + + msg1 = "\n" + indentation + "Deleting key " + registryPath; + } + else // add name/value to registry key + { + // only creating path + setupSuccessful = WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, getRegistryHive(registryType), "", RegistryValueKind.String, "", ref errMsg); + + msg1 = "\n" + indentation + "Creating key " + registryPath; + } + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Color.FromArgb(233, 31, 195); + textProp.wordIndex = 2; + textProp.wordCount = 100; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList1.Add(textProp); + + if (errMsg.Length > 0 && !setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - FAILED. " + errMsg; + } + else if (errMsg.Length > 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SKIPPED. " + errMsg; + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList2.Add(textProp); + + msg2 = " - SUCCESS."; + } + + UpdateStatusDisplayAndLogEvent(msg1, msg1, textPropList1); + UpdateStatusDisplayAndLogEvent(msg2, msg2, textPropList2); + } + + return setupSuccessful; + } + + public RegistryValueKind getRegistryValueKind(string valueKind) + { + RegistryValueKind regValueKind = RegistryValueKind.String; + + if (String.Equals(valueKind, WindowsRegistry.valueKind.DWORD.ToString(), StringComparison.OrdinalIgnoreCase)) + { + regValueKind = RegistryValueKind.DWord; + } + else if (String.Equals(valueKind, WindowsRegistry.valueKind.QWORD.ToString(), StringComparison.OrdinalIgnoreCase)) + { + regValueKind = RegistryValueKind.QWord; + } + else if (String.Equals(valueKind, WindowsRegistry.valueKind.MULTI_STRING.ToString(), StringComparison.OrdinalIgnoreCase)) + { + regValueKind = RegistryValueKind.MultiString; + } + + return regValueKind; + } + + public void getRegistryInfo(List> iniKeys, ref string action, + ref string registryType, Dictionary nameValuePairs) + { + Match regExMatch; + registryType = ""; + action = ""; + + // for every key specified for the app to be installed/checked + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_action$", RegexOptions.IgnoreCase)) + { + action = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_type", RegexOptions.IgnoreCase)) + { + registryType = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_name_value_pair", RegexOptions.IgnoreCase)) + { + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*(.*[^\s])\s*,\s*value\s*:\s*(.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*\]", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (!nameValuePairs.ContainsKey(regExMatch.Groups[1].Value)) + { + nameValuePairs[regExMatch.Groups[1].Value] = "value:" + regExMatch.Groups[2].Value + ",type:" + regExMatch.Groups[3].Value; + } + } + else + { + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*([^,]*[^\s,])\s*\]", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (!nameValuePairs.ContainsKey(regExMatch.Groups[1].Value)) + { + nameValuePairs[regExMatch.Groups[1].Value] = ""; + } + } + } + + if (!regExMatch.Success) + { + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*(.*[^\s])\s*,\s*:\s*value\s*:\s*(.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*\]", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + { + if (!nameValuePairs.ContainsKey(regExMatch.Groups[1].Value)) + { + nameValuePairs[regExMatch.Groups[1].Value] = ":value:" + regExMatch.Groups[2].Value + ",type:" + regExMatch.Groups[3].Value; + } + } + } + } + } + } + + public static bool registryTypeIsValid(string regType) + { + bool isValid = false; + + if (String.Equals(regType, "local_machine", StringComparison.OrdinalIgnoreCase) + || + String.Equals(regType, "classes_root", StringComparison.OrdinalIgnoreCase) + || + String.Equals(regType, "current_user", StringComparison.OrdinalIgnoreCase)) + { + isValid = true; + } + + return isValid; + } + + public static RegistryHive getRegistryHive(string regType) + { + RegistryHive regHive = RegistryHive.LocalMachine; + + if (String.Equals(regType, "local_machine", StringComparison.OrdinalIgnoreCase)) + regHive = RegistryHive.LocalMachine; + else if (String.Equals(regType, "classes_root", StringComparison.OrdinalIgnoreCase)) + regHive = RegistryHive.ClassesRoot; + else if (String.Equals(regType, "current_user", StringComparison.OrdinalIgnoreCase)) + regHive = RegistryHive.CurrentUser; + else + regHive = RegistryHive.LocalMachine; + + return regHive; + } + + bool verifyConfigInfo() + { + bool setupSuccessful = true; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + string msg; + Match regExMatch; + + List textPropList = new List(); + + string registryAction = ""; + string regId = ""; + bool registryActionDefined = false; + bool registryTypeDefined = false; + + // for every registry path defined + foreach (KeyValuePair, List>> entry in regPathToVariousThings) + { + registryActionDefined = false; + registryTypeDefined = false; + + // for every key specified for this registry path + foreach (ConfigFileManager.Ini_KeyValue iniKey in entry.Value) + { + regExMatch = Regex.Match(iniKey.iniKeyName, @"(reg\d+)_.+$", RegexOptions.IgnoreCase); + + if (regExMatch.Success) + regId = regExMatch.Groups[1].Value; + + if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_action", RegexOptions.IgnoreCase)) + { + registryActionDefined = true; + registryAction = iniKey.iniValue; + } + else if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_type", RegexOptions.IgnoreCase)) + { + registryTypeDefined = true; + + if (!registryTypeIsValid(iniKey.iniValue)) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + + if (registryActionDefined) + { + // for every key specified to be added/modified/delete + foreach (ConfigFileManager.Ini_KeyValue iniKey in entry.Value) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"reg\d+_name_value_pair", RegexOptions.IgnoreCase)) + { + if (String.Equals(registryAction, "delete", StringComparison.OrdinalIgnoreCase)) + { + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*([^,]*[^\s,])\s*\]", RegexOptions.IgnoreCase); + } + else + { + // match single value + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*(.*[^\s])\s*,\s*value\s*:\s*(.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*\]", RegexOptions.IgnoreCase); + + // match multi value + if ( !regExMatch.Success ) + regExMatch = Regex.Match(iniKey.iniValue, @"\[\s*name\s*:\s*(.*[^\s])\s*,\s*:\s*value\s*:\s*(.*[^\s])\s*,\s*type\s*:\s*(.*[a-zA-Z])\s*\]", RegexOptions.IgnoreCase); + } + + if (!regExMatch.Success) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + iniKey.iniSectionName + + "\n" + indentation + "Key: " + iniKey.iniKeyName + + "\n" + indentation + "Value: " + iniKey.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + } + } + + if (!setupSuccessful) + break; + + if (!registryActionDefined) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Error Description: The key name " + regId + "_action is missing in the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + else if (!registryTypeDefined) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.Key.iniSectionName + + "\n" + indentation + "Error Description: The key name " + regId + "_type is missing in the above section in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + setupSuccessful = false; + + break; + } + } + + return setupSuccessful; + } + } +} diff --git a/AllPurposeAutoSetup/WindowsShortcutManager.cs b/AllPurposeAutoSetup/WindowsShortcutManager.cs new file mode 100644 index 0000000..29ffff7 --- /dev/null +++ b/AllPurposeAutoSetup/WindowsShortcutManager.cs @@ -0,0 +1,331 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; +using System.Drawing; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + class WindowsShortcutManager + { + // An event that can be raised, allowing other classes to + // subscribe to it and do what they like with the message. + public event Action> UpdateStatusDisplayAndLogEvent; + + // this dictionary stores shortcut name and its associated target_path and arguments + // it would look like this: + // [ shortcut1_name ] -> List[target_path,arguments] + // [ shortcut2_name ] -> List[target_path,arguments] + public Dictionary, List>> shortcutNameToTargetAndArgs = new Dictionary, List>>(); + + Form m_parentForm; + + public WindowsShortcutManager(Form parentForm) + { + m_parentForm = parentForm; + } + + public bool creatShortcuts(string sectionName) + { + string indentation = String.Empty; + bool setupSuccessful = true; + string msg, msg2, shortcutArgs; + string tempPath = ""; + + string shortcutPath = String.Empty; + string shortcutTargetPath = String.Empty; + string shortcutLocation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + bool createShortcut = true; + bool statusGiven = false; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n-=Creating Windows Shortcuts=-"; + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + shortcutNameToTargetAndArgs.Clear(); + + ConfigFileManager.readOneToManyDictionary(ConfigFileManager.ms_configGeneralInfo.iniFile, + sectionName, @"(shortcut\d+)_name$", @"(shortcut\d+)_.+", shortcutNameToTargetAndArgs); + + if (setupSuccessful) + { + foreach (KeyValuePair, List>> entry in shortcutNameToTargetAndArgs) + { + shortcutLocation = getShortcutLocation(entry.Value); + + if (shortcutLocation.Length > 0) + { + shortcutPath = Path.Combine(shortcutLocation, entry.Key.iniValue) + ".lnk"; + shortcutTargetPath = getShortcutTargetPath(entry.Value); + shortcutArgs = getShortcutArguments(entry.Value); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + shortcutPath; + + if (String.Equals(PathManip.AddTrailingSlashToPath(shortcutLocation), PathManip.AddTrailingSlashToPath(PathManip.GetUserStartupFolderPath()), StringComparison.CurrentCultureIgnoreCase)) + { + tempPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup), entry.Key.iniValue) + ".lnk"; + + if (File.Exists(tempPath)) + { + msg += " - SKIPPED. This shortcut already exists for all users"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.USER_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + createShortcut = false; + + if (!statusGiven) + statusGiven = true; + } + } + else if (String.Equals(PathManip.AddTrailingSlashToPath(shortcutLocation), PathManip.AddTrailingSlashToPath(PathManip.GetUserDesktopPath()), StringComparison.CurrentCultureIgnoreCase)) + { + tempPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), entry.Key.iniValue) + ".lnk"; + + if (File.Exists(tempPath)) + { + msg += " - SKIPPED. This shortcut already exists for all users"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.USER_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + createShortcut = false; + + if (!statusGiven) + statusGiven = true; + } + } + + if (!statusGiven && File.Exists(shortcutPath)) + { + msg2 = ((frmSetupStatusDisplay)m_parentForm).displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "Shortcut \"" + Path.GetFileName(shortcutPath) + "\" already exists.\n\nDo you wish to overwrite it?", "Warning!!!", -1); + + if (!String.Equals(msg2, "yes", StringComparison.OrdinalIgnoreCase)) + { + msg += " - SKIPPED. Shortcut already exists"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.USER_SKIP); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SKIPPED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + createShortcut = false; + + if (!statusGiven) + statusGiven = true; + } + } + + if (shortcutPath.Length == 0 || shortcutTargetPath.Length == 0 || shortcutLocation.Length == 0) + { + createShortcut = false; + } + + if (createShortcut) + { + try + { + File.Delete(shortcutPath); + + WindowShortcut.Create(shortcutPath, shortcutTargetPath, shortcutArgs, Path.GetDirectoryName(shortcutTargetPath), "", "", null); + + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + } + catch (Exception e) + { + msg += " - FAILED. (" + e.Message + ")"; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); ; + textProp.wordCount = 1; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + setupSuccessful = false; + } + + if (!statusGiven) + statusGiven = true; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + else + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. Unable to determine Windows Login Id"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + + if (!statusGiven) + statusGiven = true; + + break; + } + createShortcut = true; + } + + if (!statusGiven) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SYSTEM_SKIP); + textProp.wordIndex = 0; + textProp.wordCount = 2; + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SKIPPED. No configuration info found"; + + UpdateStatusDisplayAndLogEvent(msg, msg, textPropList); + } + } + + return setupSuccessful; + } + + + public string getShortcutTargetPath(List> iniKeys) + { + string targetPath = ""; + + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"shortcut\d+_target_path", RegexOptions.IgnoreCase)) + { + targetPath = iniKey.iniValue; + break; + } + } + + return targetPath; + } + + public string getShortcutArguments(List> iniKeys) + { + string args = ""; + + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"shortcut\d+_arguments", RegexOptions.IgnoreCase)) + { + args = iniKey.iniValue; + break; + } + } + + return args; + } + + public string getShortcutLocation(List> iniKeys) + { + string location = ""; + + foreach (ConfigFileManager.Ini_KeyValue iniKey in iniKeys) + { + if (Regex.IsMatch(iniKey.iniKeyName, @"shortcut\d+_location", RegexOptions.IgnoreCase)) + { + location = Common.resolveMacroPath(iniKey.iniValue); + + if (String.IsNullOrEmpty(location)) + { + if (Directory.Exists(iniKey.iniValue)) + { + location = iniKey.iniValue; + } + } + } + } + + return location; + } + } +} diff --git a/AllPurposeAutoSetup/app.manifest b/AllPurposeAutoSetup/app.manifest new file mode 100644 index 0000000..2a99695 --- /dev/null +++ b/AllPurposeAutoSetup/app.manifest @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AllPurposeAutoSetup/frmAbout.Designer.cs b/AllPurposeAutoSetup/frmAbout.Designer.cs new file mode 100644 index 0000000..75834a2 --- /dev/null +++ b/AllPurposeAutoSetup/frmAbout.Designer.cs @@ -0,0 +1,117 @@ +namespace All_Purpose_Auto_Setup +{ + partial class frmAbout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAbout)); + this.lblDescription = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.lblAuthor = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // lblDescription + // + this.lblDescription.AutoSize = true; + this.lblDescription.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDescription.Location = new System.Drawing.Point(58, 130); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(76, 16); + this.lblDescription.TabIndex = 0; + this.lblDescription.Text = "Description"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(273, 156); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(98, 31); + this.btnOK.TabIndex = 1; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // lblAuthor + // + this.lblAuthor.AutoSize = true; + this.lblAuthor.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblAuthor.Location = new System.Drawing.Point(9, 178); + this.lblAuthor.Name = "lblAuthor"; + this.lblAuthor.Size = new System.Drawing.Size(56, 13); + this.lblAuthor.TabIndex = 2; + this.lblAuthor.Text = "Developer"; + // + // pictureBox1 + // + this.pictureBox1.Image = global::All_Purpose_Auto_Setup.Properties.Resources.sm3missile; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(383, 100); + this.pictureBox1.TabIndex = 3; + this.pictureBox1.TabStop = false; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(8, 103); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(227, 24); + this.label1.TabIndex = 4; + this.label1.Text = "All Purpose Auto Setup"; + // + // frmAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.ClientSize = new System.Drawing.Size(383, 196); + this.Controls.Add(this.label1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.lblAuthor); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.lblDescription); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "frmAbout"; + this.Text = "About"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label lblAuthor; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmAbout.cs b/AllPurposeAutoSetup/frmAbout.cs new file mode 100644 index 0000000..fa8dad9 --- /dev/null +++ b/AllPurposeAutoSetup/frmAbout.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Reflection; +using System.IO; + +using CommonLib.Windows.Forms; + +namespace All_Purpose_Auto_Setup +{ + public partial class frmAbout : ChildForm + { + public frmAbout() + { + InitializeComponent(); + + Version appVersion = Assembly.GetExecutingAssembly().GetName().Version; + + DateTime buildDate = File.GetCreationTime(Assembly.GetExecutingAssembly().Location); + + lblDescription.Text = "Version: " + appVersion.Major.ToString() + "." + appVersion.Minor.ToString() + "\n"; + lblDescription.Text += "Last update: " + buildDate.ToString() + "\n"; + + lblAuthor.Text = "Developer: Duc Le"; + } + + private void btnOK_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/AllPurposeAutoSetup/frmAbout.resx b/AllPurposeAutoSetup/frmAbout.resx new file mode 100644 index 0000000..2adc151 --- /dev/null +++ b/AllPurposeAutoSetup/frmAbout.resx @@ -0,0 +1,3895 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + z/PlLMsW0zSdl1J28jxvSymbUsq6UqrKGAsAeHEcu2maCqUU55xLznlmWVbMOY8sy5oIIUa2bQ+EED3b + tneFEDtCiC3LsjaEEGu2ba85jnP593//99+wstj7pm3fAezbvr2F7cfHC7Vv+7ZvN73tO4B927e3sO07 + gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3 + t7D9/08bzI8AXVWFAAAAAElFTkSuQmCCKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxJISEgsQEBAQzo6OlY2NjZmNTU1cjExMXsoKCh/ + KysrfTAwMHc2NjZtPz8/X0hISE1PT084V1dXIGBgYAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGCjY2NjYlJSVjHx8fnhwcHMMYGBjk + Ghoa/RwcHP8fHx//ISEh/yQkJP8lJSX/JiYm/yQkJP8jIyP/ISEh/x8fH/8cHBz/Ghoa/xkZGf8cHBz/ + ICAg9CQkJNQvLy+xOzs7gVBQUExkZGQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgUuLi42 + JSUleiUlJb0iIiLvIiIi/yQkJP8kJCT/JSUl/zExMf84ODj/QUFB/0xMTP9UVFT/Wlpa/1xcXP9hYWH/ + b29v/2xsbP9mZmb/XFxc/1BQUP9ERET/Ozs7/zU1Nf8tLS3/KCgo/yMjI/8iIiL/JCQk/ygoKP0lJSXW + MjIyoUpKSlJWVlYZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPDw8BycnJz8fHx+YGxsb3SQkJP8rKyv/MzMz/0FBQf9VVVX/ZmZm/3Nzc/98fHz/ + h4eH/4qKiv+Pj4//lZWV/5qamv+cnJz/nJyc/5ycnP+cnJz/np6e/6Ojo/+lpaX/p6en/6ampv+mpqb/ + oaGh/5iYmP+Pj4//f39//2lpaf9OTk7/NDQ0/yMjI/8jIyP/JSUl/yMjI/UrKyu/QkJCaFpaWh4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpJxQUFIMbGxvaKSkp/zg4OP9AQED/ + W1tb/2tra/92dnb/fHx8/3x8fP96enr/e3t7/35+fv+IiIj/iYmJ/4qKiv+NjY3/kJCQ/5OTk/+VlZX/ + lpaW/5eXl/+ZmZn/m5ub/5ycnP+enp7/oKCg/6Ghof+goKD/oKCg/6mpqf+wsLD/sLCw/6ampv+Wlpb/ + ioqK/3V1df9WVlb/ODg4/x0dHf8YGBj/ICAg9S8vL7dERERNV1dXCgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwC + GhoaQCMjI7MhISH3JSUl/z4+Pv9dXV3/cXFx/3d3d/91dXX/eHh4/39/f/+AgID/gICA/4KCgv+IiIj/ + jY2N/5OTk/+VlZX/mJiY/5ycnP+goKD/o6Oj/6enp/+pqan/r6+v/6+vr/+wsLD/sbGx/7Gxsf+ysrL/ + srKy/7Kysv+zs7P/sbGx/6+vr/+urq7/rq6u/66urv+wsLD/qamp/6ampv+dnZ3/fn5+/1VVVf82Njb/ + JSUl/xkZGf8iIiLbMTExeUlJSRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwEHR0dTB8fH8YhISH/NTU1/1NTU/9vb2//eXl5/3h4eP91dXX/ + c3Nz/3l5ef9/f3//h4eH/4uLi/+Pj4//lpaW/5+fn/+oqKj/ra2t/7CwsP+3t7f/vr6+/8bGxv/Nzc3/ + 09PT/9XV1f/S0tL/0tLS/9HR0f/Q0ND/z8/P/8/Pz//Pz8//zs7O/83Nzf/IyMj/wcHB/7y8vP+6urr/ + ubm5/7y8vP+vr6//qqqq/7S0tP+4uLj/t7e3/6enp/97e3v/RkZG/ysrK/8bGxv/Hh4e7TIyMotPT08d + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkQiAgIMUpKSn/ + SEhI/2lpaf9wcHD/a2tr/29vb/93d3f/fn5+/4CAgP9+fn7/gICA/4qKiv+ZmZn/p6en/7Ozs/++vr7/ + ycnJ/9TU1P/h4eH/5OTk/+jo6P/t7e3/8fHx//b29v/5+fn/+vr6//X19f/19fX/9PT0//T09P/09PT/ + 8/Pz//Ly8v/s7Oz/5eXl/+Xl5f/h4eH/3d3d/9fX1//Q0ND/zMzM/8rKyv/Gxsb/u7u7/7Ozs/+vr6// + sLCw/62trf+oqKj/i4uL/2JiYv8yMjL/GBgY/xsbG+0wMDCFUFBQFQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAJiYmKSUlJa4rKyv9RERE/19fX/9wcHD/cXFx/25ubv9wcHD/dnZ2/39/f/+Kior/ + lJSU/5mZmf+rq6v/vLy8/83Nzf/f39//7Ozs//X19f/8/Pz//v7+//7+/v/+/v7//v7+//////////// + //////////////////////////////////////////////////////39/f/4+Pj/+vr6//v7+//5+fn/ + 9/f3//Pz8//y8vL/6urq/93d3f/S0tL/zc3N/8nJyf++vr7/tLS0/7S0tP+4uLj/rq6u/46Ojv9hYWH/ + MTEx/xcXF/8lJSXkNTU1aERERAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjDh0dHX4wMDDvR0dH/1tbW/9hYWH/ + YWFh/2lpaf9qamr/b29v/39/f/+NjY3/mJiY/6mpqf/Gxsb/3t7e/+zs7P/29vb//v7+//////////// + +/v7//n5+f/6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v////////////////////// + //////////////////////////////////////7+/v/+/v7//v7+///////9/f3/9vb2/+rq6v/k5OT/ + 4ODg/9TU1P/IyMj/xMTE/7q6uv+xsbH/s7Oz/7S0tP+bm5v/XFxc/ykpKf8RERH/KSkpxzw8PDQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAB0dHTcjIyPPODg4/19fX/9tbW3/ZmZm/2dnZ/9sbGz/ampq/3Z2dv+Li4v/oqKi/729vf/T09P/ + 5OTk//Pz8//7+/v/9/f3//j4+P/+/v7///////39/f/8/Pz//f39//39/f/+/v7////////////+/v7/ + /v7+//39/f/8/Pz/+/v7//v7+//7+/v//Pz8//39/f/+/v7//v7+///////+/v7//f39//7+/v////// + /v7+//7+/v/+/v7///////n5+f/4+Pj//f39//z8/P/39/f/7+/v/+Hh4f/U1NT/y8vL/83Nzf/AwMD/ + qqqq/6ioqP+srKz/jY2N/1hYWP8gICD/FxcX9CkpKYRLS0sOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYmJgklJSV8MTEx805OTv9oaGj/Z2dn/2pqav9ra2v/ + cnJy/4GBgf+SkpL/qqqq/8DAwP/V1dX/7Ozs//j4+P/6+vr/+vr6//r6+v/7+/v//f39//z8/P/7+/v/ + 9/f3//b29v/19fX/8/Pz//Hx8f/x8fH/8PDw/+/v7//u7u7/7e3t/+zs7P/s7Oz/7u7u/+/v7//x8fH/ + 9PT0//f39//5+fn//Pz8//v7+//8/Pz//f39//7+/v/+/v7//////////////////v7+//z8/P/7+/v/ + +fn5//z8/P///////Pz8//Dw8P/r6+v/4eHh/9PT0//IyMj/vLy8/7Gxsf+vr6//s7Oz/25ubv8+Pj7/ + Gxsb/yIiIss0NDQtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIyMb + KSkpt0FBQf9eXl7/Z2dn/2VlZf9mZmb/bm5u/3l5ef+Ghob/o6Oj/8bGxv/j4+P/7Ozs/+7u7v/z8/P/ + 9fX1//f39//39/f/9fX1/+7u7v/q6ur/5ubm/+Li4v/d3d3/2tra/9jY2P/X19f/1tbW/9fX1//Z2dn/ + 3Nzc/+Dg4P/h4eH/5OTk/+Xl5f/r6+v/7Ozs/+7u7v/x8fH/9PT0//f39//4+Pj/9/f3//b29v/7+/v/ + /f39//7+/v/+/v7//v7+//v7+//6+vr/+fn5//z8/P/8/Pz/+/v7//r6+v/7+/v//f39//7+/v/5+fn/ + 7+/v/+Dg4P/R0dH/wMDA/7Ozs/+urq7/urq6/56env9jY2P/IyMj/xgYGO0yMjJlAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoPzc3N+JPT0//XV1d/1lZWf9dXV3/ampq/3BwcP+EhIT/ + oqKi/8HBwf/Z2dn/5+fn/+/v7//z8/P/9PT0//Ly8v/t7e3/4uLi/9bW1v/Pz8//y8vL/8nJyf/IyMj/ + xsbG/8jIyP/MzMz/0NDQ/9PT0//X19f/2dnZ/9zc3P/g4OD/4+Pj/+fn5//p6en/7Ozs//Ly8v/z8/P/ + 9fX1//f39//6+vr//Pz8//39/f/6+vr/9fX1//v7+/////////////7+/v/9/f3/9/f3//n5+f/8/Pz/ + /v7+//39/f/6+vr/+vr6//z8/P/+/v7////////////7+/v/8/Pz/+np6f/Y2Nj/zMzM/8LCwv+ysrL/ + srKy/7CwsP99fX3/MzMz/xsbG/40NDSUREREDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKWM1NTXw + WVlZ/2FhYf9XV1f/YGBg/29vb/98fHz/mJiY/7e3t//U1NT/7Ozs//f39//09PT/7+/v/+np6f/h4eH/ + 1tbW/8vLy//Dw8P/vr6+/729vf/FxcX/yMjI/8fHx//IyMj/ycnJ/8zMzP/Pz8//0dHR/9XV1f/W1tb/ + 19fX/9ra2v/d3d3/39/f/+Hh4f/h4eH/4+Pj/+Tk5P/m5ub/6enp/+vr6//u7u7/8PDw//Ly8v/29vb/ + +fn5//7+/v///////v7+//7+/v/+/v7//f39//v7+//8/Pz//v7+///////////////////////6+vr/ + +fn5//39/f/9/f3/+fn5//Dw8P/o6Oj/4ODg/8rKyv+7u7v/rKys/66urv+Wlpb/SkpK/xoaGv8hISG7 + NTU1GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACgoKAMqKip+Pj4++lpaWv9jY2P/YWFh/2ZmZv95eXn/jIyM/6Wlpf/Ly8v/ + 5eXl/+zs7P/s7Oz/6enp/+Dg4P/Q0ND/xcXF/8DAwP+4uLj/tbW1/7e3t/+9vb3/wsLC/8PDw//FxcX/ + ysrK/8/Pz//S0tL/0tLS/9DQ0P/Pz8//1dXV/9fX1//Y2Nj/2tra/9zc3P/d3d3/39/f/93d3f/Y2Nj/ + 2NjY/9nZ2f/a2tr/2tra/9vb2//b29v/3t7e/+Hh4f/j4+P/5ubm/+rq6v/u7u7/8/Pz//j4+P/8/Pz/ + /v7+///////+/v7//f39//39/f/9/f3//Pz8//b29v/19fX/+fn5//z8/P/9/f3//Pz8//n5+f/39/f/ + 4ODg/9LS0v/BwcH/srKy/7u7u/+oqKj/VlZW/x0dHf8ZGRnYQEBAJAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysHMjIykExMTP9UVFT/ + Y2Nj/2dnZ/9mZmb/dnZ2/5mZmf+8vLz/2dnZ/+np6f/r6+v/3d3d/87Ozv/ExMT/vLy8/7S0tP+xsbH/ + sbGx/7Ozs/+2trb/vb29/8LCwv/Hx8f/yMjI/87Ozv/Y2Nj/4uLi/+jo6P/p6en/5ubm/+Li4v/i4uL/ + 4uLi/9/f3//d3d3/2tra/9fX1//V1dX/1NTU/87Ozv/Pz8//z8/P/9LS0v/T09P/1dXV/9XV1f/a2tr/ + 4uLi/9zc3P/X19f/1tbW/9jY2P/c3Nz/4ODg/+Xl5f/t7e3/9/f3//7+/v/////////////////7+/v/ + +/v7//z8/P/7+/v/+/v7//v7+//7+/v//Pz8//39/f/19fX/7e3t/9/f3//Ozs7/u7u7/7i4uP+qqqr/ + bm5u/yMjI/8hISHjMTExNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAALCwsCTMzM5lHR0f/XFxc/1tbW/9hYWH/bm5u/4KCgv+lpaX/y8vL/+Li4v/m5ub/ + 3Nzc/83Nzf+9vb3/sLCw/6ysrP+srKz/rq6u/7Gxsf+1tbX/vLy8/8TExP/MzMz/1dXV/9ra2v/j4+P/ + 5OTk/+Li4v/e3t7/1NTU/8rKyv/BwcH/ubm5/6SkpP+fn5//mJiY/4+Pj/+Hh4f/fX19/3d3d/90dHT/ + dXV1/3h4eP98fHz/g4OD/4mJif+Pj4//k5OT/5ycnP+qqqr/s7Oz/8DAwP/Ly8v/09PT/9fX1//Y2Nj/ + 29vb/+Dg4P/k5OT/7Ozs//Hx8f/19fX/+vr6//7+/v/////////////////+/v7//Pz8//r6+v/5+fn/ + +fn5//r6+v/w8PD/6urq/97e3v/V1dX/vb29/66urv+5ubn/d3d3/xkZGf8XFxfnPz8/OgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLgcyMjKZRkZG/1paWv9WVlb/ + YWFh/29vb/+Kior/tbW1/9ra2v/o6Oj/3d3d/8nJyf+7u7v/sLCw/6moqP+ioqL/pKSk/6+vr/+1tbX/ + urq6/8fHx//X19f/4ODg/+Hh4f/d3d7/2trb/9DQ0P/ExMX/tLS1/6Chof+Ji4v/d3p7/21wcf9kaGn/ + VFlb/1BWWf9NVFf/SVBU/0RMT/8+Rkn/PUNH/zxCR/8/R0v/PkdL/0BKTv9GT1L/TlRX/1RYWv9XWlv/ + XF1d/2FiYv9mZ2f/bm9w/3x/f/+RlJP/pqmp/7K0tP/GyMn/1dbW/9TV1f/Y2dn/3d7e/+Pj4//m5uf/ + 6urr//b29v/8/Pz//f39/////////////f39//r6+v/39/f/9vb2//r6+v/v7+//7u7u//Dw8P/W1tb/ + wcHB/7i4uP+wsLD/dXV1/ywsLP8dHR3oREREOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcDODg4kEdHR/9WVlb/YWFh/2ZmZv9ra2v/kpKS/8jIyP/g4OD/2NjY/8vLy/+7u7v/ + qqqq/6ampv+lpKT/p6am/6Kiov+tra3/w8PD/9PT0//f39//6Ojo/+np6f/g4OH/0NDQ/7W2tv+en5// + goSE/3J0dv9kZWf/VVVZ/0dITP8/QUX/PD1D/zc6QP8qLzT/Jywy/yQrMP8iKTD/ICgv/x8oLf8iKjD/ + Iyox/yMqMf8eJy7/Hiku/yMsMf8qMDX/MjQ4/zc4Ov8+PkD/R0VG/0lISf9ISEv/SEpO/0xRVv9TWF// + VFlg/21yd/+Ok5T/oqan/7m8vP/O0M//4OHf/+Xl5P/e393/4uLi/+fn5//x8fH//v7+///////+/v7/ + +fn5//n5+f/5+fn/8/Pz//r6+v/6+vr/9fX1//Pz8//b29v/vr6+/7i4uP/AwMD/f39//yUlJf8fHx/m + TU1NLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PH5NTU3/V1dX/1lZWf9jY2P/ + dnZ2/5qamv/IyMj/3t7e/9XV1f+9vb3/qamp/6CgoP+hoaH/pqWl/6moqP+3t7b/vb28/9HR0f/j4uL/ + 6Ojo/+bm5v/S0tL/s7Oz/5eXl/+Dg4T/aWpq/09QUf9HSkr/P0NE/zI1OP8pKi7/JSYs/yYoLv8pKTL/ + LCw3/zM4Pf81O0D/Nj1E/ztBSf8+RU3/Q0xS/0hQWP9LUFn/Sk9U/0FKTv8+R0z/P0ZL/0FGS/9CRUn/ + R0dK/0JBRf83Njn/Nzc6/zM1Ov8oLjb/JC04/yQwO/8nNED/LzxD/0BKTf9QWVz/YGdo/36Dgv+qrqv/ + y87K/9PV0P/Y2tj/3t/f/+Xl5f/s7Oz/8fHx//v7+//6+vr/+/v7//X19f/19fX/8fHx//Hx8f/19fX/ + 9vb2/+vr6//e3t7/yMjI/7S0tP+1tbX/dHR0/x8fH/8xMTHgTU1NHQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAzMzNjQkJC+lZWVv9bW1v/ZGRk/3x8fP+np6f/zc3N/97e3v/Gxsb/qKio/5ubm/+ampr/ + mZmZ/5ycnP+np6b/vby8/9vb2//l5OT/4ODg/9PT0v+7u7v/np2d/3p6ev9hX2H/T09P/z0+P/8tLzD/ + KSss/yIlJP8kJyb/KzAt/zU4N/9ER0b/VllZ/2hqav94env/jJiV/5Ognf+eqqn/qra0/7XBv/+/ycj/ + w87M/8TPzf/Gzcv/w8rI/73GxP+0vbv/q7Sx/6Gpp/+epaP/jZST/291df9mbm3/VWBf/z9OTv8rP0D/ + HTU1/xEsLf8WKi7/ICw0/yYxOf8vOT//PUVJ/1BWWf9ucnT/jpCQ/7a4uP/P0M//3N3d/+Hh4f/i4uL/ + 6+vr//Ly8f/+/v7//Pz8//b29v/29vb/9/f3//Dw8P/q6ur/7u7u//Pz8//f39//ysrK/7Gxsf+tra3/ + fHx8/ykpKf8vLy/KWFhYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyPzo6OvBQUFD/WFhY/2JiYv+AgID/ + qqqq/8rKyv/FxcX/tra2/6Ojo/+Wlpb/lZWV/5qamv+lpaX/vb29/9LR0f/g39//4+Pj/9DQ0P+xsbH/ + j5CO/3Nycv9ZWFf/QD8+/zQ0M/8pKSj/HR0e/xweH/8zNjf/UFBP/2hoZf+FhoP/oqOg/7q7uf/LzMj/ + 1NbT/93f2v/a5eD/2OLd/9Pe2v/P2tX/y9jT/8rX0//L2NP/zNjU/8zW1v/M1db/y9XV/8zX1v/R29n/ + 1d/e/9zk4//d5eT/2ODf/9Pb2P/J0s//tMC8/5emof9xhYD/U2pl/ztMUP8eLTf/EiIr/xknL/8jLjX/ + MDY9/0FESf9aWl7/bm5w/4eHh/+xsbH/1dXV/+Pi4v/f39//4eHh/+np6f/29vb////////////6+vr/ + 7u7u//Ly8v/19fX/9PT0//X19f/c3Nz/ycnJ/8DAwP+kpKT/aGho/yQkJP9CQkKobGxsBwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACkpKRs2NjbiT09P/19fX/9eXl7/d3d3/6ampv/FxcX/v7+//6Wlpf+RkZH/jY2N/5GRkf+fn5// + t7e3/9PT0//q6ur/6unp/9fX1/+zs7P/iomJ/2trav9aWFj/RUVE/ysuKf8bGxj/GRsY/ystKv9FRkb/ + Zmto/5CVk//GxMb/2NPX/9rY2//c297/29vc/9PV1v/Lz8//xszL/8zS0//M0tP/y9PT/8rT0v/M1NP/ + zdbV/8/Y1f/R2df/0tfc/9DW2f/N1Nj/ytLW/8rR1v/J0dX/zNTX/8nP1P/Eyc7/zNDU/9fZ2v/b3t7/ + 293c/9fY1//U1dP/tLu7/3yJjv9UZGn/OEhN/yQzOv8mMDj/MDQ5/zY3Pv8/P0L/T05P/2loaP+CgYH/ + qqqq/9fX1//k5OT/2dnZ/+jn5//19fX/+vr6//v7+//29vb/9/f3//T09P/v7+//7u7u/+zs7P/k5OT/ + xMTE/7Ozs/+rq6v/WFhY/yYmJv9UVFR+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAJNjY2t0dHR/9eXl7/Z2dn/3l5ef+ioqL/ + v7+//7q6uv+ioqL/lpaW/46Ojv+SkpL/pKSk/8HBwf/e3t7/4+Pj/8rJyf+traz/ioqJ/2xra/9WVVX/ + PTw7/yglJf8eHxv/HyMc/zc5Nf9obGf/pqum/9DX0f/k6uX/6O3o/9bW2//LydL/xsfN/8THzP/J0NL/ + 0dna/9bg3v/X4uH/3eLh/9/k4//i6eX/5Ovn/+Xs5v/i6+T/3+ng/97o3//e5eT/4Ojn/+Lq6P/j7On/ + 4uvp/9/p5//c5uT/3eXk/+Ll5//d4eL/1tja/83P0f/Gx8r/ycjL/9HLzv/X2tj/4Onl/+Xs6f/L1dP/ + lJ+h/2Bqb/9DSk//ODxB/y4uMP8zMjH/RURE/1NSUv9kY2P/hoaF/7Kysv/a2tr/5OTk/+Pi4v/r6+v/ + +Pj4//39/f/39/f/9PT0//Ly8v/m5ub/8vLy/+3t7f/b29v/zMzM/729vf+fn5//PDw8/zU1NfZdXV1K + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADExMXxJSUn/WVlZ/2VlZf92dnb/m5ub/7u7u/+2trb/oKCg/5aWlv+SkpL/k5OT/6urq//R0dH/ + 5eXl/9jY2P+6urr/lZWV/3l5ef9aWVn/ODc2/yYlJP8jISH/Li0s/1ZZVf+Gi4T/tru2/9je2P/Y3tn/ + yM/K/77FwP++xcD/0NTT/9TZ2P/S2df/09/Z/9bl3f/W593/0ebZ/8vj1P/J4M//yN/O/8Tdy//C28j/ + vtrE/73awv+828H/vNvC/7zayP+62cf/uNrH/7jax/+73cn/v+DM/8Lizv/H5dP/0eja/9br3P/X6d3/ + 1+Tb/9bf2f/W3dj/3N/c/8TNx/+0wrr/xNDJ/9Td2P/e5+L/1tzc/7O5uv+IjY//V1lZ/zw7Ov8xLy7/ + MjEw/z08PP9QUFD/cHBw/5STk//Hx8f/2tra/+bm5v/s6+v/8/Pz//39/f/7+/v/9fX1//T09P/t7e3/ + 6+vr/+np6f/a2tr/wcHB/7i4uP+MjIz/NTU1/0pKSuJycnIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTE5PDw8805OTv9hYWH/dnZ2/5KSkv+vr6// + rq6u/5ucm/+SkpL/kpGS/5uam/+0s7T/1NTU/+Li4v/Ly8v/oaGh/4ODgv9kZGH/QEA+/y0sLP8fHh7/ + JiUk/0tKSv+PjY7/x8vH/9Pb1P/S2dL/y9LM/8HIwf+9xL7/ydDK/9rh3P/U3dD/0N3L/9Lhz//O4c3/ + xNzF/7jVu/+szLP/pMmt/5zLqP+azKf/lcik/5DGn/+LxJr/iMOX/4jFl/+Jxpn/iMad/4LFnP99xJr/ + fcWb/4LHnv+Hy6L/i86k/4/Pp/+Tzav/mdCu/6bVt/+03ML/weHL/8fi0f/I4dL/z+DS/9Xf0//Q29H/ + xtHJ/8HMxv/H0c7/09rZ/9vh4P/Gx8j/lpSV/1hWVv82NDP/Ly4t/zU1Nf9DQkL/U1JS/4SCg/+pqKj/ + zMvL/9zb2//l5eX/8fLx//r6+//7/Pz/+vr6/+jo6P/n5+f/6enp/97e3v/Q0ND/xMTE/7Kysv9ubm7/ + Ojo6/2ZmZqqgoKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ojo6Djc3N9BMTEz/U1NT/2dnZ/+JiYn/o6Oj/6enp/+Tk5P/i4uL/5CQkP+bnJr/wMG//93e3P/a29n/ + vby7/4uKif9raWj/VFJW/zAuN/8jISX/JSQj/05NSv+enZn/zs7M/9fW2P/HycP/usC1/7vBuP/EysH/ + zNXN/8zX0f/G083/wc7K/7TNtf+ry6r/pcik/5vBmf+QvY7/ir2I/4rBif+KxIv/fb+H/3zAif99wor/ + e8OK/3nDiP9zwoX/ccGC/2/AhP9qvYj/Zb+I/2HBif9iwor/ZcOM/2fEjf9kw4r/a8eO/3PKk/9rwoz/ + a72K/3PAkP9/xZr/isuk/4zNo/+j0K//utO8/77Ywv/E28n/yNrP/8jV0P/Fzcz/wcfI/9Pa1v/f5N// + 0tLQ/6Kfn/9cWFr/LCkp/yoqKf88Pjr/R0lF/2FjYP+VlpX/wsPD/9DPz//j4uL/8fDv//f19P/4+Pj/ + 8vLy/+vr6//o6Oj/5eXl/9zc3P/W1tb/t7e3/6ysrP9YWFj/T09P/4SEhF8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODiARUVF/1dXV/9mZmb/eHh4/5aWlv+fn5// + jIyM/4WFhf+Qj5D/oqOi/8nNxv/h5N//ztDL/6Okn/+GhYH/ZmNi/05KR/8vKzL/Hhot/0hFTv+Ni4r/ + x8e//9DRx//CxMD/wsTH/8rMyf/HzsP/wMu+/7nKt/+yyLL/p8Wq/5q/ov+UuZ3/iruO/4a9if+Evof/ + gb6E/3u/fv93v3r/dL94/3C8df9ip2//XqZv/1ymb/9YpW7/VqVu/1Okbv9SpG//UKNw/0efcv89oHH/ + NaFx/zalc/88qnb/P694/z6xd/9GtXn/ULx6/1W/ev9Zw3r/YsmC/2jNiP9pzon/Z86F/3bJjP+HyJf/ + kM6e/5/Urf+v17r/utbF/8HTy//F0s3/vM/B/7vLvP/O08z/4d3e/8/IzP+Jg4b/RkdF/ycrJf8wOC// + P0U//1daWf+Gh4n/p6Om/9jT1P/w6+f/7+rm//r6+v/8/Pz/9/f3/+3t7f/m5ub/4+Pj/9zc3P/Ozs7/ + wMDA/5OTk/9CQkL/Z2dn5p6enhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/Kz8/P/BRUVH/YWFh/3BwcP+Hh4f/nJyc/5qamv+Hh4f/iYmJ/6enp//Pz87/3+Lf/77Av/+ZmJf/ + eHh3/1taWv89Ozv/JCIi/ygmJf9pamX/vr+6/9ze2f/Dx8H/tb22/77Hwv/By8f/uMnF/67Gvv+kwa7/ + l7uX/4y4hP+FuXb/f7pt/327av94s2n/d65s/3CnbP9nnm3/YJNt/1eJa/9Ngmj/Q3xl/zt4Wf85eVr/ + OXtd/zh+Yf85gmX/O4Ro/z6GbP88iG3/M45q/yOMZ/8UiWP/EIpi/xONZP8OjmL/CI5e/xKRX/8hmGH/ + Kpxj/zOmZ/9AsW7/Ur58/1bDf/9bxYD/YsaB/2jHgf9qx3//cseF/4DLkv+P0KL/ntWu/6jYtP+y1rr/ + w9zF/8TTxP++xLz/09HQ/+Xh4v+1s7T/YF9f/zg5Nv8yMjD/MzAy/05JT/91cXX/qKOk/9nV0f/v6+f/ + 6+vq//X19v/6+vr/9fX1/+vr6//k5OT/2tra/9DQ0P/BwcH/p6en/3Fxcf9aWlr/kJCQnAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj6yS0tL/1xcXP9ra2v/gYGB/4uLi/+MjIz/ + i4uL/5OTk/+pqan/y8zL/9nZ2v+urLD/j42Q/25sb/9bW13/Ozs9/x8eIP89PT7/mpuV/9bZyP/Fyb// + tr63/625s/+vwbX/rMOv/6O7o/+Rupb/grSI/3Spd/9wpm3/dq5s/3ezaf9rq1v/YKFP/1+MVP9XgFP/ + RnVM/zpqSv86ZE3/QGtT/0V0Wv9Fe2L/Q4tj/0KPZv9Ckmr/RZZv/0ebcv9JoHX/SaJ4/0uke/9IqHj/ + Oqd3/yqjdP8jo3L/IqJz/xqhcP8Vom3/FZ5q/xWcZv8RlGH/CIxW/waKT/8Zlln/JaFe/y2nX/85t2X/ + Pr9k/0C+YP9PxWr/Ycx6/3DRhv93z4z/dsqJ/5TPoP+r1rH/uNe5/8HUv//EzcL/x8rG/8/Oz//W1Nb/ + ioaH/0dBRP80LDH/PjU9/01HS/9rZmj/o6Cc/8PBvP/Y2Nj/7Ozs//r6+v/4+Pj/7+/v/+jo6P/g4OD/ + 2tra/8fHx/+9vb3/np6e/11dXf97e3v4tra2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ozs7SENDQ/9VVVX/ZGRk/3Z2dv+QkJD/lpaW/4aGhv+BgYH/qqqq/9bW1v/T09P/srGz/4uJj/92c3j/ + T09S/y4wM/8uMTL/YWZl/6+1tP/Hy8X/xMS6/7W8tf+ntq7/nrWm/5e3m/+Qt4v/ibN8/3qza/90smX/ + c61m/2miYf9dkVf/UntO/0JnQf82YDn/OFE9/ztWRP8+ZUr/QXRQ/0eDV/9Pj13/Vpdi/1ecZv9SpGf/ + Uqdt/1OpcP9SrHL/U7Fz/1W1dv9Wtnn/WLd+/1G0gv9BsX//MbB9/yivfP8nr37/I69+/x2ue/8grnr/ + Iq51/yCrbv8Vo1//Ep9a/xuiYf8Sm1b/CZVM/w6dTP8Xp0z/I61Q/zW3Wv9EvmP/VMVw/2PNe/9u0oD/ + g9OT/5TUnv+j16X/r9au/7XQtP+5ybn/v8e//8rNyf/Qzcz/pKCg/11XWv8tKS3/NC80/0E+P/92dXD/ + l5aR/729vv/a2tr/8fHx//j4+P/z8/P/7u7u/+rq6v/i4uL/0dHR/8jIyP+2trb/fn5+/2lpaf+jo6PD + 0tLSBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/Pwc8PDzKTU1N/11dXf9vb2//iIiI/5aWlv+SkpL/ + kZGR/6Kiov/Hx8f/1tbW/66urv98e33/bmlv/1BMUv8yMjT/MTU0/3B2c//AycX/wczG/7S9t/+prar/ + m6uh/5aynv+RuZf/g7SA/3epaP9zqFr/bqJc/2WUWf9chFH/SWpD/zJQLv8uQyv/Mkcy/zdTPv89a0b/ + RHlN/0uEU/9Qjlr/VJpd/1mhX/9cp2T/XKpq/12ycv9ftHf/X7d7/165ff9cu37/X76A/2DAgf9gwIb/ + V7yJ/0S7h/82uof/KrmG/ya5hf8muoX/IbeA/yO5gP8luX3/Jrp4/yO4bv8ouXD/K7hy/x2vZv8OpFj/ + F6lZ/xyqWP8Rnk3/E5tJ/ySkUP88tGH/Tb9s/1XEbf9kyXj/d9CF/43XkP+X1ZX/n9Kc/6fNpv+wyq7/ + s8ex/8DIu//U2c//xsrF/2doaP80NDb/MS4v/0lHRv9oZ2X/kZGR/7i4uP/d3d3/8fHx//b29v/19fX/ + 7u7u/+Xl5f/c3Nz/zc3N/7+/v/+pqan/bm5u/4qKiv/Ozs5SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + PDw8VUFBQf9XV1f/ZmZm/319ff+VlZX/kZGR/319ff+hoaH/09PT/8/Pz/+ioqL/goKC/2poav9QS07/ + MzAz/zk6Of+JkIr/x9DJ/7jFuv+jtKb/nKue/6GzpP+SspX/fKp9/2ykav9qpGP/aZ5a/2GTTv9Sc0r/ + OFE4/yU3Iv8oMyT/LUcp/zliMv9EcDz/R3M+/0eGQ/9NkUr/VJpT/1iiXf9cqWT/Xatn/16sbP9crXP/ + YrV9/2K4gv9iuob/Y7yK/2TAjP9nwo//asOP/2nEk/9gxZT/TMOT/z3DlP8rwo//IsCK/yLAif8avX7/ + Hr5//yPAgv8gvnz/Hbx1/ynAfv8pwHv/Jb13/xy5bP8ht2r/J7Vp/yKwYP8hqlv/HqNX/x+hU/8op1T/ + Na9Y/0rBZv9ey3D/d9V7/4HVfv+J0YT/l9KS/6PUof+r1Kn/tc2y/7LFrv/G1cX/z9jR/4aLif8uLS7/ + LSor/0ZDRf9mZmb/j4+P/7q6uv/d3d3/7+/v//T09P/v7+//6Ojo/+Li4v/U1NT/xsbG/8DAwP+Kior/ + enp6/729vc3a2toHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSgZAQEDNUlJS/2dnZ/90dHT/h4eH/5OTlP+IiIn/ + ioqK/8LCwv/b29z/paWm/3l5ef9tbm7/WlhY/zMuL/9BPj7/mpyY/8TNxP+zwbT/s8Kz/6W2pP+SqI// + haiA/32tdP9np1v/WaBN/1WXTf9LekT/MVAs/yAyHP8iNB//J0Ui/y9XJ/83aS3/QXcx/0eDN/9Niz7/ + TphG/1KfT/9VpFj/Walg/1yuZ/9es2z/YbZy/2W5e/9nvIP/Zr+J/2bAjP9mwo//aceU/2/Kl/9zzJr/ + dM6f/2rOoP9WzaD/Pcuc/y3Jl/8kx5P/H8WO/xrEh/8fxoj/JMeH/yPFgv8qyIr/McmM/zLJiv8pxX// + I8J3/yG+dP8gunD/H7hq/yO2aP8puGf/K7Zh/yWvWP8eqFD/JKtN/z++V/9m1Gz/ddly/3nUc/+C0H7/ + jc+K/5XPkv+pzqb/sdKw/6rFq/+6y7z/ytTO/5SVl/80LjP/Lict/05OTv9tbW3/k5KS/7m4uf/b29v/ + 7u7u//X19f/x8fH/5ubm/93d3f/Ozs7/xMTE/6mpqf96enr/np6e/9PT01MAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCS0tLS/9dXV3/cHBw/3x8fP+NjY3/ioqK/4SEg//BwsD/2trZ/6qqqP96enj/cXBw/2NgY/8xLy// + Pj46/52dlv/FyLn/uMGt/6m5ov+Zs5n/jayV/3uke/9vpV//aKFZ/2KfVP9MhUH/J1Mg/xouF/8dJhr/ + I0Qe/ypaIP8yYyb/PHMs/0OBNP9Jizf/SZA4/0iRPv9NmUj/UqJU/1aoXP9asGT/YLhs/2G9cv9jwnr/ + aMSD/27Fi/9uxpD/bceU/27Kl/9wzZz/c8+c/3bQnv950qX/cdSs/1/Ur/86zJ3/LMqb/yfKnP8py53/ + JMqX/yfMlf8r0JX/Lc6U/zXRmf80z5X/Ns+S/zDOiv8tz4X/I8h7/x7Cdf8mxnb/Lcd1/zDDcv8svWr/ + K7hk/ym2Xv8rtVf/LK9N/0C0Tv9cw1n/cNFn/3jScP980nX/gdV8/47Lh/+c0Zn/ocmi/6/Ks//Az8P/ + zdLL/5OPjf9HQUL/Nzk4/1NTUv9tb23/k5WT/7m7uv/g4OD/9/X2//Xz9P/p6en/5OXk/9TU1P/Gxsb/ + vr6+/4iIiP+Hh4f/0NDQyPf39wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz/AWlpa/1xcXP90dHT/gYGB/42Njv+JiIj/ + naGc/+Lm4P+2uLP/ent2/3Z1cv9jX2D/QTpA/0xJTP+nsqj/u8Gx/7S6of+tuZj/mrOM/3unef9hnXD/ + Vppb/16gTf9UiUr/N1sz/xorGf8XHxX/HDAa/yZHJv8rYSX/MG8j/zZ2Kf89gC7/Q4kz/0iSNf9LmDn/ + TpxA/1WlSP9aq1P/XrFe/2G2aP9mvHP/ZsB6/2fDg/9rxYz/dMWV/3TFmv90xp//c8ei/3bKp/94y6f/ + eMuo/3nMrv9vz7L/Xc20/zzGp/81x6v/MMao/zPJqv8zyqf/Lsqg/yvQnf8106P/QNam/z7Xn/9A2Jz/ + ONaS/zLWjP8t04T/LdCB/y/Pfv8xzXz/Nsp7/zbGef82w3L/NsBt/zO8ZP82t1j/RLJS/06uSv9buE3/ + as1b/27aZP9p3V//d9hr/4bXgP+Q0Jb/msWh/67Lrf/E1Ln/xcy5/6aonf86Pj3/LTIv/05TT/9udHD/ + lJmX/8C+v//m4OP/9O/y/+3t7f/n5+f/2NjY/9DQ0P/Jycn/np6e/4mJif/CwsL/8/PzQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBANEdHR/xfX1//ZGRk/4ODg/+Wlpb/hYWF/52dnf/S1NH/wMK//4SFg/98fHr/Y2Ni/0E+P/9GQkT/ + lpSW/8HKwf+0vrT/m6qd/4+okP9+o3r/aZ5h/1ydTv9Vk0b/Rnc9/x9GGf8UJhH/FSoS/xxBGf8nViP/ + LmEp/ypwI/8reyP/MYAo/zmILv8/jzT/Rpc5/0ucPf9Qn0P/VqNP/1ymW/9jqWb/aaxy/2+vfP9xsIT/ + crKN/3Wzlf9utJj/brae/224o/9vu6b/dMCt/3bEsf94xrL/dMS0/2TBsv9Sv7P/QL20/zS8s/8zvbT/ + NsC3/zXBtP8vwan/Mcem/z7Kr/9IzLP/Rsur/03Pq/9Kz6T/Rc+c/z7VlP852o//NteJ/zTUhP820oD/ + OM96/zrPdf860G//N8hn/zrAXv9KvFn/ULhP/1a2TP9Yukv/XcRT/2LRXP923Gv/edZ0/4DPgf+RzJH/ + ncuX/6nFn/+3xLD/v8S9/46QkP8yMzP/OTo5/1VXVf+Bg4H/m5qb/8fDxf/39fb/8/P0/+jo6P/g4OD/ + 19fX/8vLy/+zs7P/j4+P/62trf/p6emjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT2YUFBQ/2RkZP9ycnL/i4uL/5SUlP+NjY3/ + w8PE/8zMzf+FhYb/b29x/2NiZf9PTlH/R0hK/4WHhv+9v73/qrSt/5eqn/9/oYz/cp98/2edaP9jnlb/ + Wpc9/ztrJf8ZNRf/ECgO/xQrEv8aQRb/IFgb/yZoH/8sdCL/KX0i/yqDJP8ziSn/PpAz/0aVOv9Klz// + TZhD/0+YRv9Ul0//XJdZ/1+WX/9lmGz/bJ99/3KiiP96pZP/fKia/3ezn/92t6b/d7qs/3e9sf94wLb/ + eMO6/3fFu/92xb3/cse//2nFwv9WwL3/R769/z+/vv8/wMD/QsDA/zq+t/8xvK3/N76u/0jFuf9Qx7n/ + TsSw/0nDqP9EwKH/Rc2g/z/Wmf881JL/O9OK/z3UhP9B1YD/P9V4/zjTbP860WX/Q85d/1jNX/9hy1r/ + XsJQ/1G1RP9KsEH/S7VG/1/OV/9l0mH/dNRv/4LVe/+Kz37/l8aM/6rEqv+8ycP/wcLA/3x8e/8zMjL/ + Q0FC/2ZlZv+AgID/pqen/9vc3P/z8/P/8PDw/+rq6v/e3t7/z8/P/8XFxf+ZmZn/mpqa/93d3dUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + U1NTD0BAQOpXV1f/Z2dn/319ff+Kior/hoaG/6urq//X19j/oJ2g/2tpbv9tbHH/TExR/0BDRv9+hYL/ + tr62/7W/tP+XqJ3/g6OH/2+mdP9go2H/VppS/0qFQf8uWx//FCsK/w4ZDP8SMRH/HEgY/yNaG/8hZRn/ + IXEa/yd8Hv8uhCP/NYgp/zyLL/9DjTj/SI08/0qKQP9Jh0H/S4ZE/1KFTP9biVX/YIxd/2STav9qoX3/ + dKuM/3+zmP+GuqL/h8Sp/4fIsP+Iyrf/h8y8/4fPwP+G0cP/hdLG/4TTxv990Mf/dM/I/2fNyv9Sycb/ + QsXF/z7DxP86wb//OcG8/zvCuf9AxLr/Ssi7/1XLv/9Wyrz/UMWx/0fApv9Ewaf/PMGd/z/FmP89yIv/ + R8+J/1PVjP9T1oT/R9Ry/0HSZv9J0l//WtNf/2TSXP9jzFX/W8JP/1O5Sv9LtEb/Rrw+/1LIS/9l1V3/ + cdpl/33YbP+O1IL/nMuf/6PBrv+9xrv/vsO7/29xbP80MjL/WFZW/2pra/+LkI3/rrKw/+Hh4f/39/f/ + 8vLy/+Xl5f/U1NT/ycnJ/6ampv+Xl5f/zc3N3vX19QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJSUlVQEBA/2BgYP9wcHD/goKC/4qKiv+SkpL/ + zMzM/7y7vP99e33/dHN3/11cYv9ERUv/XmNi/663r/+tvKn/nLCY/4Kkif9pnGj/XqNU/1GfQf84gC3/ + HU0a/wwaDP8MEQv/DiwM/xZDFv8gVxn/JGgZ/yp4G/8tgR7/KYAf/zWBKv9AgzL/PoAx/z57Mv9BejX/ + Rns7/0p9QP9PgUf/WYpP/2SUWf9sn2P/catw/3q8gv+Fypb/i8+i/5HUq/+Z2rf/m9y+/5rdw/+Y3sb/ + l9/J/5bgy/+V4c3/k+DN/47fzv+H39H/fd/W/2rb0/9X183/UNXL/0zUyP9L0sj/SM7G/0HLwf89xrv/ + Q8a8/0zIvP9Py7f/Ucyx/1rKtf9YxbL/Sr6j/zi1iv8+uYf/ScCF/1LHgf9UzHb/SM9o/1LWaf9j2mn/ + ZtVg/2LOVP9hy1P/XchT/1fATv9EuTj/Rb07/0/KR/9d1lH/a9xb/33ab/+J0Yr/j8eX/6fEpP/B2L7/ + r7qs/1haVf87OTn/WFhY/21yb/+Kj4z/v7+///Dw8P/09PT/7Ozs/9ra2v/Gxsb/tra2/6Ghof+9vb3k + 7u7uEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAENDQ7VFRUX/ampq/3p6ev+Hh4f/k5OT/7CwsP/Kysr/iYmJ/3Jwb/9yb3D/UE9T/1BTVv+ao53/ + qbmm/5irjv+Nq4P/ZJ1o/1mWVf9VlET/OHYl/xRHCv8IHQX/DBMP/w4oFf8QRAz/GlYU/yBnFv8ldBn/ + L4Eh/zSCJP8veSH/M3Um/zlzK/84cSz/OnIw/0F4Nv9Mgz7/WI9J/2GaVP9tp1z/erFo/4K7c/+ExH7/ + ic+O/4/Vn/+P1qj/k9iv/5vZuv+d3MH/m9zF/5ndyP+Y3cr/lt3M/5Tdzv+S3c3/itvN/4Tb0f932dT/ + ZtfU/1PSzf9Hz8r/R9DN/0XPzP9Fzcn/Rs7H/0vPxv9LzsH/Scq8/0nIuv9ExbX/R8Ky/1TEt/9GvaL/ + Q72W/0vAlP8/uH//PrV0/z6zbP82uWD/Tcpq/2fYcf9u2Gj/adRa/2fSVv9k0FX/XstR/1PDQf9Guzn/ + Qbs6/0rIQv9W00v/ZtZZ/3fWcf+D1oP/l82V/6TOov+xy6//lZ+S/0BBPv88PDz/Zmpo/3N3dP+dnZ3/ + 0tLS/+/v7//v7+//39/f/8rKyv/ExMT/ra2t/7W1tfXk5ORi9vb2AQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUVPDw88lJSUv9ycnL/goKC/5KSkv+YmJj/ + wcHB/6mpqf9ramr/bGlj/15cWv9XWFn/f4WE/7G9s/+WqI//kKWA/36mb/9PoFD/V5lW/0JyO/8UMg3/ + CBcF/w0YCP8XKRD/GkgW/xFdC/8Zag//IngU/yV8Ff8mdhj/KG0b/zFqI/8zbif/NnMq/zp4L/9CgzX/ + TZA9/1mfSP9krFP/brdd/3K7YP93vGX/fbtt/328dv+JxI//jsih/5HKrf+WzbX/mM67/5nQwP+b08b/ + mdXK/5jVzf+W1s7/k9XN/5XW0f+V19X/jNbY/33T2/9gytD/TsXO/zy/yv83vsz/N7/K/znCyv85wsj/ + QMXI/0bGx/9Hx8H/TsnA/1bPxv8+xrL/Lb6l/yy7nv8vupf/K7aH/y2zfP85tn3/QLh5/ziybv8+tGf/ + TsFj/2fQZv9u2V7/bttY/2fXVP9g0lD/X8ZH/1XBRf9Duj//OLk3/z7EO/9Y10v/atxb/3HXZ/+K1Yn/ + kMuP/6TKof+0w7D/eHp3/zY2N/9ZXVz/am5t/4KBgf+qqqr/6Ojo//Hx8f/h4eH/1NTU/83Nzf+ysrL/ + r6+v/93d3fTy8vIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAElJSVE9PT3/YWFh/3d3d/+Hh4f/lZWV/6urq/+7u7v/f39//2VkZP9nZ2H/UlFP/3d3eP+qr67/ + nKuc/4ulhP+BonH/aJ5W/0mgQf9AfUD/HTke/wYIA/8LFgf/FDcN/xlKC/8eYhH/IHMT/xtxDv8cdBD/ + HnES/x5nE/8gYBf/LGIh/zh4LP9BiTP/SZA7/1OdRP9cp0z/Y61S/2OxUv9ks1P/Zq9V/2mrV/9tqF3/ + bqdn/32xg/+Iu53/j8Gu/5vJu/+czb//odLH/6DTyf+h1c3/otbR/6PZ1P+i2tb/o9rX/6Pb2v+a2t7/ + itfg/3DN2f9ZxdL/RL7P/zy90/86vtH/OsDO/zi+zP87v8z/PL3K/z68xP87usD/Nrm6/yO3qv8fvKf/ + ILmi/x60lP8bsIP/IK57/yqwd/8prm7/MbBs/zWvZP88sVn/Vr5g/2TJX/9oz1j/ZtNV/2PTUv9by0T/ + Ws1J/07DR/86tDb/Orgz/07PQ/9d3E//X9pU/3zYeP+H04T/mc2W/7TOsf+nr6X/YWJh/zs7O/9sbG7/ + c3Nz/4mJif/R0dH/8fHx/+bm5v/b29v/0NDQ/7e3t/+wsLD/1dXV//Dw8CAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/p0hISP9paWn/eXl5/4yMjP+SkpL/ + yMjI/6Kiov9kZGT/ZGNj/2FhYP9WVlb/nZ2e/6Sspv+NpYz/f6d3/2WeWv9SmkP/RJE0/xhFFf8GDQT/ + CQ4D/w4oBP8MRQX/DV4L/xduFP8nchX/IGsQ/xxlD/8cYxL/ImcW/ylwHf8wdyT/P4wx/0ubO/9QnkD/ + VqFG/1ujTP9fo0//XqFQ/1yfTv9gm1D/Z5tU/2+fXf9tomX/eq99/5DCo/+Ev6P/lcq3/6HSw/+k1cf/ + p9jN/6vb1P+v39n/suLd/7Tj4P+x4t//q+Df/6Pf4v+T3OT/f9jk/2LN1v9Ox9X/QcXX/zzD1P82v8// + NL7O/zW8zP83usv/OrnJ/zm3xf8xsb3/IKyv/yGwsP8erab/GqiW/xqlhv8fpH7/JqZ2/yemb/8mp2L/ + Lqxg/z2wY/9MsmX/U7Jf/127Xv9nx1z/bNFb/1PZRP9S10L/Vc9F/06/Pv9DszT/P7g0/0nRQv9X4U// + b9lg/3rZcv+M1Yf/otOj/7jOuP+HjYX/Qzs//1xUWf9tbm7/c3R0/6Wlpf/q6ur/7+/v/9vb2//Ozs7/ + wcHB/7i4uP/S0tL/8vLyHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGtrawRCQkLfS0tL/2xsbP97e3v/jo6O/6mpqf+2trb/g4OD/2JiYv9iYWH/VVJS/3Z5dv+irKT/ + nK6d/4WohP9tn2b/U5RJ/0WHNv8jVBX/CScG/wUOA/8LIgb/GEIK/xdYCP8VZxH/FmkS/xZiC/8ZZA3/ + H2gQ/yZwFv8veR//OYMq/0SMNf9HlDj/R5Y4/0iUOP9IkTn/TZI//1SWRf9bnE3/YaJS/2GcT/9onFT/ + bZ5a/22hY/9upm7/fLSL/3q3lv+ezr7/qNbK/6nYy/+x3dT/uOLb/77m4f/C6eT/wenm/73n5f+25OX/ + quPm/5zg6f+M3uz/adDc/1PJ2f9Dxdf/OsLS/zG+zv8vvc3/MLrL/zC4yf82ucv/O7jK/zezwv8lrbb/ + H6uy/xilpP8Yopn/HKCN/xqbf/8bmHH/H5hq/yCeYf8YmVX/G5dP/zenXP9LtWH/VLpe/169Wf9iwFH/ + WM1J/1nRSv9b00z/UcpD/0O9NP87tyz/Pb8w/0jLO/9l21j/cNto/3vRdf+Y1Jb/r9Gv/6Ctnv9qZ2b/ + TUhK/2pra/9paWn/jIyM/9LS0v/u7u7/4eHh/9LS0v/FxcX/uLi4/9HR0f/v7+8jAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dnAUNDQ/9QUFD/cXFx/4GBgf+Tk5P/ + vb29/52dnf9hYWH/YmJi/19fXv9dW1n/mZ+X/56xn/+Ep4X/bZ9r/1iVU/89hzf/LWwj/w4eBf8FFAP/ + BhwD/ww7Cf8YVg7/GGIK/xlmDP8XYw7/FGAN/xtoEP8lcRf/Lnsg/zeEJ/8+iy7/RpM1/0STNf9DkDT/ + RZA2/0iOOf9Njj3/UJE//1iXRf9emkn/X5hJ/2WZT/9qnVf/cqNi/3Smaf94qXX/eK2D/6LMu/+r2Mz/ + tN7O/8Pk0f/U6dr/3Ozi/+Du4//f8OT/1O7r/8Po6f+25uj/peLn/4na5P9s0+P/YNDf/1fO2/9DyNX/ + McDP/yu7y/8vucv/MLrK/zfA0f8zuMj/NLTH/ymuv/8bprH/FKKm/xOenf8Um5H/E5eE/xWUdv8WkWf/ + GZRa/xmVVP8VkVL/GJFT/ymaU/9Or13/Yrld/2G2Uf9Xt0j/VsBJ/1fMSf9R0EP/Rso3/z/BLf8/uyv/ + Q70v/1LXRv9j3lr/a9Vm/4fWhf+l1aL/s8yw/5KZjv9MSkn/YWFh/2FhYf9ycnL/sbGx/+jo6P/o6Oj/ + 19fX/8jIyP+6urr/z8/P/+vr6yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARUVF/1hYWP94eHj/ioqK/5mZmf+/v7//gICA/1BQUP9lZWX/X19e/3x7d/+ptqb/ + iqyJ/2qca/9RklH/SI5E/y12KP8TRQz/CgkD/wYZA/8HMwb/C08J/w5dCP8PXwX/FV8G/xljDP8cahX/ + I3EZ/yp6H/8wgSL/NIQk/zeIJP87iif/PIor/z+MMP9HkDf/TZM8/1KVPv9Skz3/VpM//1eSPv9ck0P/ + Y5hM/2mcVv9womD/dqdp/3uqd/9/sIj/lcWu/67Zzf+74dP/zunY/97u3//l7+b/6fLn/+n06v/f8+// + z+7w/8Hq7v+q5Oj/idrh/2zT4/9m0+T/X9Hf/0nL2P86xdT/OcLV/zu/0/84vc//Nr7O/zG4xv8xtMX/ + Ka++/yKotf8dpa3/GqGj/xecl/8VmIn/FZN7/xiRbv8bkWH/G5JZ/xiQVv8XjFD/IYtJ/0KaT/9bqlX/ + ZLFW/1+uUv9atE7/U8FH/07NQP9Kzjv/Rsg0/0S8Lv8/tin/O8sx/1ffT/9n4WD/edt0/5nclf+v2az/ + qLuk/2BmXv9UU1T/YGBg/2VlZf+RkZH/2dnZ/+/v7//Z2dn/ycnJ/76+vv/Nzc3/5+fnNwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0f/ZGRk/4CAgP+VlZX/ + oqKi/6ysrP9oaGj/UFBQ/2dnZ/9lZWT/mJuU/56zmv9xoG7/WppY/0KMP/86gTX/HVkY/wQeAv8JDwP/ + DCsG/w1LCP8KWwj/Cl0F/wxeBv8YZQj/H2wO/x9xF/8kdxr/Kn4f/y+BIf8xhCD/M4Me/zKEIP83hif/ + QYov/0qROP9RlT7/VJY//1OTO/9UkTv/VY86/1qRQP9jl0v/aZxV/2+gYP93p2z/fa17/4K0jv+Mwab/ + sNvQ/8Ll2P/W7N//4vDj/+jx6f/r8+r/7PXt/+X28P/b8/L/ze/x/7fp7f+V3+j/c9bl/2nT5v9j0+P/ + U9Df/1DQ5f9QzOX/R8TY/0PC1P84vsz/MrrH/zC1xP8psL7/J626/yOps/8fpKn/G5+c/xeaj/8VlID/ + FY9x/xWNY/8UiVb/GYxS/yqUVv84lVH/SJVR/1OZTv9dpFL/Zqxc/1ytU/9QskX/Sb4//0rHPv9JyDr/ + Rb0y/zu1KP8rvSD/StlA/2XsXf9v4mf/jeKG/5vWlf+pyqX/h5SF/1JRU/9iYWL/Y2Nj/3R0dP+/v7// + 7u7u/93d3f/Kysr/w8PD/8vLy//i4uJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEtLS/9vb2//h4eH/5ycnP+oqKj/kpKS/1paWv9ZWVn/ZmZm/3R0c/+ep5v/ + h6WD/2CXXP9RnE3/Poo4/yZnIf8PNwr/BA4B/wQhAf8KPAP/DlcF/wthB/8LYgz/EWcP/x90EP8hdg// + HHIQ/yJ4Ff8ofhr/LIIf/zGFIf8zhSH/NYci/zyJKf9FizD/So40/0yONv9NjTT/UI41/1iSPf9ck0D/ + X5VE/2aZT/9snVj/caFj/3upcv+Ar4H/greS/4/Dqv+03dP/yefd/9ru4f/m8eX/5/Hp/+rz6f/u9u// + 6vfy/+L19P/X8vP/x+/x/6jn8f9+2un/atPl/2LR4v9Uztz/VNHi/1nP5f9Pxtf/TsXX/z/Bzf84vsv/ + M7nH/ymzv/8nr73/JKy3/x+nq/8Zop7/FJ6S/xWahv8UlHf/EY1m/xuPXv8plFr/OZdZ/06cXP9eoVz/ + W51T/1eaTv9coFL/VZ9L/02iQ/9LrEH/TLhA/0vBQP9Iwzz/P78y/y64If9AzDP/XeVQ/2zoYv+D5Hv/ + idKE/6DPnP+kuKH/ZWNl/2BfYP9lZWX/Y2Nj/6Ojo//m5ub/4uLi/87Ozv/FxcX/ycnJ/97e3k0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExM/3h4eP+NjY3/ + nZ2c/66ur/97e3z/U1NT/2FhYf9hYGH/iIiI/5ypmP92mXP/U5FP/0WVP/83hTD/EEYL/wUXAv8JEgX/ + BDwB/wlQAv8PYQP/D2YM/xNpGv8acR//H3wU/x99Df8geg//JX0V/yqAGv8uhB//MIUh/zSIJP83iSb/ + Pokq/0eLMP9JizH/S4sw/0yLMf9QjTT/WJA7/2GVQ/9kmEr/aZpR/22eW/90pWn/fqt4/4Gyhf+At5P/ + mMm1/7zh2f/P6t//3e7i/+fx5f/q8+v/7vXu//D37//t9/T/6/j1/+P28//T8/P/t+72/5Di8/9w2Oz/ + ZNTp/1XP3v9Uz97/WM7e/17N4P9dzuP/S8jX/zvBzv82vsv/MLnG/yu0wv8osLz/Jq20/yOrrP8ep57/ + GqGO/xibff8Tk23/HZNi/zicYv9YpGr/YKNj/2WlXv9ho1r/W55U/0+WSP9Plkb/UZhH/1CeRv9MpkP/ + RrI+/0DBOv89xjb/PLsu/za5Jf9N1T3/bu5f/33mcf+E137/mtSX/6/Lrv+Ef4T/V1dY/2RkZP9YWVj/ + jIuL/9vb2//o6Oj/1tXW/8bGxv/Hx8f/2traVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/enp6/46NkP+foJ//rK2r/2praf9QUlL/YmNk/2RmZf+VmZP/ + jaKL/2mVYv9KkUH/OYsy/yhtIv8FKAL/CBgF/xIuDP8FUQH/Cl4C/xBpBf8UbhH/GXIe/xp4Hv8WfA// + Gn4L/ySCFP8mgxb/K4Mb/y+FIP8xhyL/NIgl/zeIJf87hyX/QYgo/0eKLP9LjC//UI4y/1SRN/9akz3/ + YZdF/2WaS/9pnVP/bqBf/3Snbf99rnv/gLWJ/4O8mf+GwaX/s9zR/9Hq4f/g8OT/6vLm/+zz7f/v9u// + 8vjw//H49P/x+fX/6vfw/+L49v/B8ff/muf1/3DY6/9i1uv/WNTj/1TQ2/9b0Nv/aNPl/2bU6f9Qy9z/ + O8TP/zXAzP8yvMj/L7fE/yy0v/8qsbn/KK+y/yGspf8dpZD/GJ57/xaYcf8glmb/SKJq/2uwcv9srGX/ + ZaRc/2GiWf9hpVv/T5hK/0+XR/9SmEr/UJlJ/0eaQf89oDn/Na00/zi4M/9IxTT/MLMe/znAKv9n6lv/ + dudt/4Tge/+X2JL/rdKs/5eflv9YWlb/YV1g/1ZTVv92d3f/ysvK/+3u7f/Y2dj/x8fH/8jIyP/b29tU + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1dXf96enr/ + iYiQ/6aoqP+doZf/WVtV/1BUVf9eY2b/doF5/5OnkP9ylnH/U5NJ/z+UL/8xgSr/EEIT/wMbAf8EOQT/ + BEwB/wVdAf8KZAX/Em4N/xh4Ef8YfxH/Fn8P/xN+C/8Xfg//H4AV/yKBGP8ohBz/LoYg/zKJJP81iiX/ + OIok/zuKI/8/iiT/RIsn/0qOK/9QkC//U5M1/1eXPP9emkT/Zp1N/2qgV/9vpGP/dKpy/32xgf+BuI7/ + hsCd/4fDpv+03dL/1+3j/+Pw5f/r8+j/7vXu//D38f/z+PL/9Pn1//X69P/z+vP/6vr3/831+/+K3eP/ + adbl/1nV5v9W1eP/Wdbg/2bY5f9t2er/Y9Tk/1HP3P8/ydT/NsTO/zbAyv81u8b/NLfD/zG0vf8or7L/ + Gqih/xiijP8YnXv/GJlw/yqcav9Yq3T/dLN0/3GuaP9oq2P/Y6df/16jV/9VnU//TplI/0mYRP9Fl0H/ + Qpc+/z+XPP89lTv/PJs1/0jFKf87vyf/KbIf/0rURP907mr/feZx/5Lbiv+m3KD/m7+W/2hxY/9hVV3/ + XVNd/2BjY/+stK7/7PHt/9fY1//Jycn/zc3N/97e3k8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/3t7e/+Pjpb/qKqq/5CTi/9VVlH/VVZY/19kZv95iHr/ + i6OI/2uWaf9OkUb/NYsp/yR0Hv8FOwj/AisD/wQ/Bf8LVwX/CWQG/w5qC/8UdBH/GHsT/xl/E/8WfxD/ + E38M/xd/Dv8ggRX/I4IX/yeDGv8shh7/MYgh/zKIIf80hx//O4ki/0GKJf9HjCj/TI8s/1KRMf9VlDf/ + WJc+/1+aRv9lnk//aaFY/26lZv90q3X/fbKD/4K5kf+Dv5z/i8at/6rYy//P6eD/5fHn/+zz6f/v9e// + 8ffy//T58//2+vX/+Pr0//n89f/u+/f/1fj7/5rk6/9q1+P/WNbo/1HU4P9Z1uD/Z9nl/23a6f9h1eX/ + Tc7b/zzJ0/83xc//N8HL/ze9yP84ucb/NLbB/yyxtv8fq6b/G6aR/x2hff8hn3f/O6R2/2Swe/91s3L/ + dLBq/2mrZf9lqGH/YaRa/1efUv9Qm0r/SZhE/0SXQP9Aljz/PJQ5/ziTN/8zki7/NaQh/0nAOf83uS3/ + Nbsp/336bP966Wz/j+CI/6Tfov+ozKP/eYRz/2FWXv9bUlz/WFtb/56noP/j5+T/19fX/8rKyv/Ozs7/ + 3t7eTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiYmL/ + fn19/5WYm/+prKv/f4F5/05OSv9ZWlz/YGhm/3ySfv9+nnr/YJJb/0WNPf8ogSD/EWMN/wI4Av8EQQr/ + CE0J/xJnEP8QcA7/E3UQ/xh7Ff8Zfxb/GYIV/xaBEf8Ufw3/GIAP/yCBFv8ighb/JoQY/yqFGf8vhxz/ + NIkf/zeJIP87iiL/QIsm/0WNKv9LkDD/UZM1/1aVPP9amUP/YJxM/2WgVP9po1//badq/3Wtef9+s4f/ + hLmQ/4bAn/+GxrT/k9DG/7nh2P/i8ub/6/Xn/+317f/v+PP/8Pn0//L69f/3+/b/+vr4//n8+//q/Pz/ + zPf5/4Di5/9Z2OX/WtTd/2jZ5/9j2eb/Vtbj/07V5P9F0eH/OcnY/zjF1P83wc7/N77I/za6xv8zt8D/ + KbK2/yCtq/8cqJ3/HqOI/zGjd/9br33/dbZ//3Wzdf9zsG3/b61l/2ipYP9fpVv/V6FT/1CdS/9JmUT/ + Q5Y+/z6UOv84kTX/M44x/y6LLP8tjCT/OqYy/zy0MP82uST/c/Fb/33yav+M6Ij/neKf/7Tcr/+Nmoj/ + YVhe/1tTW/9PUlH/jJSO/9nc2v/Z2Nj/zMzM/9HR0f/g4OBHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZv+AgID/mp6i/6epqf9ub2r/SklF/2BgYf9kbWj/ + fpp+/3Cbav9Wj0v/OoYy/yB5HP8DVAL/A0AD/w1SDP8MXg7/FXUX/xV7FP8WfhX/GYAX/xqCF/8Zgxb/ + F4IT/xaBD/8ZgRL/IIMW/yODF/8mhRj/KoYZ/y+HG/80iR7/OIoh/z2MJP9Bjij/Ro8s/0ySMv9SlDf/ + V5c+/1uaRf9hnU3/ZqFX/2qkYf9uqWz/dq57/3+0if+EupL/h8Cg/4XGs/+PzsX/r93V/+Hy6v/p9Or/ + 7Pbu//D48//x+fX/8vr2//f79//7+/r/+fv8/+r6/P/H8/H/jeTl/27e6P9r2eD/feHw/3Pg7/9Z1uH/ + RtHc/z7O2/85ydj/OcbV/zjD0P83vsr/N7zG/zS5wf8rtLn/JK+v/yKso/8sqpH/SK6G/2m1gv93tnv/ + drN0/3Owbf9urWb/Z6lg/1+mW/9YolT/Up9N/0qaRv9Elz//PZM5/zePM/8xjC7/L4ou/zSHNP8igB// + MKAn/0LBLf9f3ET/gfpu/4jshv+V4Zr/uOS0/5ytmf9hXl//WVRZ/0hLSf98g33/09bU/93c3f/Ozs7/ + 0tLS/+Hh4UYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + a2tr/4ODg/+doqb/n6Ki/2NhXv9KRUT/ZmVl/2h1af98nnn/YZdY/0eNOf8vgSf/GnMZ/wJNAv8FUgL/ + EWML/xBwE/8RfRf/FIIW/xWCF/8YhBj/GYQY/xmEFv8YgxT/GYMV/xyDFf8ggxf/I4QY/yaFGP8qhhr/ + Logb/zOJHv84iyH/PY0l/0KOKf9GkC3/TJMz/1OVOP9YmD//XJtG/2KeT/9nolj/aqVi/2+pbv93r3z/ + gLWK/4W6lP+HwKD/hcWx/4vNwf+j2dD/1vDr/+b17f/p9u//7/jz//L59f/z+vb/9vv3//v7+f/6+/v/ + 7fz8/8719P+p7vD/kOnw/4rk6v+T6vX/iej2/23d6v9Q1N//QtHe/zrL2v85x9b/OMTQ/zjAy/83vcf/ + NLrB/y62uv8nsrP/J66j/zStkf9MroD/aLJ5/3i1eP93s3P/cbBs/2ytZf9lqV//X6Za/1mkVf9SoE7/ + S5xH/0WYQf8+kzr/OJA1/zKNL/8wjDD/Noc6/yB2H/8fhxn/Nasl/1TMPv9/9m3/hOqB/5HilP+05rH/ + pr2j/2loZ/9YVVn/QUZE/210cP/Q0dD/5OHi/9DR0f/U1NT/4uLiQQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvb2//hoaG/5yipf+UmZn/X11a/01GR/9samn/ + a3xs/3Wfcv9VlEv/O4sr/yiAIv8TbhX/AlUC/w5kBf8Tbwz/DnsU/wmBFP8RhRX/EYQV/xSEFf8VhBX/ + F4UX/xmFF/8chhf/HoYY/yGFGf8khhr/KIcb/yuIHP8wih7/NIsg/zmMIv89jiX/Q5Aq/0iSL/9OlDX/ + VZc6/1qaQf9enEn/Y6BR/2mjW/9spmX/cKtw/3iwf/+Bto3/hbuW/4jAov+FxK//icu+/5fVzP+85+P/ + 3PXu/+f27//v+PP/8/r2//L79//1/Pf/+vz5//n7+f/y/f3/1vf1/8L09v+y8/f/p+/y/6Pv9v+V6fP/ + fuHs/13X4v9E0tz/OczY/zrJ1v85x9L/OcLM/zi/x/81vMP/MLi9/yu1tv8vsqj/PbGU/1azhf9wtn3/ + erV3/3izcv9xsGz/a61m/2WqYP9fp1r/WaRU/1KgTv9MnUj/R5tD/0CWPP86kjf/NZAz/zCNMP8wiTP/ + Koct/xl8Gf8chhX/Tbo8/3XjZf+G64L/kuST/67lrP+sx6n/dHZy/1dWWP8+REH/Y2pm/8rJyv/l4uT/ + 0tPT/9bW1v/k5OQ9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAHNzc/+IiIj/mKCj/4qQkP9fW1r/UUlK/3Fvbf9wgnH/bp5q/0yRQv8xiB//J4Mi/wlmDv8KYwr/ + GXMN/xh7Df8LgA//BIEP/w2DEf8OgxH/D4QR/xCEEv8WhRb/GYcX/x2JG/8fiBr/IYYZ/ySHGv8niBv/ + K4od/y+LHv80jCD/OI4i/z6QJ/9Dkiv/SJQw/06WNv9UmDv/WZpC/1ydSf9joVL/aKVc/2yoZv9xrHL/ + eLGA/4C3jf+Eu5f/icKm/4nGsf+Jy77/mNfW/5/c2f++6OX/5fjy//H59f/1+vf/8/z4//T99v/5/Pb/ + +/36//P9/P/i+/r/0/n4/8L18/+u8Ov/qPDx/6Lt8/+N5e//bd3n/0vW3/890dz/PMzZ/zrI0/84xM3/ + N8HI/zS+xP8wu77/Kri4/zG2qv9CtZr/WraJ/2+1e/94tHP/eLNw/3Kybf9rr2f/ZKtg/1+nWv9YpFX/ + UqJP/02fSf9HnET/Qpo//z2YO/84lTf/M5Iy/y+RK/8tji//HH0g/xd3Fv8zkij/Zs1Z/5T0jv+W6JX/ + q+Sp/7HQr/+BhH//V1dZ/ztCP/9ZX1v/w8DD/+Xi5P/V1dX/19fX/+Tk5D0AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0/4eHh/+boaX/hoyM/1pZWP9QSkv/ + b25r/3KFbv9pnGL/Qo84/y+GHf8jgR//BmUM/w9vEf8YeRL/FYAP/wmBDP8HgxD/DYMR/w2EEf8PhRL/ + EYQT/xWGF/8aiBn/HYoc/x+JG/8ghxn/I4gb/yaJHP8qix3/Lowe/zONIP84jyP/PZEn/0OSK/9IlDD/ + Tpc2/1SZO/9Zm0L/XZ5L/2OhU/9ppV3/bKho/3Gsc/94sYH/gLeO/4K7mP+IwaX/g8Op/47PxP+Y2t// + l9zh/6jh3f/d9fD/8fn0//X69//y/Pj/8/32//j99v/7/vn/9v77/+f7+P/c+fj/zPb2/7Xy7f+r8O// + qu/0/53p8/964On/T9fc/z3S2f89z9r/O8vT/zjHzv83w8n/NcDE/zC8v/8rubj/Lret/z+2nf9WtYv/ + bLR7/3ezcv93s3D/crFs/2qvZf9jq1//XadZ/1ilVP9Sok7/TJ9J/0edRP9Cm0D/P5o8/zmXOP8zljP/ + MZgp/yiOKf8ghSf/HHwh/x93Hv9StEv/nviY/5vrlv+r56j/tNWy/4aOhv9YWVr/PkNA/1dbWP+6uLv/ + 4N7h/9PT0//Z2dn36OjoMAAAAAD4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABzc3PMhISE/6iqrv+Gjo3/SFFO/0VISP9lZ2L/coNq/2KbWv80iiz/L4Qm/xhyE/8HbAn/ + BnUN/wd9Ef8HgBL/DIcW/xGLGf8Rhhj/EocY/xOIGf8UiBn/Foga/xiIGv8aiRr/HIob/x+LHP8ijB3/ + Jo0e/ymOH/8ujyD/MpAi/zeSJf89lCn/QpUt/0eXMv9NmTj/VJw9/1meRP9doE3/Y6RV/2ioX/9sq2n/ + ca91/3izgv+AuZD/gLyY/4PBov+Ixqv/ltTM/43Y3P+W4Ov/pePj/9bz7v/x+fP/9fr4//L8+P/y/ff/ + 9/32//z++P/5/vv/6/z4/+L6+v/T+Pv/ufXz/6vx8P+s7/P/qOv2/4jl7/9W297/QNTa/0DR3P89ztb/ + O8rQ/zrFy/82wsX/ML/A/yu8uv8subH/Obej/1G2j/9ntXz/c7Ry/3Wzb/9ws2z/aLBk/2GsXv9cqVr/ + VaZS/0+kTP9JoUb/RZ9C/0CdPv88mzr/Npg1/y+VL/8slSv/MZsz/ySOKf8bgSL/IH4l/yuHLf+P4Yz/ + qvOi/7HoqP+02bT/hJKI/1laWv9IREL/XFpX/7W2t//a293/zMzL/93d3Zj29vYF+Pj4Afj4+An4+PgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp6emaKior/qKis/4eNjP9IUU// + RUhI/2ZoY/9vg2n/YZpZ/zSLLf8mfR//FXEQ/wlwCv8KehH/C4QW/wuEFf8NiBb/EYsZ/xGIGP8SiBn/ + FIkZ/xWJGf8XiRr/GYka/xuKG/8dixz/IIwd/yONHf8mjh7/Ko8g/y6QIf8zkSL/N5Ml/z2UKf9Dli7/ + SJgy/06aOP9UnT7/WZ9E/1yhTf9jpVX/aKhf/2ysaf9xr3X/eLSC/4C5kP+AvJj/h8Om/4jGq/+U08v/ + jNjd/5De6P+c4OD/xu3l//H59f/3+vf/8/z4//P99//3/ff//P74//r++//u/ff/5vr6/9j5/f+99/f/ + q/Lx/6ru8f+o7PX/jujy/2Hf4/9F193/QNLe/z7P2P89y9H/OsfL/zbExf8xwb//Lb25/yq6s/80t6b/ + TLaR/2K0ff9ws3L/dLNu/2+yav9osGP/Yaxd/1ypWP9WplL/UKRL/0qhRv9Fn0L/QZ0//z2cO/83mTb/ + MZcy/zCYMf8slzD/J5Is/yePL/8fgCX/DGoN/12zW/+2/rH/s+uq/7nduf+OnJL/V1hX/z87OP9YV1T/ + wMLD/+Li5f/Nzc3/4eHhkuvr6wL4+PgB+Pj4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAhISEDY2NjvKnpan/iIyM/0pST/9GSEj/Zmhj/2yAZv9cmFb/M40v/xt3F/8QcQ7/ + C3UQ/w5/Fv8PiRr/DooZ/xCKGf8SjBr/EYoY/xKKGP8Tixn/FIsZ/xaLGf8YjBr/Gowb/xyNG/8fjhz/ + Io8d/yaPHf8pkR//LZIg/zKTIv83lSX/PZYp/0OYLP9HmTH/TZw3/1SePf9ZoEP/XKNL/2KmVP9mqF7/ + aqto/26vc/90s4D/fLiM/368lv+EwaP/hMOq/4bKvP+P19X/kN7e/5Lf2f+v6ef/4/f1//f58//4+/f/ + +f36//n9+v/5/fr/+f76//n++v/y/vn/5f35/9H69v+28/D/oe/u/5Tt8/+A6PH/Zd7i/0rW3P8/097/ + O9LY/zfNzv8zyMX/NMXB/zXCvf83wbr/Mb21/zW7rf9EuJf/U7N9/2Syb/9tsWb/bbBi/2euXf9hq1f/ + X6lU/1amTf9Nokb/R6FD/0OgQv8/nkD/Opw7/zabOf8ymTT/M5s0/yyWL/8mkiz/KZMv/ySIKv8GZQj/ + KYUp/6Txn/++9bb/ut+7/5Cflv9SUlL/Ojc1/1tbVv/Iycv/5OXn/9DQ0P/l5eWM7u7uAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjYyNmaShpP+Oj5D/ + T1VS/0RGRv9jZWH/aX5k/1iVU/8viy3/EXIQ/w5zD/8OfBT/EYYa/xGMHv8Rjxz/E44a/xOOGv8SjBr/ + E4wa/xSMG/8WjRv/F40b/xmOHP8bjhz/Ho8d/yCPHv8jkB7/JpEf/yqSIP8vkyH/M5Uj/ziWJ/89mCv/ + Q5ku/0ibM/9NnTj/VJ89/1mhRP9cpEz/YqdU/2apXf9pq2f/ba9y/3Szf/97uIv/fbyU/4LBof+Ew6r/ + hsq6/5DX0/+T393/k+Da/6vo5//b9PP/9vjz//f69//5/Pr/+fz6//j9+v/4/vr/+f75//X++P/p/ff/ + 2fr3/7308v+k8PD/jOvu/3Xk5/9k3t//VNje/0nV3v9E0tj/P87P/zrKx/86x8L/PcO//z7Bu/83vrf/ + Ob6w/0e6m/9UtYH/Xa9p/2auX/9nrFn/YKlS/1qnTf9Xpkr/UqNG/0uhQv9HoUH/RKBB/0CfQP88nj3/ + N5w5/zOaNf8znDT/Lpox/yWRKv8ikCr/K5Ix/xN7GP8Lbgz/cMRr/8f8vv+84b3/jZuR/0tLS/86NzX/ + ZmVh/8vMzv/g4OL/1dXV9evr62T19fUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACKiYozop2g/5mXmP9ZXVv/QUJD/1xgW/9mfGH/UpBO/yaFJP8KcQz/ + DnoT/xGEHP8Qix3/EI8d/xOQHf8UkRz/E5EZ/xKPG/8Tjxv/FJAc/xaQHP8XkBz/GZEd/xuRHf8dkh7/ + IJMe/yOTH/8mlCD/KpUh/y6XIv8ymCT/N5kn/z2aK/9DnC//R50z/02eOf9ToD7/WKNE/1ymS/9hqFL/ + Zqpb/2msZv9sr3H/c7J9/3q3if98vJP/gMCd/4TDqf+EyLX/jdTO/5Te3f+W4N3/qefm/9Ty8v/w+PT/ + 9Pr3//f7+f/5/Pn/+v35//n++f/5/vr/9/35//D9+f/g+vn/xvb2/6nx8/+N6+z/dOTl/2bg3/9g3OH/ + WNfe/0/T1/9K0NL/RszM/0XJx/9IxsX/SsTA/0HDu/9AwbL/Tb6e/1m4g/9WrWH/YaxY/2SrUv9dqUv/ + VqVE/1KlQv9Ooj//SaA9/0agPv9DoD7/QKA+/z2fPf83nTn/Mpo0/zGaMv8vmzL/KJcu/yWWLf8tmTb/ + Howl/wpzDf85jzX/uO6w/8Xqxf+MmZH/QUJC/zUyMP9wbmv/0NDS/9zd3//b29vi8/PzB/f39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACknaLM + pKGh/2VnZf8/Pz//VVlU/2J6X/9MjEv/G30c/wp2D/8Sghn/FIwf/w2MHP8MjRr/EZEc/xWTHP8Vkhv/ + EpIc/xOSHP8Ukh3/FZMd/xeTHv8Zkx7/G5Qf/x2UH/8glSD/IpYg/yaXIf8pmCL/LZgk/zKaJf82myj/ + PZws/0KcMP9HnzT/TaA5/1OhPv9Xo0P/XKVK/2GpUv9lq1r/aK1k/2yvb/9zsnv/ereH/3y8kv9+wZv/ + hcSn/4XHs/+H0MX/ld3d/5jg3v+p5+j/0/T0/+j39v/v+fj/9Pv4//f9+P/5/fj/+v75//j++v/5/fn/ + 9/z6/+f7+//O9/n/sPHy/5Ps7f9+5+n/b+Lk/2ne4f9i2dv/V9TU/1DR0f9Oz9D/T83M/1PKx/9XyML/ + T8W6/03EsP9XwZ7/X7qD/1KrWP9bqk//YKpL/12oR/9WpkH/UqU+/06iPP9IoDr/RJ85/z+eOP8/nzr/ + PJ85/zedNv8ymjP/L5cw/y2bMf8tnzX/LqE3/y2bN/8ajSL/FYMa/x97Hf+Tyov/yu/K/4qYjv87PDz/ + Mi4s/318eP/Y2dr/29vd/97e3aj4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyhp2atqav/bnBv/z0+PP9OU03/YHpf/0iLSP8SdBX/ + C3oT/xaLH/8XkiT/C4sb/wWIFf8PkBr/FpQc/xWTGv8Tkhv/FJIb/xWSHP8Wkxz/GJMd/xqUHf8clB7/ + HpUe/yCVH/8kliD/J5ch/yuYIv8umSL/Mpok/zebJ/88nSr/Qp4u/0efMv9LoDj/UqI9/1ajQv9bpUn/ + YKhP/2SsWP9orWL/a69t/3GyeP94toT/e72P/37Bmv+HxKf/isez/4XMv/+U2tj/oOPk/6fl5v/D7e// + 3PT0/+r5+P/z/Pn/+P35//v99//6/fj/+f36//v9+//5+/r/6vr6/9D2+P+08fL/m+3u/4jp6v955OT/ + c+Dh/3Dd3v9j2Nj/WtbV/1jT0v9b0M7/Ys/J/2XLwP9kyrn/X8Wq/2jCm/9it3f/VKlS/2GrTv9gqUf/ + WqZA/1OkOv9MojT/R580/0WfNf9BnjT/P581/z2fNv83nTP/Mpwx/y+aL/8uly3/MaAz/zCiNv8qnjP/ + K5w1/xyTJf8flCX/GngY/2+jZv/I7Mj/fIqB/zU3Nv84NTP/kZCM/+Di4//W1tj/3NzcbQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + rqKnDbKtr/J3eXj/PDk8/01PTf9bdFv/Q4dF/wtxD/8Mghf/FpAj/xaTJP8LjRv/B4oW/w2RGf8VlB3/ + FJMc/xSUHP8UlBz/FpQd/xeUHf8YlR7/GpUe/xyWH/8elh//IZcg/ySYIf8nmCH/Kpkj/y6aI/8ymyX/ + Npwn/zydKv9Cny//RqAz/0qhOP9Rozz/VqRB/1qmRf9gqE3/Y6tW/2euYP9qsWr/cLN2/3e2gf95u4z/ + fcCX/4jEpP+Lx7H/h8u8/5LX0/+k4ub/qubp/7Tp6P/O8fD/5Pn3/+769v/3/Pb/+v32//r9+P/4/Pr/ + +fz6//n7+//r+/v/0vb3/7Tw7v+d6+n/kOnp/4jn6P+J5uj/guLj/3Hb2v9n19X/Z9XR/3PV0f9zz8L/ + fc++/3nMr/9rxJf/e8SV/2W0a/9aq07/X6pI/1yoQv9Vpjz/UKQ2/0uiMf9GoDD/Q58x/0CfM/9AnzT/ + PJ40/zWcL/8wmi3/LZkr/y+bLv81pDb/L6I1/yOZLf8tnzj/JJsv/ySaLv8ZfRv/UZBL/7Xctf9wfHL/ + MS8w/0Q/P/+qqab/4+Tk/9XV1tjk5OQ6+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsrKxmY6Lj/9DN0P/U0tT/01gTf85gjz/ + Cn8R/w2RHP8Pkx3/D5Md/xCUHv8RlR//EZUf/xKVIP8Tlh//E5ge/xSYHv8VmB7/Fpgf/xeZH/8ZmSD/ + G5kg/x2aIf8gmiL/I5si/yacI/8pnST/LZ4l/zGfJv81oCj/OqAq/0GiLv9GozP/SaI3/0+jO/9UpUD/ + WKdF/16pTP9hqlP/ZK1d/2mxZ/9utHP/dbd+/3e7iP97v5X/hcKh/4vGr/+Jy7v/hdDF/5re3f+r5ur/ + quTh/7rq5f/a9vT/7/v2//T78f/5/PT/+v34//f8+v/4/Pv/9vz7/+r6+v/U9vf/u/Hw/6ft7P+Z6en/ + j+Xk/5Lk4/+W5OX/i+Dh/3va1v921M3/etDB/2zBn/+FyKf/ecWT/2O8df9qum//X69W/12sSv9cq0T/ + V6o+/0+oOf9KpjP/SKUv/0KiLf8+oS7/PaEx/z6hMv89oTX/N58x/zOdL/8wnC3/MKEy/zGhNP8xojf/ + MKI6/zSkQf8kmTP/I5g1/xWJI/8vkDX/hreG/25xaP8xIyv/UkhO/8jHxf/c3tv/2NnYafT09AH4+PgG + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAC0tbMzramu/1NHU/9FPkX/SV5J/yx4Mf8Uihz/D5Qc/w+VHP8PlBz/EJUd/xGVHv8RlR7/ + E5Yf/xSXH/8TmB7/FJge/xWYH/8WmB//GJkf/xqZIP8cmiH/Hpoh/yCbIv8jmyL/JZwj/ymdJP8sniX/ + MJ8m/zSgKP85oSz/PaEu/0KiMf9HpDb/TaU6/1KmP/9Wp0X/XKlL/2CrUv9jrVv/Z7Bl/22zcP91t3z/ + druG/3q/kf+Ewp7/icWs/4bItv+BzL7/jtfP/6Lh4f+l4+H/r+fi/87x7//q+vX/9vv0//n89P/5/Pf/ + 9vz6//X8+//y+/r/5/r6/9P29//A8fL/sO3v/6Pp6v+a5eX/nOTh/53j4P+V4N3/i9vV/4bVyP9nwZr/ + X7Z+/2S1c/9htGb/YLNd/1uuU/9hrk//YKxI/1urQ/9Wqj7/Tag5/0mmM/9IpjD/QaMu/z2iLf85nyz/ + OJ8t/zqgMf84oDH/Mp4v/zCdLP8xoTP/MqI1/zKkOP8zpDz/N6VD/yecNv8nmjf/HZAr/ymNMP9bkFz/ + UVdM/ygbIf9qYmb/3t3b/9bY1f/c3dte+fj5Afj4+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+ur7SbWNu/zczN/9EX0f/ + IHMn/xOPHP8QlR3/D5Yd/xCWHf8Qlx7/EZce/xOXH/8TmCD/E5gg/xKZH/8TmR//FJkf/xWZIP8XmiD/ + GJoh/xqaIf8cmyL/Hpsj/yGcI/8knST/Jp4l/yqeJv8unyf/MqAp/zehK/87oi7/QKQx/0WlNf9Lpjj/ + T6g+/1OpRP9Yq0r/XaxR/2GuWf9osWP/brNr/3W3df92uoD/d7yL/37Alv+ExaT/hciw/4fLuv+L0cb/ + ktbQ/5Ta2v+j4eT/wevu/+L29f/0+/b/+Pz0//j89//0+/j/1/Lt/9Ly8//Q8fL/yPD1/8Xu9v+46/H/ + r+fq/6nm5v+g49//nOHa/5rf1P+W2cb/ic+u/2q8g/9puHf/Z7Zu/2i0Zf9ns1z/Y7BV/1+vTv9brUf/ + V6tC/1KqPf9NqDj/SaY0/0WlMP9Aoy7/PaEs/zmgLf83oC3/N6Au/zegMP80oDD/MaAx/zOjN/8zozj/ + NKU7/zSmPf85p0b/LKA8/yuePP8mmTT/JIwr/zlyPP84QzX/KiEm/46Gi//u7u3/2drXpgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALq4vXmRiZP/NDQ2/zpaPv8ccyP/CowU/w+XHf8QmB7/EZkf/xGZH/8SmR// + E5kg/xSaIP8UmiD/E5sh/xSbIf8VmyH/Fpsi/xebIv8ZnCL/G5wj/xydI/8fnST/IZ4l/ySeJf8nnyb/ + KqAn/y6hKP8yoir/NqIs/zqkLv8+pDH/RKY1/0qoOP9Nqj3/UatE/1atSv9br1D/YLFY/2WzYf9rtWn/ + c7hz/3S6ff91vYj/fL+T/4HEn/+Ex6v/h8q2/4vPw/+R1M//k9jZ/5vd3v+15uX/zuzo//D59f/2+/b/ + 9vz4//H69//I7OH/tebf/6rg2P+s4d7/verv/6Te2/+Y29H/nN/V/5bbzf+D0bf/dMmj/3PEmP9vwIr/ + cbyA/3G6d/9vt3D/arRj/2eyWv9isFP/Xa9N/1qtR/9Wq0L/Uak8/0yoOP9IpzT/RKYx/z+kLv88oy3/ + OaIu/zehLv82ojD/NqMy/zajNP80ozT/N6U7/zenPf84qT//OKhD/z6rS/8ypEH/M6NC/yuhOf8kkiz/ + L200/yg3Jv9BOz3/tbC0/+7v7uLa3dsPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6ILm2vv5CSEb/ + Jkwr/xp5I/8GkBL/D5ke/xGaIP8QmR//EZsg/xKbIP8TmyD/FJwh/xScIv8TniL/E54i/xSeIv8WniP/ + F54j/xifI/8anyT/HJ8k/x6gJf8goCX/I6Em/yaiJ/8poij/LKMo/zCkKv81pS3/OaYv/z2mMf9CqDX/ + SKk4/0yqPf9QrET/Va5J/1mwUP9dslf/Y7Rf/2i2af9vuXH/cbt6/3O+hf95wI//f8Sb/4LGpv+FyrH/ + is6//5DTyv+T19P/mNrX/6zh3f++5t3/5PXy//D69f/y+vb/8fr2/9Dw6f+56ef/sOTg/6Te2P+f3NP/ + mdnO/5PYyP+K1L3/htCz/4XNrP+ByaP/esSU/3a/iP94voD/cLhx/2+3bP9qtWH/ZrNZ/2CxU/9cr03/ + Wa9H/1WtQf9Qqzz/Sqs3/0epNP9DqDH/PqQu/zqjLf83pC//OKQx/zelMv82pzT/NqY3/zWmOP86pz7/ + PKhB/z2rRf8+rEj/RLBR/zqqSP87qUn/Mag//yeeMv8uczT/HjEf/2lnZ//d2dz95+roQQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy8rQxmZsa/8fSCb/Fnsi/wuZGf8Qmx7/EZse/xGcH/8SnB// + E5wf/xSeIf8UnSD/FJ0h/xKeI/8SniP/E54j/xSeJP8WniT/F58l/xmfJf8boCX/HaAm/x+gJ/8ioSf/ + JaIo/yejKf8royr/L6Qs/zKlLf82pi//Oqcx/z+oNf9FqTj/Sas9/06sQv9Tr0j/V7FP/1uyVf9gtV3/ + Zrdm/2y6b/9vvHj/cb6C/3nCjP9+xZj/gcej/4TKrv+Jzbv/kNHH/5XW0P+c2tb/q+Db/7rm4P/S7+v/ + 5/f0//H79v/z+/f/1PPu/7rr6v+w5uL/quLc/6Le1v+e29D/ldjH/4zTvP+N0bT/h8ym/4DHnP97xJH/ + dMCD/3O+e/9vu3D/bLlq/2e2YP9ktVn/X7NT/1uxTf9XsEf/U65B/06sPP9Iqzj/RKk1/0CoMf87pC// + OKQt/zilMf82pTL/N6c0/zeoNv83qTn/N6k7/zypQv8/q0X/QK1J/0OwTf9KslX/QK5O/0KtUP81rUT/ + Kqc4/yt3Mv8nQCr/lZaV//Du8IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJyc9s + laGd/yxZNP8Teh//D6Ie/xCcH/8QnB//EZ0g/xGdIP8SnSD/E54h/xSeIf8UniL/E58l/xSgJf8UoCX/ + FqAl/xegJv8YoCb/GqEn/xuhJ/8doif/IKIo/yKjKf8loyn/KKQq/yulK/8vpiz/MaYu/zSnMP84qDP/ + Pak2/0KqOf9HrD3/TK1B/1GvR/9VsU3/WbJT/120Wv9jt2L/arlp/2u8cv9wv37/dsKI/3vFlP9+xp3/ + gcio/4bMtP+N0MD/k9XJ/5rZ0P+m3tj/s+Tf/7/o4f/i9vP/6/n0//H79f/T8uz/uezr/7Do5P+m49z/ + oN7U/5razP+S1sL/idK3/4bPrP+Dy6L/fMeX/3bDjP9ywIL/b714/2u7b/9luGf/ZLZf/2K1V/9eslH/ + WbFL/1WwRv9RrkD/Ta08/0irOP9DqjX/P6gy/zqkL/83pC3/NaUx/zanM/83qDX/N6o3/zirO/83rD3/ + P6pF/0CsSP9Cr0v/RrJQ/020WP9DsVH/Rq9U/ziwSP8qrDj/LHo1/0xnUP+/wsDR9/b3BwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xRa7w8H7SnhS/w5+HP8OoR//EqAh/xKfIf8SoCH/ + EqAh/xOhIv8ToCH/FKEi/xShI/8ToCX/FKAl/xWhJf8WoSX/F6Em/xihJv8aoib/G6En/x2iJ/8foij/ + IqMo/ySjKP8npSn/KqYq/y2nK/8wpy3/NKcv/zipMf88qTT/Qas3/0WsOv9LrUD/UK9F/1SyS/9YtFH/ + XbVY/2K4YP9oumf/a7xw/26/e/90wYT/ecWO/3vHmP9+yaP/hMyu/4zPuv+S08L/mNjK/6Hc1P+p4t3/ + sOTc/8/w6//n+fP/7vrw/9f07f+67Or/sOjh/6bj1/+e3s//l9rH/4/Wvf+G0rH/g86o/3/Lnv93xpP/ + csOI/2/Afv9svnT/aLtr/2O5Y/9itlv/YbRV/1yzT/9XsUr/VLBE/1CvP/9MrTr/R6w3/0OqNP8+qTH/ + OKYu/zamLf80pjD/N6gz/zapN/85rDv/Oq0+/zqtQP9Cq0b/QqxI/0ayT/9KtVb/ULZc/0m1WP9Ptlz/ + PrFN/yqrOv8uhDj/dpZ6/9/k4WoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAMnEyLhtmHL/CIoX/wqeHP8VpSf/FaUn/xSkJv8ToyX/E6Ml/xOiJP8SoSP/E6Ek/xSiJP8VoiT/ + FaMk/xajJP8XoyX/GKMl/xqkJf8boyX/HKMl/x6kJv8hpCb/I6Un/yamKP8ppir/LKcr/zCoLf8zqS7/ + Nqox/zurM/9ArTf/Ra06/0muPv9OsEP/U7JK/1e0T/9btlb/YLle/2a7Zf9ovW3/a792/3HCf/91xYr/ + d8eT/3rJnf+AzKr/h860/47Suv+T1sL/mtrO/5/f2f+p493/uOjd/9v07P/t+e7/2PPq/73s6P+y6N7/ + peLT/53ey/+W28H/jde3/4PTrP+Az6L/fcuZ/3bGjv9yw4P/b795/229b/9qu2f/ZLhf/2K2WP9ftVL/ + WrNN/1WyR/9SsUH/Tq88/0quOP9FrTb/QKwy/zuqL/81qiz/NKsu/zWsL/83rDT/O6w6/z2tP/9ArUL/ + Qq1F/0mwRf9FrEf/TbVX/1G3YP9Wt2j/WL1q/2bGc/9Nr1n/NaVC/ymUNP+Pv5T/8/DyQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8DCX2yYcf8IiRb/C58d/xOjJf8ToyX/ + E6Ml/xOjJf8SoyX/EqEj/xKhI/8ToST/FKIl/xSiJf8VoyX/FqMl/xejJf8Yoyb/GqMm/xqkJv8coyb/ + HaQm/yClJ/8ipij/JaYq/yioK/8qqCz/Lqkt/zGqL/81qzH/Oaw0/z2tNv9Crjr/R689/0ywQv9Qskf/ + U7RO/1e2Vf9cuVz/Y7xk/2a+bP9pwHT/cMN9/3TFh/93yZD/ecua/37Npf+F0K//i9K3/5DVvf+W2cn/ + mt3T/6Ti2f+x5tv/yO7g/+X37P/T8uj/vOvl/7Dm2/+m4s//nd/H/5jcv/+P2rX/hder/4HSof9/zpb/ + eMmM/3PFf/9wwnX/b79t/2u6Y/9muFv/YrdV/121T/9YtEr/U7JE/1CxP/9NsDv/SK44/0StNP8/rDH/ + Oqsv/zSrLf8zqy3/M6ww/zesNv87rTv/Pq5B/0KuRf9Er0f/S7NK/0evS/9QtVj/UrVh/1m4av9gwXD/ + bst6/1KyXf83p0X/LZc5/5C/lP/08fIVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADEwcMOapdw9giKFv8Knx3/EaEj/xGhI/8RoSP/EaEj/xGhI/8SoSP/EqIk/xOiJP8Toyb/ + E6Mm/xSkJv8VpCb/FqQn/xekJ/8YpCf/GaUn/xqkJ/8cpSj/HqYp/yGmKv8kpyv/J6gt/yqpLf8tqS// + MKow/zSrMv84rTT/Pa42/0GvOf9GsD3/SrFB/02zRf9QtEr/VLZP/1i5Vf9evFz/Yb1k/2bBbf9sxHb/ + ccd//3TJif97zZb/fs+f/4LQp/+J07D/jtW3/5TYvv+Z28b/nd7M/6bj1f+u5tv/vu3m/7fr5P+q5uD/ + o+PV/5/fyv+a3cH/l9u5/5HZsf+J16n/htOg/4XRlf99zov/dciA/2/Fdf9qwGv/ZL1i/1+5W/9dt1P/ + W7VN/1azSP9SskP/TbA//0mwO/9Grzj/Qq43/z6tNP85rDL/Nasv/zOsL/81rDT/Oa07/z2uQf9BsEX/ + RLBI/0izTf9PuFH/TLRS/1K2XP9VtGH/YLtt/2rHeP910IL/VbZh/zmpRv8xmj7/kL+U/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhmGmsCo4b/waaGf8QoCL/ + EaAj/xGhI/8SoiT/E6Ml/xOjJf8VpCb/FaQm/xSlKP8UpSj/FaUo/xamKP8Wpij/F6Yp/xmmKf8ZpSj/ + G6Yp/xymKf8epyr/IKgr/yOpLP8mqi3/Kasu/yyrL/8vrDD/M60x/zeuMv88rjT/QK83/0SwOv9IsT7/ + S7ND/061R/9RtUz/VbhS/1u6WP9fvWD/Yr9p/2nDcv9vxnz/ccmF/3jNkf97z5r/f9Gi/4XTq/+I1bH/ + j9a4/5PZv/+W3MT/neDN/53h0P+i5Nb/nOPU/5ji0/+W4Mv/k93A/5Hbt/+Q2bD/jNio/4fWov+G1Jr/ + hdKT/37Oiv93y4D/ccV1/2rCav9jvWH/Xbpa/1u3Uv9ZtUz/VLNH/0+yQv9LsD7/R686/0OvOP9Arjb/ + PK40/zmtMv80rTH/Na0z/zmuOf8+sED/QbFG/0SyS/9ItU//TblT/1C8V/9RuFn/WLdi/1y1Zv9qv3X/ + edCE/4HXjP9auGX/O6pK/zefQ/+Ww5v/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFyfZWIQlCH/A5cV/xChIv8SoiT/EqIk/xSkJv8VpSf/FqYo/xinKf8Xpyn/ + FKcp/xSnKP8Upyn/Fagp/xaoKf8XqCn/GKgq/xmoKf8aqCn/HKgq/x6oK/8gqSv/Iqos/yaqLf8oqi7/ + K6sv/y2sMP8xrTH/NK0z/zmvNf89rzf/QbA6/0SyPf9Is0D/S7VF/062Sv9SuFD/WLxW/1y+Xf9hwmf/ + acZw/2/Jef9zy4L/eM2N/3zPlP9/0Zv/gtOk/4HTqf+H1a//i9e1/4zZuf+S3cL/kt7D/5Lfxv+I3sD/ + h93B/4vdv/+K27X/i9mt/4zYp/+J1qD/hNSZ/4LTk/+B0Y3/e82E/3PJev9sxXD/ZsFn/1+9X/9ZuVf/ + V7dQ/1a2Sv9StEb/TbJC/0ixPv9EsTv/QrA5/z6wN/88sDX/OK81/zeuNf86sDr/PrJC/0S0Sf9HtU3/ + SbZR/0y4VP9QvVn/U79e/1a7Yf9fu2j/Z7pt/3jFgP+K3JP/jN2V/164av87q0z/PaVL/57NpegAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbLB1KBGVIv8Elxb/ + E6Ml/xSkJv8VpSf/F6cp/xmpK/8aqiz/Hast/xurLf8UqCn/Fagp/xWoKv8WqCr/F6kq/xepKv8ZqSv/ + Gakr/xqpKv8cqSv/Hakr/x+qLP8iqi3/JKst/yasLv8prC//LKwv/y+uMf8yrjP/NrA1/zmwN/88sTj/ + QLM8/0W1P/9Jt0P/TblI/1O9Tv9awVf/YcRe/2fHaP9vy3L/dM17/3fNgf96zon/fdCQ/3/Slf9/1Jz/ + fdWh/4HWqP+G167/htmx/4zcuv+M3b3/i929/3zbtf973LX/g921/4Tbrv+F2ab/iNih/4fVmv+B05P/ + f9KN/3zPh/90zH7/bch0/2fEa/9iwWL/Xr1c/1i6Vf9WuE//U7dK/061Rv9KtUL/RrQ+/0O0PP9Asjr/ + PLE3/zuwN/86sDj/PLE8/0GzRP9FtUr/SLZN/0q3Uf9NulX/T7tY/1G+XP9RwGD/Wr9m/2fBb/9xv3b/ + hs2M/5fin/+S4Jz/X7dr/zqpS/9AqU//qNmx2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB9v4UBEJId7AmbG/8VpSf/FqYo/xinKf8aqiv/G6wt/x2uL/8gsDH/ + Hq8x/xKpKf8UqSv/FKkr/xWpK/8Wqiz/F6ss/xirLP8Zqiz/Gaks/xqqLP8cqy3/Hast/yCsLv8irC7/ + JKwv/yatMP8prjH/La4y/zCvM/8zsDT/N7E2/zqxN/8+sjr/QrU9/0e3Qf9PvEn/V8BR/1/GWP9jyV7/ + Z81m/23Pbv91z3f/eNB+/3rPhP950oj/etWL/3jXkf9315f/e9ic/37Zov+B2af/hNut/4fds/+I3bb/ + ft2y/37etf9+3a3/f9qm/4DYnf+B1pf/gNWQ/33Tiv960oX/ds9//3HMd/9syHD/Z8Zn/2LCX/9cv1j/ + Vr1S/1O8Tf9Qu0j/S7pE/0e7QP9EuT7/Qbc7/z+0Of87sjf/OrE4/zuxPP8/skP/RLVJ/0i3Tv9KuVL/ + TLtW/068WP9PvVv/Tr5d/06/YP9bwWr/b8V2/3rFfv+R15X/ouqn/5fhoP9etWz/OadK/0KrU/+w47nH + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjRiz + DKMg/xaoKP8Xqiv/Gqwu/xyrMP8irTX/JK83/ya0OP8hsTT/Fqou/xeqLv8Xqi7/F6st/xarLP8Xqyz/ + F6ss/xirLP8Zqyz/Gqss/xusLf8drC3/IKwu/yKsLv8krS//Jq0v/ymtMP8srjD/Lq4y/zKvM/80sDP/ + OLE1/zyzOP9BtTz/RrhB/02+SP9WxE//XclW/1/NW/9hzl7/ZtBl/27RcP900Xj/ddJ8/3TTfv9z1X// + cdeD/3DYiP9z2Y3/d9qU/3nbmf983J//gd2m/4DcqP973Kn/geCx/3rbpP942Zr/eNiS/3rWjv951on/ + d9SF/3XSf/9z0Xn/bs9z/2nMbP9ly2T/Ysle/13GV/9Xw1H/UsFL/0zARv9JvkP/Rb5A/0K8Pf9AuTv/ + PrU5/zuyOv87sTv/PrNA/0C0Rf9Ctkr/RbhN/0i5Uf9Ku1X/Trxa/1G+Xf9Rvl//UL5j/17Ebf9yyHv/ + hMqI/53WoP+s67H/leGf/1e1Zv81pkj/SaxZ/7zsxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSLI3oKqh//D6oj/xGxKf8ZtjX/HKc3/zOrS/82qkv/ + M7hH/yi1Of8nrzz/JK87/yGvN/8drjP/Gq0v/xeuLP8Vrir/Fa4o/xatKP8XrSn/GK0r/xuuK/8drSz/ + IK0t/yKtLf8krS7/J64v/yquMP8srjD/L64x/zKuMv80rzT/OLA2/z60Ov9EukD/TL9G/1PGTP9Zy1H/ + WcxV/1bLVv9azFn/YMxg/2XNav9pzm//adBy/2fRc/9p0nb/a9R8/2/Wgv9z2Yr/ddmO/3bZkv952Zn/ + edib/3PXnP9926j/cteZ/3HVkP9v1In/cdWF/3DVgf9u1H7/b9R5/27Tc/9p0W3/ZM5n/2DMYf9dylv/ + WchV/1XFUP9QxEr/ScBD/0a9Qf9Cvj7/P7s8/z63PP87sjv/OrA6/zmwPP85sT//OrJB/zuzRf9Atkn/ + RbhP/0q7VP9TvVz/WMBi/1u/Zf9jvm7/Z8tz/3bRgv+X0Z//s8+3/7vkwv+J3Zf/QbtV/y6lRP9jq3H8 + 4PznRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Lpw9QAicGv8OqCP/Da4m/xKxLP8frjn/PrhW/z+yU/85uU3/M7xF/zG1Rf8ttUP/KrQ//ya0O/8gszf/ + HrIz/xyyMf8asS7/F64s/xitLP8ariv/G64s/x2tLP8frS3/Iq4t/ySuLv8mri//Kasw/yqmMv8roDT/ + K5o1/y2YNv8xmzn/OKU9/z+xQf9GvUX/TsZJ/1LGTf9Pwk7/SrlO/0ixTv9HrVP/TKxY/1CuXv9Tr2L/ + VLBj/1WzZ/9aumz/YcV0/2nPe/9p0X//aMuD/2bBhP9iuYT/WbWD/2e6kv9euob/YsCD/2XJfv9o0Xv/ + adR6/2fVdv9n1HP/Zs9t/17HZv9Wvl//ULVZ/0yvVP9JrlD/SbBN/0a0Rv9DuEH/QLs//z+7Pv88tT3/ + OKk9/zSfPf8xmj3/L5g9/y2ZPf8unT7/MKU//ziuQ/8/tk3/SbpV/1O/Xf9awWT/XsFo/2XAb/9szHf/ + ftSJ/53UpP+628D/uunD/4LZj/9AtVH/NaFG/4C8ie7a++EqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOsVwKC4sY+g+kI/8MrCP/C68m/x+0Of9Ix1// + S79f/0bBV/9CxFX/O71P/zq8Tf80u0r/L7pE/yu4P/8mtzr/JLc4/x+zNP8bsS//HbEw/x2xL/8dsC// + HbAv/x+wMP8hsDD/I68x/ySqMv8knzT/Io42/yB8N/8dbzj/H2o6/yJwPf8nfT//L5A//zimQf9DuUT/ + SL1H/0OvSP85lUj/MX5I/y5ySf8ucUv/MXFN/zNyUP8zc1D/N3lV/0CJW/9Po2T/XL1u/2HEc/9ctnP/ + T5pu/0OEaf86d2f/O3ls/zqEav9Dmmz/VbVx/2PJcv9p03H/ZdJu/2DMaf9Xu2H/S6Va/z6PVP81fk// + L3RM/y5ySv8vekj/M4lF/zicQP87rD7/OrM9/zaoPv8tkT//JntA/yJtQf8gaUH/IW5C/yN7Qf8okT// + MqZD/z62Tf9Jvlf/VMFf/13EZ/9gxWv/Z8Nz/3PNf/+J15X/pNqt/8Lryf+177//d9KF/0CwUP9DolH/ + oNSo2eD75wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQgR3KD50h/w+vJv8IsCL/GLY0/0jMYf9c0G//WMtp/0/JYv9Fwlj/QsFX/z7AUv84vk7/ + M7tI/y+5Q/8sukD/Jrc8/yK2Nv8jtTX/IbQ0/yG0M/8htDP/IbQy/yKzMv8jsDH/IqIy/x6INv8WZjj/ + DlxV/wpyh/8JgJ3/CoKe/w9zgP8ZYE3/JXZA/zKYQf86p0T/NZRE/xyJhP8OhKH/DYGh/w6Bov8OgaL/ + DoGj/w+Co/8PgqT/FIyn/zZ9Xv9Mp2L/Vbdo/0yhZv8klaH/FIiq/xCCqf8Pgqn/Eoir/yCVof9IoWb/ + W8Fp/2HPaf9by2X/Ubde/0CTVv8tak7/HV9j/xF0jv8NgaL/DYCh/w91j/8ZYF3/JWtA/y6MPv8xnzz/ + Lpg9/xyJav8Nip//CoCg/wqAoP8KgaH/Do2h/x+JYv8xoEb/QLdQ/0zBWv9XxWP/YMhr/2PKb/9syXn/ + gNCK/5vao/+v4Lf/xvfO/6rvtf9qynj/RKxU/16qaf++6cWvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGEL5ERmSP/ErMq/wa2Iv8Ptyv/ + PspX/2refv9s133/Xsxu/1HJZP9Ox2L/ScZd/0TDWP8/wVL/OL1N/zW7Sf8vvEb/LL1A/yu9Pv8ouzz/ + J7o6/yW5OP8kuTX/I7kz/yO0NP8emjP/FW42/wWawv8Avv3/Aqzj/weDov8JgZ//A6fb/wG59v8NfZT/ + IWlA/y2LQP8qgED/GlJG/wG7+P8Avv3/BKrf/wyBof8NgaH/DYGi/wqPuP8Bufb/JWhe/0CXV/9Msl7/ + Q51c/ytkVP8ReZr/AL79/wC+/f8Pe57/ImJP/0GeXP9Uwl//Wcxf/069W/89l1P/JmNU/wmVwf8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Ki6z/HmM+/yeIO/8ojjv/HW09/xBPVP8Avv3/AL79/wSl2f8YS0X/ + Jn5H/zWmSv9FvVX/UMVf/1vKaP9kzW//aM90/3TSgf+Q1pn/rd+0/7zpw/+++sj/lOih/1zCav9QsF7/ + h7+N/9f3220AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASqFWVhmdKv8TtCn/B7si/wi3Jf8vwEn/beGB/3vfiv9s0Xv/X9Jx/1zRb/9Xzmr/ + UMpk/0nIXf9DxVf/QMNU/zzDUP82xEr/NMNH/zDDRP8swUD/KL88/ya+Of8jvjf/I7o1/xWRL/8SXzj/ + Aqnf/waCov8NRTr/FVk9/xhWQP8SRED/B460/wC+/f8Oc4b/IWo+/yNvP/8YSUD/Abj0/wC+/f8JlcH/ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6rQKwFsRX/BLsS/xXBKP8iuTb/Ssxe/5X4pv+e4K3/ + ld+h/5DlnP+L5Zv/gd+W/3rbiv9z2Hn/addz/2PYdv9g13L/WdVt/1LUZv9K01//RdBZ/0PQVv89ylH/ + NbdL/yqTSP8ZXUT/CnqX/wKv5v8Avv3/AL79/wC+/f8Avv3/AL79/wiHpv8YZzv/HG86/xJKPP8BuPT/ + AL79/wOp3v8JgJ7/CoCe/weRuf8Gns3/IWo+/zOfPf8/wj//QslB/zuzQ/8qf0P/EWV2/wC+/f8Avv3/ + EGV1/yh+P/84sj//QchA/zy8QP8qj0H/F09B/wC+/f8Avv3/CIOj/xtpPf8qpTn/McM3/yy5Nv8gjjn/ + ElI8/wG49P8MYF7/FHU2/xN8Nf8OTjv/Abj0/wC+/f8IlcL/Emh//w2CpP8SeZT/JWJi/z58YP9ep3X/ + e8uK/5Demv+z57n/yfPO/8Pzyv+S25v/Y8hw/1K1X/94wYD81PvZSgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + acJ2KBWaH/sAugn/CMgY/yO+Nv8jsjb/cu6K/7bqyf+p6az/neaa/5vkpf+X4bH/idyg/37hgf955Hv/ + ct6E/27dfv9p2nn/Ydlz/1rXbP9V1mb/UNZj/0nOXP89slT/Kn9O/w2Anf8Avv3/AL79/wC+/f8Avv3/ + A6nf/wWXwv8Lb4X/F10//x+DOf8efTj/Ek07/wG49P8Avv3/A6ne/wiAnf8JgJ3/CIqu/wWezf8faDz/ + L5w6/zq8Ov88wjr/N689/yh9P/8QZXX/AL79/wC+/f8PZXT/J309/zavPP87wzz/NrU9/yeJPf8WTT// + AL79/wC+/f8IgJ3/Gmo6/yilN/8uxDX/Kroz/x6QNv8RUzv/Abj0/wxgXf8TdTX/Ens1/w1PO/8BuPT/ + AL79/wmVwv8PdZP/DIy0/wG59v8Ct/T/G3SQ/0Z5af92uYr/m+Ck/77pw//H98z/re+2/2/Kev9Xvmb/ + V6ti/7HhuMrn/uwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL546nQO0DP8Eyg//Grot/xi0LP870VH/ + suy9/7j1vP+s5q7/pNut/6fjuP+e6K7/j+mU/4bnjP+B4ZD/feCL/3behv9u3ID/Ztt4/2LZc/9f2G// + VdBm/0OrXP8oaVH/Barg/wC+/f8CtO7/DnKL/xVNUv8VS0T/FExC/xdXQv8feT//I5Q6/yCFOf8TTjz/ + Abj0/wC+/f8Flb//EEE8/xFFPP8TSkH/BqLQ/x1qOv8njzf/LqY2/zKwN/8vpDn/JHk7/w9kdP8Avv3/ + AL79/w1kc/8ieTv/LqM5/zKxOv8tojz/IX49/xRKP/8Avv3/AL79/weAnf8Yazn/JKU1/yrDMv8mujL/ + G440/xBTOv8BuPT/CmBd/xJ2NP8SezX/DU88/wG49P8Avv3/CZXC/xtFTf8dRk7/FmuH/wC+/f8Bu/n/ + LWd5/2yjh/+g3a3/xOzJ/7bwvf+J3ZP/Z8xz/1KzXv+Bwor54fbnIwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABtw3QdHKol9wC0C/8Nsh7/F8Es/xO9Jv931Hf/rPe4/7700f+y4L7/suay/6/vr/+i663/ + luam/5Dim/+M4pn/huCT/37ejP933IT/cNt+/2zae/9f0HH/SKpj/ypkVf8Dr+j/AL79/w11kv8VRUf/ + HF9I/x1rR/8XX0X/DYCI/xd4Sv8Zjjr/E4E3/wpNOv8BuPP/AL79/wKUvv8FRDn/CF01/whfNP8IWDX/ + CGAz/whwMf8Jei//CYUt/wqDLf8HZjL/BGJv/wC+/f8Avv3/A2Fu/wZlMP8Igyv/CYYs/wh4MP8HYjT/ + BUI5/wC+/f8Avv3/An+b/whmMv8MoSn/Db4l/w21J/8Kiy3/BlA2/wG48/8EX1v/CHIy/wp4M/8JTjr/ + Abj0/wC+/f8IlcL/GkVN/xxGT/8fSlb/AL79/wC+/f8af6j/ZJGD/5/Xrv/A7sf/m+el/2DFbf9awWj/ + c8B+/sDsxqTw+/MBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPtFSNC5kT/wu1H/8KvB// + EcQj/y+5MP9+6I7/ufzR/8Pyzv+967n/tuux/7Dqu/+m57f/nuan/5vlpf+U5J//jOKZ/4Tgkf9/3oz/ + et2H/27Vff9XtG7/OHZd/wuYxv8Avv3/Dnqa/xhGSf8eXUr/HmBK/xZMR/8FoNH/FWhY/xp9Pv8UdDr/ + C0g7/wG49P8Avv3/ApS+/wZCOv8IVjf/CFY2/wZYT/8EaG7/Bkg2/wKDmv8Ebm7/BlM0/wVHNv8DYW// + AL79/wC+/f8DYW7/BEc2/wVTM/8EbW3/AoOa/wRDN/8EQDj/AL79/wC+/f8CgqD/Blk0/wqVKv8MtCX/ + DKsn/wl+Lv8FSTf/Abjz/wRYW/8HYTT/CWc1/wlGPP8BuPT/AL79/wiVwv8cRk7/HkZR/x9Waf8Avv3/ + AL79/xiEr/9kjIT/ndKs/6vqtP+A2oz/VsFk/1CtXf+u5La/5fvpEgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAKPSnxRGqkvxB60T/wi7Fv8Xxyr/BrcQ/zfFRP+Q7Jz/zf7V/87y0/+84sL/ + vOvB/7nwvf+s7LT/qeuy/6Tprf+b6Kf/lOae/4zkmP+J5JX/fd6K/2rHfP9PmGz/J2ty/wO07/8DtO// + E2mB/xlGS/8WT1n/DXqZ/wG7+P8TaGv/HXFA/xdnPv8NQz3/ALv4/wC+/f8Cmcb/CEI7/wdBOv8HQTn/ + BHSM/wKPtv8FQDj/A4Kg/wN0i/8FPzj/BT83/wRjcv8Avv3/AL79/wJhbv8EPzf/BD82/wNyh/8Cgp// + BEA2/wRJRv8Avv3/AL79/wKNsv8FTzb/CYgt/wuoKP8Lnin/CG8w/wRCOP8AvPv/A2Fs/wVLN/8HUDj/ + CUI8/wC7+P8Avv3/CJfF/x1GUP8dUmT/C5fF/wC+/f8Avv3/LHua/3Kbjf+bz6n/iNuT/2LLcP9SwWD/ + d8OB/NH32EYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIHPf38bnhr/ + Cb0b/w+8Jv8GwRr/CLEN/1LOUf+09b3/3Pfr/9Dl3P/I78n/wvbC/7jwwv+28b7/sO60/6jrq/+g6qT/ + meih/5Toof+K5Jb/fdeI/2m8ff9KjGv/K2pv/w6UwP8FsOr/AL79/wC+/f8Ct/T/CKHS/x9xY/8mekf/ + F31s/weOs/8Avv3/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/Ap3L/wVAN/8CjbL/AL79/wC+/f8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/AL79/wKNsv8DX2j/AZC2/wC+/f8Avv3/AbDo/wOFmv8Igjj/ + Cp0o/wqVKf8FgmP/ApC2/wC+/f8BoM7/BGNp/wZhZf8EjbH/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/ + CK3m/yKDqf9XfXn/gLSV/4/Qm/9qynX/U75g/1u8Z/+28r+j3/7kBgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0+nTDIPDiOcdoyr/BacR/xiyJP8Ixw//B7wQ/0rKYP/G88n/ + +v3x/+H55P/G7db/xe7S/8j0zf/B77r/tuip/7DoqP+r6a3/oeaw/5nipf+T3pv/h9GU/3O5h/9Zl3X/ + Q3hn/zViXv8vWVr/KldW/yxeVf80dFj/OYxX/zaTU/8rgUv/H2VG/xhRRP8UTkL/E05B/xJOQP8PTj3/ + DU87/wtUOP8JXjX/CmYz/wtcNf8KUzb/CE02/wdMNf8GSjX/BEkz/wJJMv8DSjP/BUs1/wZLNv8GTTb/ + B1A1/wdTNf8HUDX/B001/wZMNf8HUjT/CGou/weKJv8InSL/B5kk/wd+Kf8GYTD/BVI1/wZWNf8LXzf/ + EGA7/xVXQf8bUEn/H09N/yNRUf8nVlP/LFZY/zZXYP9KZm//Y4aA/3Osif9txoH/ZNBz/1y9Y/9ns2// + pdasyOf77AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + wPDETW/KefgPnhb/B7sE/wavIP8KtDL/EKoX/1vLTv/F98D/5vvv/+Hu5f/Y69P/1/PZ/8zy0v/A78r/ + vvLH/7vyvv+w5q7/puSp/6Hmqv+b4aT/j9ma/37Ij/9utYL/Yad5/1qedP9SnW3/U6Nr/1Wta/9Stmf/ + TLZg/0CpWP84m1L/MZFO/yuNSP8pjEf/JoxD/yGLPv8dizv/GI82/xWXM/8VmjH/E5Ew/xCLL/8Ohi// + DYQu/wuEK/8Hgyn/BYIm/wWCJ/8Jgiv/CYMq/wmGKv8JiCn/CYko/wmHKP8JhSj/C4Uq/wuJKv8LkSX/ + CqAh/wmpH/8KpyD/C50l/wqRKf8KiSv/DIot/xONMv8bjjr/Jo1E/zOOUf88j1r/QpJf/0yXZv9Ql2r/ + YJ93/3Wwiv97u4v/b71+/2TEcv9ix27/Z7Rt/6Tep87P99QbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu+rBXmG/aPAIrwz/Dqkl/wumKP8JtRP/ + CaoG/02/Tv+98cP/6/bq//Hy6//n9uj/3/vm/9L43P/D7sz/v+nC/8nuyf++78D/r+u1/6vqsv+j6Kv/ + meGj/4/bmv+G1pP/gdKP/3rPhv92z4H/dNJ//2zSeP9kz3D/Wslo/1TEYv9OwV7/RbxV/0G6U/89uk7/ + NrhI/zC2Qv8puDv/Jbk4/yG4Nf8bsDD/Gq8v/xetLf8UrCn/Dqwl/wyrI/8IqR//Bqkf/wqqIf8KqiH/ + CKsf/wirHf8Iqxz/B6oc/weqGv8Lqx//Dqsi/wysH/8Lrh3/DLEd/w2zH/8QsSP/ErEm/xGuKP8VrSz/ + Hq8z/yuxPf85tUv/S7pb/1a/Z/9ewm7/bcN6/3HHfP92z4H/eNeG/3XWgv9synf/Ybxt/2W5b/+Vypm5 + yfPLFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAArOO1REe0UuYRlQv/BqQI/wi5Hf8AqxL/C6EM/03BTf+y7bn/6/n1/+r76v/q+OL/ + 5PXa/9722f/W9dv/yvDc/8Puzf++7sL/uuy+/7TruP+r57H/ouWp/5vko/+Y46D/kN+Y/4vdkv+G247/ + ftmH/3XVf/9s03f/Z9Fy/2PQbv9XyWL/U8hf/07HWf9GxVL/PsNL/zbBRP8xv0D/Lr49/yS5Nf8iuTT/ + Hrcx/xq3Lf8Vtin/EbUj/wy0If8LtB7/CbQc/wq0HP8Isxv/CLMY/weyFv8GshX/BLIT/wmzGf8Osx3/ + DrIb/w6xHP8PsRz/ErMg/xe2Jf8auSf/G7cr/yC2MP8pujn/OL5F/0jEVP9ZyWX/Y85v/2zQdv98z4P/ + etKA/3Tafv9u3nr/ZNFw/2C/a/9uvnj/gcaJmsPmww8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo86lJE+iQcwKkwj/ + AZ4O/wanG/8FqQ//BawF/yizMf+H0JT/z/fR//z+9P/89PH/9/Pw/+f97P/H+tj/yPHR/9Dt0f/K7cz/ + wuvE/7rovf+y5rf/q+Sx/6fjrf+h36X/m9yg/5fcnP+Q2ZT/h9WN/37ShP930H//c897/2fIcP9kx23/ + XMZm/1TDYP9MwFn/RL5Q/z68Sv86ukf/M7pC/zG5QP8stzv/JrY2/yC0Mf8csy3/GLIp/xSxJf8OsB// + DrAf/wyuHP8Krhj/Ca0X/werFP8HqxL/Cq4X/w2uGv8OrRv/Dqwc/xKsHf8XriL/HLIo/x+0Kv8nsjP/ + L7Q8/zi6Rf9Gv1L/VMRe/2LJa/9rzHX/cc16/33Og/94z4D/cdN5/2TOcP9VuWH/YLBq9YvKlXe37b8E + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAos+rEjiRQZsPhwv/EKAT/wSbD/8CqQX/AaoC/yKiIP94zHv/ + 0O/Y//f8/P/59v3/5PXn/9P8zP/Y99b/3vDe/9jv2f/Q7dL/yOrK/8Dpw/+55r3/teW7/7Dgs/+q3a3/ + pt2p/57aof+V15r/jNSR/4bSjP+C0Yj/eMx//3TJev9sx3X/Y8Rt/1rBZf9Rvlz/S7xW/0i6VP9Bukz/ + QLlK/zq3Rv8ztkD/LrQ5/yqxNP8msDD/Hq8r/xWtI/8VrSL/E6wg/xCpHf8OqBv/DKYX/wulFf8MqBb/ + C6kX/w6oGP8Ppxr/FKce/xupJf8hrSr/I68s/zKyPP89tkb/RrtQ/1LAW/9dxWX/aMhw/2/Jdv9yyXj/ + d8x+/3rSgf9uyHX/XLBj/2WtbeSFwo1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tNu2AE2hR2INiBXrBpUX/wufFf8Opwr/CKED/xOWF/9Mr1n/ouGy/+H96v/z/PL/7/Lj/+/z5//r9uv/ + 5fXl/97z3v/V8Nf/zu3Q/8fqyv/D68f/vuTA/7jhu/+14Lf/rd6v/6Pbpv+b2J7/lNaa/5DVlv+H0o7/ + hdCK/3zNhP9yyXv/acVy/1/Bav9awGT/Vr9g/0+8VP9MulL/SLhM/0C2R/86s0D/NLE7/zGvN/8prjL/ + HKsq/xyqKP8aqSX/F6Yi/xWlHv8Uoxv/EqIa/w2kF/8JpxX/DaQY/xCjGf8WpB7/Hacm/ySqK/8mqy7/ + OrND/0a4T/9PvVn/WsJi/2bFbf9uxnP/ccV2/3PEeP9tzHX/ZsJs/2CtZv9tq3Kyg7aIGwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKpUiYUixq8GIAV/yCMG/8NoRT/ + A5oG/wSXBv8lpyb/gdGB/9bt1v/18vX//ff7//f99v/y+fL/6fbp/+P04//a89z/0/HW/87x0f/K7Mv/ + xenF/7/mwP+45Ln/sOCx/6jdq/+i26X/n9ih/5TYmP+Q15X/iNOP/3/Qh/92zH7/bMh0/2jGcP9jwmv/ + W7xd/1i7Wv9TuVX/TbZP/0WzSf8+sUL/Oq8//zKtOf8lqzD/JKot/yKoKv8fpSb/HKMk/xigH/8Xnh3/ + EKIY/wylFP8Poxf/EqEY/xmjH/8hpSf/Kagu/y2qMv9FtEv/UbpZ/1i9X/9hwWb/acRu/27Ec/9wwnT/ + b8B1/2DBaf9Rp1jtVpxcboi5jAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAH64fQc8dTlsGnAY6gqMCv8BigL/A5kE/wSYB/8QhxD/QpxB/5zdl//o+Of/ + /f79///8/v/58/j/8fDw/+337f/l/ef/2fvc/9X81f/O+sv/xfDD/8Hqvv/C6L3/wOW7/7nbs/+u06r/ + nuCi/5rfnv+T2pf/jNOP/4TOiP9/yYP/fciB/3bEfP9nuW7/Zrls/2O5af9et2P/V7Rc/0+yVP9Lr07/ + Q61H/zesPP82qzn/Mqk1/y6mL/8ppCv/I6Ak/yCcIf8ZoB3/FaMb/xafG/8ZnB3/IZwl/yuhMP84qD3/ + Qa1F/1qzWv9kuGX/Zbtm/2S6Zv9kvGj/acBt/2a+av9btmH/WZlft22kdSgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/kD4g + D3sOowN5BPoEigf/CpsP/wSLBv8GfQb/JI4j/2qvav+v2bD/2/Ta//f+9f/1+PP/9PTx//j39f/z9PL/ + 6PDl/+Hs3f/Z6db/1evS/9Huz//J7cj/veS8/7Lbsf+32bb/tNe0/63Trv+lzqb/ncme/5XEl/+Sw5T/ + icGN/3DAd/9rvXL/ZLhp/1y0YP9YtVv/VrZa/1e7Wv9QtVT/QadF/z6mQv85pT3/NqU4/zKkMv8upC// + LaYt/yCeJf8YmCH/HZsm/yGZKv8mmS3/LZw3/zymRv9JslT/VrBZ/160Xv9jt2T/YrNk/2CvZP9lsGn/ + aLFs3lupYFyEvIoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm4TPQppCsQEgQb/CJIN/waMB/8ChQL/ + CncK/x9/H/9YqVf/qt6n/93u2//0+vH///r5//zw+P/87vr/+e33//Ls7//p7un/4fHi/9bx2P/J68z/ + wOfE/8nhyf/H38j/wNzB/7bYt/+r067/n86j/5nJnP+UyZf/idCO/4fNiv+AyoL/dMR4/2u+bP9huGL/ + WLFY/1ixWv9ds2H/VK5Y/0urT/9BpkP/N6M5/zCgNP8uozD/J5kt/yCPKP8gjSn/JpEw/zWePf9Ap0z/ + RKlR/0KlTv9NrFP/UqxV/12wX/9psmv/YaBk7VONVYFelF8SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAP5FCBAlpCk8CbQLKBX4F/wmLCP8EhQP/BYMF/w+ADv8feh3/So5H/5HBj//S7c// + 5vvj//r9+v///P//9/b3/+vu7v/j6uT/3erf/9vq3v/X6tr/w+DF/7/gwf+63r7/suC2/6ver/+i26j/ + mtmh/5fUnP+ayZr/msqZ/5bKlf+OyI7/hsKF/3y9ev92uXL/a7Jr/2GsZP9isWX/XbNh/1SvV/9CpkX/ + LJcv/x2LIP8kjSb/MZMy/zOUM/81lzj/PJw//0SiSP9OrFT/WLRd/1yzX/9crl7/V6FZ71SUVJBbjVke + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACd6JwUFYAVL + BGAEwQl5CP0IgAb/AnUB/wV1BP8GcAf/DmwO/yqGK/9es1//odaj/8DmxP/T89b/5/vo//T99P/5/Pj/ + 9/f2//Hv7//c69v/2ezY/9br1f/O6c7/xeTF/7ndvP+u2LH/rNSv/7TOsf+tyqr/pMSf/5q+k/+Quov/ + irmE/4m4g/+GvoH/esZ7/2y5bv9XqVn/RJtF/zORNP8piyr/I4gk/yuNJ/82ki3/PJY0/0aeQP9Spkz/ + WKlS/1SjUP9PnUr/UphS6FGTUodQjlEfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDNgtlCp8KZwruA2gD/wFyA/8GfQf/ + BHcE/wdmB/8WaRj/LoAw/1mhWf+FwoX/sdyv/9DozP/i793/6/Pn/+rs5P/q7uX/6/Dl/+rv5v/m7eH/ + 3eba/9fh0//Q3cz/vNu4/7nZtf+z1q//qtCk/6DNm/+ZyZP/lsaO/4PAfv9fsl7/TaFN/zaNNf8ofib/ + JH0h/yqFJv8ykC//NZEu/zaQL/9Aljj/SZhB/06WRv9Rkkn/UI1Iy0SEPGc+dzsRAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAhPCBQCTQJgBGUDvgVvBfcGdQb/DH0K/wRrA/8AZgH/BmcF/w1nDP8bahj/ + Mncs/0qKRP9kn13/k72O/5vFmP+oz6T/tdmx/77fuv/E4b3/xeC+/8Hfu/+q36n/pdqj/5nSlv+HxIP/ + cbNu/1yiWP9NlUn/MoMu/w1vDP8UchH/GncW/yF8Hf8ogiP/L4Un/zSKLP8yii7/NIw2/z6PP/9CiUHf + P309k0R3QDddiVgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CVwHHwRYBGIMYwa1BGcB7QRsAP8JcQP/CHAD/wJoAP8AYwD/A2QC/wdnBv8OZA3/D2gP/xRwFf8aeBr/ + IXoj/yd6Jv8odyf/KXgo/y19Lv8qeSn/InQj/xpxGf8VbhP/EG4O/w9uDP8PdA7/En0Q/xV7Ef8ZexP/ + HnwY/yZ+Hv8vgST/NIQo/TOGMtEofDKOJHMsPi50NggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQALAE0APQJWAngEXQS1 + AV4A4ABgAP8AZAD/AGcA/wJpAf8BZwD/AGYA/wBkAP8BZAH/AmUC/wJmAv8CZwL/AmsD/wJqAv8CaQL/ + AmsB/wZtAv8Mcgb/EHUM/w90Cf8KbwX/EXIK/xt1E/UheRvLIXUcnBlpElYOXggjAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAACFIEHgJNAEIBUQBkBFsDkAVaBasEWATC + A1YD1gJWAuUBWQHyAlsC+gNdBP4GXgL9BVwC9gVcAuwHXQTeCV4GzA5iCbcQZg2fDWEHeghTAlMNVwcw + Gl4SCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////8AAP////////////// + ///AAAAH///////////////8AAAAAH//////////////4AAAAAAP/////////////4AAAAAAAf////// + //////wAAAAAAAB////////////wAAAAAAAAH///////////4AAAAAAAAAf//////////4AAAAAAAAAB + //////////4AAAAAAAAAAP/////////8AAAAAAAAAAA/////////8AAAAAAAAAAAH////////+AAAAAA + AAAAAA/////////AAAAAAAAAAAAD////////gAAAAAAAAAAAAf///////gAAAAAAAAAAAAD///////wA + AAAAAAAAAAAAf//////4AAAAAAAAAAAAAD//////8AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD/// + ///gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAAAAAAAAAA + AAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAA////4AAAAAAAA + AAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAD///4AAA + AAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP/ + /4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAA + AAAB//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAA + AAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB/ + /AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAA + AAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAX/wAAAAAAAAAAAAAAAAAAA/8AAAA + AAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB/ + /wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAA + AAAAf/+AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAA + AAAAAAAAD///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAP///8AAA + AAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH// + //gAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAA + AAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////+AAAAAAAA + AAAAAAAA/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAB/////wAA + AAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAA/// + ///AAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAD//////gAAAAAAAAAAAA + AB//////8AAAAAAAAAAAAAAf//////AAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAA + AAAAAAD///////4AAAAAAAAAAAAB////////AAAAAAAAAAAAA////////4AAAAAAAAAAAA/////////A + AAAAAAAAAAAf////////8AAAAAAAAAAAP/////////gAAAAAAAAAAP/////////+AAAAAAAAAAH///// + /////4AAAAAAAAAH///////////AAAAAAAAAH///////////8AAAAAAAAH////////////4AAAAAAAH/ + ////////////gAAAAAAH//////////////AAAAAAP//////////////+AAAAA////////////////+AA + AD////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////ygAAABgAAAAwAAAAAEAIAAAAAAAAJAAABMLAAATCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGATc3NwsnJycfKioqRSMjI2cnJyeQKysrqSsrK74rKyvOLCws2SQkJN4kJCTd + Jycn1SsrK8kuLi63Ly8voS8vL4E0NDRaPj4+NkpKShVkZGQGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGAS8vLyEmJiZmJCQkoiQkJNUkJCT0Hx8f/yUlJf8uLi7/ + Ojo6/0VFRf9MTEz/UFBQ/11dXf9aWlr/UVFR/0NDQ/8zMzP/Kioq/yUlJf8iIiL/JSUl/isrK+krKyvF + KCgojUVFRUpWVlYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjY2AygoKCsiIiJ8Hx8fzSsrK/s7Ozv/ + SUlJ/1xcXP9tbW3/eXl5/4SEhP+Kior/kJCQ/5aWlv+ZmZn/mpqa/5qamv+dnZ3/oaGh/6Ojo/+kpKT/ + oqKi/5qamv+UlJT/g4OD/2hoaP9HR0f/NjY2/ysrK/8hISHwKysrsEBAQFxLS0sVVVVVAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCwsABsbGwwoKChW + GBgYuCIiIvJGRkb/XV1d/2hoaP90dHT/fX19/319ff99fX3/gYGB/4uLi/+Pj4//kpKS/5aWlv+ampr/ + nZ2d/6Kiov+jo6P/paWl/6enp/+pqan/qamp/6ioqP+tra3/r6+v/6urq/+hoaH/mpqa/4iIiP9mZmb/ + Nzc3/x4eHv0kJCTjLS0tlTU1NTNJSUkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAgICAMHx8faCAgINEzMzP+VlZW/25ubv91dXX/dHR0/3d3d/9/f3//h4eH/4uLi/+UlJT/ + oKCg/6enp/+rq6v/s7Oz/729vf/FxcX/y8vL/8vLy//Kysr/ysrK/8nJyf/IyMj/yMjI/8jIyP/CwsL/ + u7u7/7e3t/+4uLj/tra2/6ioqP+ysrL/rq6u/5mZmf9fX1//LCws/yAgIPYjIyOvPDw8PFtbWwEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCyEhIV4pKSnfQ0ND/2dnZ/9vb2//bW1t/3Z2dv+BgYH/ + goKC/4SEhP+UlJT/qamp/7u7u//MzMz/2tra/+bm5v/r6+v/7+/v//T09P/5+fn/+/v7//j4+P/39/f/ + 9/f3//f39//29vb/8/Pz/+rq6v/o6Oj/5eXl/9/f3//W1tb/0tLS/8rKyv++vr7/tra2/7Ozs/+tra3/ + oaGh/3p6ev8+Pj7/Ghoa/CEhIbRBQUE1VlZWAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIwMjIyM+Li4uwUJCQvtYWFj/ + Z2dn/25ubv9ubm7/fX19/4iIiP+ampr/tLS0/8zMzP/h4eH/7+/v//f39//6+vr//Pz8//7+/v/+/v7/ + /v7+//7+/v/+/v7//v7+//////////////////////////////////39/f/+/v7//v7+//z8/P/6+vr/ + +fn5/+/v7//c3Nz/1dXV/8zMzP++vr7/vLy8/7CwsP+ioqL/hISE/z4+Pv8cHBzxIyMjkjk5ORsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Hx8fECIiIok5OTn1YWFh/2VlZf9mZmb/ampq/3Fxcf+JiYn/pqam/8PDw//c3Nz/8vLy//b29v/5+fn/ + //////7+/v/7+/v//Pz8//7+/v///////v7+//7+/v/9/f3//Pz8//z8/P/8/Pz//f39//7+/v/+/v7/ + //////7+/v///////v7+//39/f/+/v7//f39//f39//6+vr/9vb2/+vr6//Z2dn/y8vL/8fHx/+6urr/ + p6en/6Ghof9xcXH/MTEx/xwcHNwrKytQS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAjIyM7NTU10VFRUf9nZ2f/aWlp/21tbf94eHj/kpKS/7Ozs//Nzc3/ + 5OTk//X19f/6+vr/+/v7//r6+v/6+vr/+Pj4//Pz8//w8PD/7u7u/+vr6//r6+v/6urq/+rq6v/q6ur/ + 6urq/+zs7P/u7u7/8fHx//X19f/5+fn/+/v7//z8/P/9/f3//f39//7+/v///////v7+//v7+//6+vr/ + +/v7//7+/v/7+/v/8fHx/+np6f/X19f/x8fH/7a2tv+xsbH/nJyc/1xcXP8jIyP6IiIimzU1NRYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJycnBy8vL2dBQUHuWVlZ/19fX/9nZ2f/ + b29v/4eHh/+np6f/ycnJ/+Xl5f/v7+//8/Pz//T09P/t7e3/5eXl/93d3f/X19f/1NTU/9HR0f/S0tL/ + 09PT/9XV1f/X19f/29vb/+Dg4P/k5OT/5+fn/+3t7f/w8PD/8vLy//b29v/5+fn/+fn5//Pz8//7+/v/ + /v7+///////8/Pz/9/f3//v7+//+/v7/+/v7//n5+f/7+/v//v7+//39/f/z8/P/4+Pj/87Ozv+9vb3/ + tra2/6urq/+EhIT/MjIy/iAgIM86OjotREREAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKioJ + LS0tkE1NTfpdXV3/WVlZ/2lpaf98fHz/np6e/8TExP/o6Oj/8/Pz//Dw8P/r6+v/4eHh/9PT0//Hx8f/ + wMDA/8TExP/Hx8f/x8fH/8jIyP/Nzc3/0NDQ/9XV1f/X19f/2tra/97e3v/i4uL/5OTk/+fn5//p6en/ + 6+vr/+/v7//y8vL/9PT0//b29v/7+/v///////7+/v/9/f3//f39//v7+//9/f3//v7+//7+/v/+/v7/ + /f39//r6+v/9/f3/+fn5/+7u7v/h4eH/0NDQ/7u7u/+tra3/mZmZ/0pKSv8eHh7lJycnTwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACoqKhE2Nja1UFBQ/mNjY/9iYmL/c3Nz/5CQkP+2trb/3t7e/+rq6v/m5ub/ + 3t7e/83Nzf+/v7//ubm5/7W1tf+5ubn/wMDA/8PDw//Gxsb/z8/P/9XV1f/X19f/1NTU/9jY2P/c3Nz/ + 3Nzc/97e3v/f39//4ODg/9ra2v/a2tr/29vb/9vb2//c3Nz/3d3d/+Li4v/h4eH/4uLi/+bm5v/v7+// + 9vb2//r6+v/+/v7//f39//39/f/9/f3/+fn5//b29v/6+vr//Pz8//z8/P/6+vr/7+/v/9ra2v/Dw8P/ + uLi4/6+vr/9dXV3/HBwc9ioqKm1LS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExGzw8PLtYWFj/XFxc/2lpaf92dnb/ + np6e/8zMzP/j4+P/4eHh/9DQ0P+8vLz/tLS0/7CwsP+xsbH/tbW1/7u7u//FxcX/zs7O/9XV1f/c3Nz/ + 4eHh/+Pj4//e3t7/19fX/8nJyf/Dw8P/vLy8/7S0tP+srKz/p6en/6SkpP+mpqb/qqqq/7CwsP+1tbX/ + urq6/8nJyf/Pzs//1dXV/9nZ2f/b29v/29vb/+Pj4//v7+//+fn5//z8/P/9/f3//f39//7+/v/9/f3/ + /Pz8//v7+//6+vr/+/v7//Dw8P/k5OT/z8/P/7y8vP+rq6v/dHR0/yAgIPohISF2Q0NDBgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8W + Ozs7vlJSUv9YWFj/ZmZm/35+fv+ysrL/3Nzc/+Hh4f/Nzc3/u7u7/66trf+kpKT/qamp/7Kysv+5ubn/ + ysrK/9jY2P/d3d3/3Nzc/9fX1//Kysv/tra2/5ydnf+Fh4j/eHt8/2Zpa/9dYmT/V11f/1BVWP9HTE// + REhM/0ZLTv9HTVH/TFNW/1ZbXf9eYWL/Y2Vl/2xsbP90dXX/g4WF/5qcnP+ztbX/wsTE/9bY2P/X2Nn/ + 3d7e/+Tk5P/r6+z/8/Pz//z8/P/+/v7///////39/f/5+fn/9/f3//j4+P/s7Oz/7Ozs/9fX1/+8vLz/ + s7Oy/29vb/8kJCT5KioqeGJiYgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAADs7Ow5BQUHBUVFR/19fX/9paWn/hYWF/8XFxf/e3t7/y8vL/7e3t/+oqKj/ + paSk/6moqP+oqKj/v76+/9bV1f/j4+P/5OTk/9bW1v+9vb3/mpub/3p8fP9kZ2j/U1RX/0NESf87PEL/ + ODlB/y4xN/8nLTP/Iyox/yEoMP8gKS//Iysz/yQqMf8dJy3/ICkv/ykvNP80Njr/PDw+/0VDRf9IR0n/ + REZK/0RJUP9JT1f/UVdf/3h+gP+Wm5z/tLe2/9LU0v/i4+H/3t/d/+Lj4//x8fH//f39//39/f/4+Pj/ + +Pj4//T09P/4+Pj/9vb2//X19f/a2tr/vr6+/729vf98fHz/ISAg+jQ0NHQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzDD09PahTU1P/W1tb/2pqav+UlJT/ + yMjI/9XV1f+6urr/pqam/52dnf+goKD/qqqp/8TDw//T09P/4ODf/9jY2P/BwMD/l5eX/3R0dP9YWVn/ + P0FC/zU4OP8wNDT/KSwt/yosLv80Njr/QEFH/1RbXf9faWr/bHZ5/3qDh/+GkJL/jJWY/46Ulf+Gjo// + foeI/3V9fv9tcnP/Z2ts/0lMTf9AREX/MTo9/yIwNv8eMDf/IDM5/yw4Pf84Qkf/TlVY/3Z7e/+ipaT/ + vb+9/9na2v/h4eH/4+Pi//Ly8v/6+vr/+/v7//X19f/y8vL/9PT0//Dw8P/s7Oz/3t7e/8LCwv+tra3/ + cXFx/y4uLvk6OjpZWFhYAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjID + NjY2hklJSf1ZWVn/bW1t/5mZmf/FxcX/xcXF/66urv+YmJj/mJiY/6CgoP+4uLj/0M/P/+Li4v/S0dH/ + ra2s/4WEhP9fXl3/QUA//zMzMv8iIyP/Jykq/z9AQP9aW1j/fn98/6Chnv+5urf/ycvI/9DZ1P/P2tX/ + zdjU/8vX0v/M2NT/zdrV/87X1v/N1tb/zNbV/83X1f/Q2dj/1Nza/8rS0f+/x8X/qbWy/4WVkv9XbWn/ + OE5N/yEwOf8YJy//Iy82/zE4Pv9NT1P/b3By/5GRkf/BwcH/4ODg/+Hg4P/l5eX/8/Pz//z8/P/9/f3/ + 8/Pz/+/v7//09PT/9PT0/97e3v/Dw8P/sbGx/2hoaP8qKirrS0tLOwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDBgRkZG+l5eXv9nZ2f/lZWV/8DAwP+1tbX/mJiY/42Njf+VlZX/ + srKy/9TU1P/k5OT/1NPT/66trf95eHj/V1ZW/0FAP/8jJSD/HB0a/zs+Ov9qbWv/l52Z/8TExv/U0Nb/ + 1tXY/9bX2f/R1NX/y9HR/8/U1f/R1tf/0djY/9LZ2P/T29n/1NzY/9bb3f/U2t3/0tjc/9DX2//P1tr/ + z9bZ/8rP0//Q09f/19na/9XY2P/T09P/zM3M/5+qrP9ygIT/RVRZ/yw3Pv8vMzj/OTk+/0ZFRv9kY2P/ + ioqJ/8DAwP/c3Nz/4eDg/+/v7//4+Pj/+fn5//f39//z8/P/7e3t/+3t7f/g4OD/vr6+/7Gxsf9VVVX/ + NjY221hYWB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMCpDQ0PrWVlZ/2xsbP+Tk5P/ + uLi4/7CwsP+ZmZn/kZGR/5ubm//BwcH/29vb/9PT0/+qqan/g4KC/1NSUv89PDz/LCoq/ywtKv9UWVL/ + k5iS/8TJxP/S2NP/z9XQ/9HT1P/Oz9X/ys/R/87Y1v/V4t3/1eXd/9Xj2v/V49r/1uXa/9Xl2P/S5dX/ + 0OTS/9Di1//Q49r/0OXa/9Lm2//S5tv/0uXc/93q5P/d5+H/1t3a/87T0v/Q0dH/09PS/8TQyv/V39r/ + ztfV/6y0tv92fH//SUxO/zQ0M/8+PTz/R0ZF/2FhYP+YmJj/ysnJ/97e3v/q6ur/9vb2//r6+v/39/f/ + 7+/v/+/v7//q6ur/3t7e/8LCwv+hoaH/RERE/kZGRrFycnIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MjIyCzk5Ob5RUVH/aGho/4eHh/+urq7/qamp/5eWl/+Tk5P/oaGi/8bFxv/e3t7/wMDA/5OTk/9mZmT/ + Pz8+/ygnJ/8mJST/WVdX/6qtqv/K0cr/0NfR/8bNx/+/xsD/ztXQ/9Xd0//S3c//0uLR/8vgzf+92ML/ + sNC3/6bPsf+iz67/m8uo/5XIov+Rx5//ksmf/5HJpP+LyKP/h8ii/4vKpf+Tz6r/mNOu/57Ss/+o17n/ + t9zE/8Xizv/M4tT/zeDT/87az//M2M7/xtHL/8nT0P/P1tb/w8bH/4qIif9FREP/MTAv/zk5OP9NTEz/ + d3V2/66trv/V1NT/4+Li//Ly8v/6+vv/+/v7/+zs7P/p6en/4+Pj/9DQ0P/AwMD/iIiI/0FBQf9oaGhq + oKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj4AODg4fEpKSv9aWlr/enp6/56env+enp7/jY2N/5GRkf+qrKj/ + 1NXS/9PT0f+pqKb/cW9u/1VSVv8qJzL/Kyks/19eW/+0s67/zs7O/8nLx/+9wrf/vsa7/8bRx//D08r/ + u8zF/67Js/+iyKP/mMKZ/4y+iv+GwIT/h8WG/32/hP95voX/d8CG/3S/hP9uvoD/a71//2W5g/9duoT/ + Wr6F/17Aif9hwor/YsOJ/23Jj/9nwoj/asCJ/3bFk/+Cy53/i82f/6zQsv+21rz/wdrI/8fXz//EzMz/ + xs3M/9Tc1P/Nzcz/l5OU/0VBQv8tLiv/PkE8/1RXU/+TlJP/wL/A/93b3P/x7uz/9/X1//b29v/s7Oz/ + 6Ojo/97e3v/R0dH/urq6/3V1df9SUlLtfX19LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0vQkJC7FlZWf9ubm7/ + jo6O/56env+Hh4f/j4+P/7Gysf/Z3dj/xcfE/5OTkf9raWf/SEVE/yUiI/9JRk3/pqal/8bIwf/AxL3/ + wsfG/8TMyv+8zMP/sMay/6LBnv+TvY3/ibqD/4G2e/9+tnr/e7R8/3Ovev9op3X/XJ5v/02OY/9Hi2H/ + RYxk/0SOZv9Ej2n/RJFr/zuSbP8pkWn/HpJn/yGWav8gmmn/Ipxo/zWnbP9Cr3D/T7x2/1/Ig/9iy4b/ + ZsmE/3XGiv+Ay5H/kc+g/6HRsP+z1b//u9fD/7/Uwf/J0cj/0M7N/8XAwv9wcG//MDMv/zg8N/9HSEn/ + e3h9/7iztP/q5uH/8/Du//j4+P/39/f/7Ozs/+Tk5P/Z2dn/xsbG/6Wlpf9XV1f/dHR0tK+vrwgAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABAQECxUVFR/2ZmZv+AgID/jY2N/4+Pj/+Tk5P/srOy/9fW1/+ysbT/hYSG/2VkZv86Ojv/ + JyYn/3Jzb//Ex7n/w8nA/7S9uP+wwbX/rcKv/5u8of+HtZD/eKp6/3mucP93s2j/a6xY/2WaV/9ciVf/ + R3hP/0BsUf9Db1f/RHVf/0GDYf9AiWT/QY9p/0OUb/9GmnP/R5x3/0Widv8xoHP/IZ1v/x6db/8VnWz/ + Epxp/xWaZf8Tk1//Do9V/x+aXf8vqWX/PLNo/0fBa/9KwGb/Xch2/3PQif9+0JH/is2Y/63Ws/+71bz/ + w87B/83QzP/Ny8z/oJ2e/0lFRv81LjP/SUJI/3Brbf+zsaz/1dPR/+rq6v/6+vr/8/Pz/+jo6P/e3t7/ + 0NDQ/7q6uv+IiIj/Z2dn+qKiolYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7O0tISEj/Xl5e/3V1df+Tk5P/j4+P/4WFhf+5ubn/ + 1dXV/6+usP+Cf4X/XVxg/zAyNP9BRUX/mZ+e/8PIw/+7vbX/qbau/562pv+St5P/iLJ8/3qvaf9zrmT/ + a6Jh/1eIUf9HaUP/OVw7/zhXPv8+X0j/QnJP/0iFV/9TlF7/WJ1k/1Wmaf9Vq2//Va5z/1Wydf9Xt3j/ + WLl8/1S2gv8/s4D/LbF+/yexf/8jsX//H7B8/yKweP8grW7/F6Zf/x6nZP8RnVb/CplO/xamTv8gqlD/ + NbRZ/03Ba/9izXr/ctCE/4zSl/+i2KT/rtOt/7TLtP+9x73/yszH/7i1tP9lYWP/Lysv/z05O/9zcW3/ + o6Kg/87Ozv/w8PD/9fX1//Dw8P/q6ur/2tra/8vLy/+wsLD/cXFx/5GRkd7R0dEMAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09Cz4+PsNUVFT/ + a2tr/4uLi/+RkZH/jY2N/7W1tf/Ly8v/qqqq/3d2d/9YVFj/NjM3/1BUUf+qsq3/uMW8/6i1q/+jsKf/ + kK6U/4KwhP9zqWz/bKFZ/2aTVv9Lbkb/OE0y/y9HK/81VDH/PV47/0FzQ/9Kh03/UpRY/1igYP9cp2T/ + XKpr/16ydf9gtn3/YLmC/2C8hf9jwIf/ZcGK/13Ajv9Fv43/Mb6M/yW8iP8ivIX/Hrp+/yS9gP8iu3j/ + Irpz/ym8d/8ftWz/F69h/yKwYf8bplb/HaFR/yelVv86s1//T8Bp/2fNeP+B1IT/j9OM/53Qmv+r0Kn/ + tcyy/8DMu//Gz8X/gISD/y4uLv9APT3/aGdn/5ubm//S0tL/7+7u//X19f/t7e3/4uLi/9TU1P/BwcH/ + nJyc/3t7e//FxcVu2traAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAQEBAUEtLS/tmZmb/e3t7/5KSkv+Hh4f/np6e/9fX1/+lpaX/dnZ2/2JhYf83MzT/ + XV1b/7S7tP+4xbn/rb2t/5erlf+Jq4X/dqtu/12gU/9ZllH/SHFA/ytCJf8lOSL/KUgj/zNeK/9AdjL/ + SYM7/02SRP9SnlD/V6Vb/1usZf9fsmz/YrV1/2a6gP9lvoj/ZcCN/2jFkv9uyZb/csub/2rMnv9Qy53/ + NcmY/yXGkv8exIv/G8OF/yPFh/8jxIL/LMaI/zDHh/8nw3z/Ib9z/yK6cP8ftWf/JLNk/yiyYP8krFb/ + JatQ/0C9Wf9t13H/edZ1/4PRf/+S0JD/os+f/7HPr/+yybP/wc7F/46PkP8uKS7/Qj9B/21tbP+hoaH/ + 0NDQ/+3t7f/z8/P/6urq/93d3f/Jycn/ubm5/39/f/+qqqrZ1tbWEwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAHSEhIxFpaWv9ycnL/hYWF/4uLi/+TlZP/ + 1dbT/6mppv93d3X/aGVn/zs4Ov9lZ2H/trir/7nCq/+jt5v/jK6R/3Siev9qo1r/YZlU/0Z4Pf8hQBv/ + HCsZ/yREH/8tXyL/OG4p/0KAMv9JjTf/SZI7/06aRv9VpVX/Wa5g/2C4a/9iv3T/ZsSA/27Fi/9wx5P/ + b8mX/3HMnf90zp7/edCj/3PUrP9Z0q7/M8qe/yvKnv8ry57/KMuY/yrPlv8w0Jj/NtGZ/zfRlP8w0Ir/ + Ks6B/yHGeP8pyHf/MMZ1/y/Abv8tuWb/LLde/y6yUf9GtU//Y8Vb/3TRav951XL/gdJ5/5TRkP+gyqP/ + ssu2/8rTx/+TkYz/RENC/0ZHRv9tcG7/nZ+e/9PT0//08fP/7u3u/+bm5v/R0dH/xsbG/5iYmP+VlZX/ + 2traawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBB + T09P+GBgYP9/f3//i4uL/46Ojv/BxcD/u725/4GBfv9oZ2X/RkJE/2RgZP+6w7n/sbqq/6Gwlv+HqX7/ + Z59l/1aXU/9QiEP/LFIn/xksFv8bMxj/Jksj/ytlJv8udiT/N38r/z+KMv9HlTf/TZw+/1SjSf9cqln/ + Y7Bo/2q2dv9suYH/b7yN/3C8lf9wvp3/cMCi/3TEqf93x6v/eMiv/2vHsf9QxLH/NsCt/zDBrv8yxK// + MMSp/y7Kov890Kv/RNKp/0fUpP9A05n/ONOQ/zPUiP8y0oP/NdCA/zjMe/85yXP/NsZq/za7XP9HtVP/ + U7NL/1/BUv9n013/b9tl/3/YeP+Lzo//nsme/7TMqv/AyLb/jpGN/zM1NP9JTUr/dXl3/6inqP/f2tz/ + 9PPz/+np6f/Z2dn/0NDQ/6+vr/+RkZH/09PTzvLy8ggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABAQECjWlpa/21tbf+NjY3/jo6O/7Gxsf/DxMT/fn5//2ppa/9NTU// + Wltb/6yurf+st6//kKeZ/3mgg/9pnmj/YJ1N/0Z9L/8ePRr/EigQ/xg4Ff8hWBz/KWsh/yp4Iv8rgiX/ + N4st/0OTOP9Klz7/TplD/1OZTf9dmlv/Y5pn/2uhev9zpYr/eqiW/3axnf90t6X/dLus/3e/s/93w7j/ + d8W7/3DFvP9gw77/Sr67/z6+vP8/wL//Pb+6/zK+rf88wbH/Ssa3/07GsP9Jxab/Rcif/0DXmf861Y// + OtOG/z7Uf/881HX/OdJq/0DMX/9Xyl3/XsRU/1S2R/9NtET/WsZS/2nTY/9503X/idGB/5jHjf+vxLD/ + v8XC/319fP81NTT/WFdX/4GBgf+3t7f/7e3t//Dw7//m5ub/1dXV/8TExP+UlJT/wMDA8uzs7CYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxVERETzYmJi/3l5ef+IiIj/ + mZmZ/8/Pz/+Oi4//bGtw/1FRVv9QVFX/oqqk/7K+sf+QppX/daR3/2CkX/9Pkkn/NGQr/xUrDP8PIA3/ + GEAW/yJZG/8iaxn/JXgc/y6DI/84iCz/QIoz/0aJOv9Jhj//SoNC/1GFSv9dilf/Y5Jj/2ujef95spD/ + hbyf/4rHqv+LzLT/i8+8/4rSwf+J1MX/iNbI/4LUyP920sr/Ys/L/0rKx/9Bx8T/PcXA/z3EvP9Bxbv/ + S8i8/1TKvP9QxrH/S8Sq/0PCo/8/w5f/PsWH/0/Qiv9T1IL/R9Nt/0nSYv9d1GD/Y9BY/17FUP9Tu0z/ + SbhB/0zERP9k1Vv/c9pk/4jWev+Zyp7/q8Gv/8HJvf9sb2r/Q0FB/2RkZP+Kj4z/wsTD//Ly8v/w8PD/ + 3t7e/8rKyv+kpKT/rq6u99/f3zMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRWVISEj/bm5u/4GBgf+QkJD/urq6/62trf93dXX/ZmVo/0lKT/+IkYv/qLil/5euj/9unnL/ + XZpU/0qQN/8hWxb/DCEM/wwYEP8RPA7/HFYW/yNrGP8ufyD/L4Ah/zJ7Jv88ei7/O3Yv/z92NP9Kfz3/ + VIhI/2GWVP9xpWL/erNx/4HFhf+L0Z3/kNap/5nat/+d3cH/mt7G/5nfyf+W4Mz/leDO/47ezv+E3tL/ + ctzV/1rXz/9N08v/StPK/0jQyf9FzcP/R8vA/0nJvP9Jx7X/SMWw/1jFtv9IvaD/QruP/0W8hf9HvHf/ + Qr9o/0zPaP9n2m3/Z9Rc/2POVP9fy1T/U8FG/0W7Of9JxEH/WtRN/27YYf+B04D/lMqU/6/RrP+quqf/ + U1ZQ/0VFRf9rcG3/lJaV/9nZ2f/x8fH/5ubm/8vLy/+6urr/qqqq+tfX11v39/cAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVBD4+PrVWVlb/eXl5/42Njf+fn5//vb29/3x7e/9raWT/ + WllZ/21xcv+qt6v/lKeJ/4and/9UnlX/UoxM/yNKGf8JHQX/DxwK/xg8Fv8SWgz/Hm4T/yV6Fv8odxr/ + LW8g/zJuJv83cyr/PHox/0iIOv9YnEj/Z6xW/3G2X/96u2j/f71z/4fFiv+Oy6P/k86w/5fQuv+a08H/ + mdXH/5jWy/+V1s3/k9fO/5LX0v+H1tf/btDV/1LIzv89wsr/OcHL/zvEyv89xcj/RcfH/0jIwf9Qy8H/ + S8q7/zbAqv8xu53/M7mR/zG0f/88tnv/PLVx/z62aP9YyGf/a9Zi/23ZWf9l1VT/X8xM/1TAQv9Aujz/ + PsE6/1bUSv9s2mD/gdZ9/5LMkf+qyaf/kpqP/z09Pv9eYmH/eXt6/6ioqP/s7Oz/6enp/9XV1f/IyMj/ + qqqq/9TU1OPy8vIPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGHEBAQO5nZ2f/ + f39//5KSkv+2trb/mJiY/2ZmZf9hYFz/ZWRk/6Knpf+VqJT/gqR2/2ieV/9Glj7/KFEp/wgOBv8MIAf/ + E0QK/xtgEP8ichP/HHAP/x1uEf8eZRT/JmQc/zd3K/9Fjjb/UJlB/1ulS/9irFL/Yq5R/2SrU/9qp1j/ + baVi/3mufP+LvaH/k8Sy/53Nv/+h0sf/otXM/6TY0f+m29b/pdzY/6Xc2/+Z2t//gNTe/1/I1P9EwNH/ + PL7T/znAz/83vsz/Or3L/z27xv85ucD/K7Wy/x+5qP8ftqD/HK+M/x+sff8prnX/K61r/zSvZf9DtF3/ + W79g/2XJWv9n0Vf/X9FM/1fPRf9MwkP/PLU0/0fGPf9Z203/bNtj/4PVff+bz5j/scaw/3d7d/9FQ0T/ + cG9w/39/f//R0dH/7u7u/93d3f/Ly8v/s7Oz/83Nzf/w8PAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGVEVFRf9ubm7/g4OD/5qamv+6urr/d3d3/2JhYf9aWVj/g4aE/6Oupf+HpoT/ + aZ5g/0+TQf8taCD/CR4G/wkUBP8TOgb/EVkJ/xVrE/8eaQ//HGYP/x9oEv8qchz/NX0o/0GNM/9KmTr/ + TZk+/1KaRP9anUv/Xp9P/1+cT/9onFX/bp9f/3Kocv+Eu5n/i8Or/6LTxP+n18v/rt3U/7Xi3P+55uL/ + ueXj/7Lj4v+k4OX/j93o/2zR3P9Nx9f/PsTV/zW/z/8yvc3/MrrK/ze5yv86t8b/K6+4/yCtsf8bqKL/ + GqOQ/x2ggf8innL/I6Fo/yOiW/8wpVv/SrFh/1e6X/9jwlr/X89O/1XWRf9X0Ej/Sb06/z22MP9Eyzr/ + XdlR/3Paav+I04T/qtOr/5yomv9TTE//YmBh/21ubv+oqKj/6+vr/+Dg4P/Nzc3/vb29/8vLy//w8PAZ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHfkpKSv9zc3P/h4eH/7Kysv+VlZX/ + YWFh/2FhYP9lZWL/naid/46rj/9uoGz/TY5H/zV4K/8OJAb/BRYD/wswB/8ZVQz/GGQL/xdlD/8VYQ3/ + H2sS/yt3HP83gyf/Qo4y/0aTNv9EkTX/Ro83/0uOPP9Sk0H/XJpJ/2CaS/9nm1L/bqBd/3KlaP92qnr/ + jr6j/6nWyf+03c7/x+XV/9Xq4f/a7eP/1O3n/8Po6P+x5ej/l9/n/3HU4v9bzt3/ScnX/zPB0P8tu8v/ + L7nK/zW9zv81t8j/L7HC/x6otP8VoaT/FJ2W/xWYhf8Wk3L/GJNh/xmVVf8WklH/JppV/0muXP9iuVr/ + W7lM/1fCSf9Xzkn/S8w9/z/ALv8/uyv/TMs9/2PdWf9z1G7/mNaX/6/JrP96fXb/V1ZW/2JiYv+Dg4P/ + 09PT/+np6f/T09P/v7+//8rKyv/s7OwfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + RkZGf1RUVP99fX3/kpKS/7a2tv9xcXH/WVlZ/2JiYv+LjYf/mbKX/2uea/9NkEv/OH80/xRIDv8JDQP/ + CCkF/wpNCf8NXQb/EV8G/xlkC/8ebRb/Jncc/y9/If80hSP/OIgk/zqJKf9AjDH/S5I6/1KVPv9Tkz3/ + VpI+/1mSQf9kmU3/bJ9b/3WmaP98rHv/g7eV/6zXzP/A49X/1+zc/+Xv5f/p8uj/5fTt/9Tw8P+/6u7/ + nODl/3LU4/9m0+P/Vs/c/0DI2P89w9j/O7/S/ze+zv8xt8b/LbHB/ySqt/8epaz/GZ+e/xaZjf8Vk3n/ + GZBo/xqQWv8Yj1T/H4xO/zyWTv9cqFT/Yq9V/1yyUP9RwUX/S8w9/0fJNv9Dui3/OL0p/07aRv9p4mL/ + ht2B/6jZpP+crpj/WVtY/15dXv9qamr/sLCw/+zs7P/X19f/w8PD/8nJyf/m5uYrAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHf2JiYv+Hh4f/n5+f/6Ghof9cXFz/Xl5e/2tra/+cppn/ + faN5/1ibVf89iDn/JGAe/wYdA/8HHAL/DUMG/wtdB/8KXwj/FGcK/yBxDv8ecxT/JnsZ/y2BH/8xhCD/ + M4Qf/ziGJv9EizH/TJE4/1CSOf9SkDj/V5E8/1uSQf9mmU7/bJ5b/3embP+Ar4L/gbiW/67Zzv/J59z/ + 3+/h/+fx6P/r8+r/6/fw/+H18//P8PL/r+ju/3/a6P9p0+X/W9Dg/1PQ4/9TzOP/SsTW/z/Az/80u8j/ + LbTC/yeuvP8jqbP/HaOk/xadk/8VlYD/E49r/xWLW/8jkVb/OphX/1CaVv9Xm1D/XqJU/1umUv9NrEP/ + Sro//0rEPv9Gvzb/Mrkk/z7NM/9j6Fn/euVx/5DXiv+myqL/dXp0/19eX/9kZGT/ioqK/+Li4v/c3Nz/ + x8fH/8jIyP/g4OA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUlJf21tbf+Pj4// + p6en/4qKiv9XVlb/YWFh/3x8fP+Xp5P/ZpVi/0mVRP8xeyv/CzMH/wcQBP8EOwH/DFYC/w5lCf8SaRj/ + HHQY/yB8Dv8geRD/J30X/y2DHv8xhiL/NYgl/zyJKf9HizD/Sosx/0yLMf9RjTX/XJM//2OXSP9pm1P/ + cKFh/3updP+Asob/ib6g/7Tc0v/Q6t//4u/i/+ny6v/u9e3/7vfy/+r39f/e9fP/w+/z/5Tj8v9t1ur/ + W9Hi/1PP3f9Zzd//W8zf/0zH2P85v83/MrrH/yuzwf8nrrn/I6qt/xymnv8Zn4n/FJVz/xuSY/87nGL/ + V6Fk/2OkX/9goVj/VZpN/0+XR/9Pmkb/TaRE/0izP/9Bwzr/PMAx/ze7KP9W3Uf/depp/4TZfv+h1J3/ + maGY/15cXv9iYmL/bm5u/9DQ0P/k5OT/y8vL/8fHx//b29s+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAUFBQf3Jycv+QkJP/qKmn/3R2cv9UVlf/Y2Zm/4uSiv+AnX3/VZNL/zqLMv8cVRj/ + BB8C/w4wCf8FVgH/DWUE/xRvD/8Zdhv/F3sU/xh9DP8jghX/J4MZ/y6FH/8yhyP/Nogl/zqIJP9CiCj/ + SIss/06OMf9Ukjj/XZZB/2WaSv9qnlb/caRn/3utev+Bt43/hb+f/6rWyf/V7OL/5vHk/+zz7P/w9u// + 8fjy//L59f/r+PL/1PX3/5/o8/9s1+r/XNXn/1XR3f9g0t//adXo/1XO3v86xM//NL/K/zG5xf8utL7/ + KrC2/yGsp/8bo4v/Fpp1/x+Xaf9Tpm7/bq9s/2enX/9io1v/WZ9T/06XR/9PmEn/SphE/z+dO/82qDX/ + Q740/ze6I/8+xjH/a+hh/4Hjd/+a2JX/qcOm/2VqYv9gWl//X11g/7O1tP/q7Ov/zM3M/8nJyf/b29s+ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbf3R1df+RkZj/o6eh/2NlX/9VV1n/ + anJv/4ygif9olWb/RZI4/y1/Jv8INgr/Ay4D/wdNA/8IYgP/D2wL/xd4Ev8YfxH/FH8N/xZ+Df8ggBb/ + JYIZ/yyFHv8yiSP/NIgi/zqJIv9BiiX/SI0p/1CQL/9VlDf/W5hB/2SdTP9qoVr/cahs/3uwf/+CupL/ + hcKi/6fWx//X7OP/6fLn/+707f/x9/L/9Pn0//b69P/2+/T/3/n5/53l6/9l1uX/VdXk/1jV4P9p2eb/ + adfn/1PP3f88yNL/NsLM/za8yP82uMT/LrO6/x6rpv8bo4v/Gpx3/y2fcf9jr3j/dLFt/2usZf9jp1// + W6FU/1CbSv9ImEP/QpY+/z6VO/86kjn/OqUp/0PALv8wtib/XuFS/33rcP+U3Y3/qNaj/3mJdP9hVV7/ + WVZb/5Sclv/m6eb/zc3N/83Nzf/e3t48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X19ff3d3d/+Zm5//mZyX/1hYU/9ZW13/bXtx/4Gdfv9dklj/OYkw/xhsE/8COQT/BUMI/w9fDP8Pbw3/ + FXYS/xl9Ff8YgRT/FIAO/xd/Dv8ggRb/JIMX/ymFGv8xhx3/NYgf/zqKIf9Biyb/SI4t/1CSM/9Wljz/ + XJpG/2SeUf9po1//capw/3yxhP+DupL/hsOo/5TPw//G5tz/6PPm/+317P/w+PP/8fn0//b69f/6+/j/ + 7/v7/8n1+P9z3eb/WNbi/2HW4/9i2OX/V9bl/0jR4f85yNb/N8PQ/ze+yf82ucX/L7S8/yKurf8cp5f/ + JKJ+/02rev9ytXz/dLFw/2+tZ/9mqF//W6NX/1GdTP9ImEP/QZU9/zqSN/8zjzH/LYwm/zqmMf83syr/ + VdhB/33yav+P5Iz/qt+p/5Oljv9hWF7/U1FV/4CIgv/c3t3/z8/P/9DQ0P/g4OA3AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWVlf3t7e/+eoqb/jI2K/05MSP9hYmL/cYVz/3Kcbf9NjUP/ + LIAn/whZBv8GRwT/DlsN/xNyFv8VfRX/F4AW/xmCF/8YgxX/FoER/xmBEv8ggxb/JIQX/ymGGf8wiBz/ + Noof/zyMI/9Cjin/SZAv/1GUNv9Yl0D/XptJ/2WgVf9qpWP/cqt0/32zhv+Fu5T/hsOp/4zMwf+44dn/ + 5fTq/+v27f/w+PT/8fr2//b79v/7+/r/8/v8/8/19P+K5ej/ct7l/33h7f9z4O7/UdTf/0DP3P85ydj/ + OMXS/zi/y/82u8X/MLa9/yWwsf8krJ//OqyK/2Ozgf93tXn/dLFx/2+tZ/9lqF//XKRX/1OgT/9JmkX/ + QZU8/ziQNP8wjC3/NIo0/yV+I/8xoyb/S8kz/3z1Z/+I6Yj/puKm/6a+o/9iXmD/Tk5P/2xzbv/Y2dj/ + 09PT/9LS0v/h4eE0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2trf4CAgP+eo6b/ + f4B+/01IR/9oamf/co1x/2KZWf88iS7/IXof/wVWBf8LXgT/EXAQ/w19Ff8ShBX/FYMW/xeEF/8YhBb/ + GoQW/x2EF/8hhBj/JYUZ/yqHG/8wiR3/Nosg/zyNJP9Djyr/SpIx/1OVOP9amUH/YJ1M/2eiWP9spmX/ + c6x2/3+0if+Fu5f/hsKp/4nKvP+n3NT/2PLr/+f27//w+PP/8vr2//X79//6+/n/9fz7/9f39v+x8PP/ + nu3x/5rr8/+L5/T/Ztrl/0fS3v86y9n/OcfT/zjCzP83vcb/Mrm//yq0tv8tr6H/RK+J/2aze/95tXb/ + dLFv/2ytZv9kqV7/XKVX/1OgT/9LnEf/Qpc+/zqRN/8yjjD/Mos1/yiAKv8dhRn/Oasp/3XnY/+G6YT/ + oOKf/67Nq/9qamn/S0xN/11kYP/V1NX/2NfX/9XV1f/j4+MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcHBwf4ODg/+Xn6L/dnd2/1FJSv9wcW3/cJBu/1WVTP8xiCH/GXUa/wdhCP8XcQz/ + EnwP/wWAEP8OhBH/D4QR/xGEEv8WhRb/G4cY/x6IGv8hhhn/JYcb/yqJHP8wix7/Nowh/zyPJf9Dkiv/ + S5Qz/1OXOv9am0P/YJ9N/2ejWv9tqGj/dK54/3+1i/+FvJn/icSr/4jKu/+Z2NX/suPg/9/28P/y+fX/ + 8/v3//P89//5/Pf/9/37/+T7+v/N+Pf/tvLw/6jv8f+b6/L/e9/q/0/W3/88z9r/O8rV/zjFzv83wMf/ + MrzB/yu4uf80taf/TbWR/2y1fv94tHP/dbJv/2yvaP9jql//W6VX/1OiT/9Mnkj/RJpB/z2XO/82lDb/ + MJAu/y2OL/8aex3/I4Yc/2DHU/+S8I3/nuSd/7HVr/92eHX/SU1N/1FYVP/Py87/2tnZ/9fX1//k5OQu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0e4GBgf+boaT/bXJw/01KSv9tcGr/ + bpJo/0eRPv8thR//EnET/wptDv8TexH/DYEP/wmFEf8OhBL/D4UT/xGFFP8Whhj/G4ka/x6JG/8giBr/ + JIkc/ymLHf8vjB//NY4i/zyRJv9Dkyz/SpYz/1OZO/9ZnET/YKBP/2ilXP9tqWr/dK96/3+2jP+CvJr/ + hsKn/4zNv/+W2+D/nd7g/9Hx7P/y+fX/8/v3//L99//4/fb/+f76/+v8+f/b+fn/wfTy/6zx7/+p7vT/ + j+Xw/1ja3/890dr/PM7X/znIz/83w8j/Mr7C/yy6uv8wt6v/SbaV/2e0fv92s3L/dLJu/2uvZv9iql7/ + WqZW/1KjTv9Kn0f/RJxB/z+aPP83lzb/MJYt/yyTK/8ghib/Gncd/0GgPv+c85f/o+ie/7Tbsv97gnz/ + TU9O/1FTUP/DwsX/1tXW/9jY2Ojp6ekc+Pj4Afj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + eHh4N4KCgvukpqn/Zm5s/0JHR/9nbGT/a5Fj/zyONf8nfSD/Dm4M/wd1Df8IgBP/CoQV/xCKGf8Rhxj/ + E4gZ/xSIGf8XiBr/GYga/xyKG/8gix3/JI0d/ymOH/8vkCH/NZIj/zyTKP9Dli7/Spk1/1OcPf9Zn0b/ + YKJR/2inXf9trGv/dLF7/3+4jf+BvZr/hsSn/5PRxf+N2d//meDn/8Xt5//z+fX/9Pv4//L99//4/fb/ + /P75/+/9+P/i+vv/yPf5/63y8f+r7vP/nOnz/2Xf5P9C1dz/P9Da/z3L0v85xcr/M8HD/y29u/8subD/ + Qrab/2G0gP9zs3H/crNt/2mxZf9gq13/WKdW/1CkTP9JoUX/Q55A/z2cO/81mDX/L5Yv/y6YMf8kjir/ + IIQn/xt4Hv+G14P/sPCo/7fftf99iYH/TkxL/1NQTf/Fxsj/0tLT/9nZ2a/z8/MD+Pj4Bfj4+AIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAB4yMjMajo6b/aG9t/0RHRv9obGT/Z45g/zyQN/8bdhb/ + DXIO/wx8FP8OiBn/DokY/xGLGf8RiRj/EooZ/xSKGf8Xixn/GYsa/xyMG/8gjRz/JI4d/ymQHv8ukiD/ + NJQj/zyVKP9DmC3/Spo0/1KdPP9ZoEX/X6RQ/2aoXP9rrGr/cbF5/3y3i/+AvZn/hsOn/4jKu/+P2dr/ + kN7d/63n4//q+PT/9/r2//j8+f/4/fr/+f36//f++f/t/fn/2Pv4/7j08f+h7vD/juvz/2rg5f9G1d3/ + PdLb/znO0P80yMX/NcO//zXAuv8vvLP/Pbmh/1O0gv9osm7/b7Fm/2ivX/9hq1j/WqhR/0+jSP9HoEP/ + Qp9B/zucPP81mTf/Mpo0/y2XMP8nky3/JYws/w1sEP9MpUv/tvau/7vjuf+Cjob/R0VE/1FPS//Q0tT/ + 1tbX/97e3qrs7OwB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjWSin6L/ + cXNy/0NGRv9kaWH/YYpc/zaNM/8Pcg//DnkT/xCFGv8Rjh3/Eo8b/xOOGv8SjBr/E4wa/xWNG/8Xjhv/ + Go4c/x2PHf8hkB7/JZEf/ymSIP8vlCL/NZYl/zyYKv9Dmi//Spw1/1OfPP9ZokX/X6ZP/2WpW/9prGj/ + cLF4/3m3iP9+vZb/g8Kl/4XItf+R2Nb/kd7a/6bm5P/g9PL/9vn1//j7+f/5/Pr/+P36//n++f/z/fj/ + 4/z3/8T29P+g7/D/f+fq/2ff4P9T2N//SdPb/0LP0f88ysb/PcXB/z/CvP84v7f/Qb2m/1K2hv9ermX/ + Zqxa/2CpUv9Ypkr/U6RG/0uhQf9GoEH/QqBA/z2ePf82mzj/Mps0/zCbMv8kkiv/JZEt/xyFIv8Xehf/ + nuKX/8Dovv98h4D/QUA//1tZVv/S09X/19fY++Tk5HL29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIqJiw6knqLxgYGA/0NFRP9bYlr/XIZY/ymEKf8LdQ//EYQa/w+LHf8Pjxv/ + E5Ic/xSRGv8SkBv/E5Ac/xWRHP8Xkh3/GpIe/x2THv8glB//JJUg/ymWIf8umCP/NJkm/zubKv9DnDD/ + Sp42/1KgPf9Yo0X/XqdO/2SqWf9prWf/b7B2/3m2hf98vZT/gsKi/4TGsf+N1M7/lN7d/6Xm5f/Z9PP/ + 7/j2//T7+P/4/Pn/+v75//j++f/3/fn/7Pz6/8/3+P+n8PH/hOjq/2zi4v9k3OH/WNXZ/07R0v9Kzc3/ + TMnI/1DGwv9HxLn/S8Go/1q6if9WrFv/YatR/16pSv9VpUL/UaQ//0qgPP9Enzv/QJ87/z2fO/82nDf/ + MZky/y6aMf8qmzL/K5s0/yGQKf8OdxH/bLJl/8Tswv95hH3/NzY1/2VjYP/X2Nn/2dna8efn5y739/cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtpKqaj4+P/0RFRP9UW1L/ + WIVW/x16H/8NfBT/F44i/w2NHf8Iihf/E5Ib/xWTGv8Tkhv/FJIc/xaTHP8Ykx3/GpQd/x2UHv8hlR// + JZcg/ymXIf8umSP/NJsm/zucKv9Cni//SZ81/1GhPP9XpEP/XqdM/2SrVv9orWT/brBz/3e2gv97vpH/ + gsKg/4nHsf+Iz8X/mt/f/6bl5v/M8PD/5ff2//H7+f/4/fj/+v34//n9+v/7/Pr/8fv6/9X3+P+u8PH/ + j+vs/3nl5f9w3+H/Z9na/1nV1P9W0dD/XM/L/2HLwv9eyLb/YMOj/2O6gf9WqlL/YKpK/1ynQv9SpDr/ + SqE1/0afNf9BnjX/Pp83/zmdNf8ynDL/L5gu/zCdMf8voTb/K500/yCUKf8Zix7/Qog7/7zkuv9ueXL/ + NDMy/3l3c//d3+H/19fYyuvr6woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACzrK44m5qa+EdDSP9RVVH/T31Q/xV4Gf8OiBr/FZIj/w6PHf8KjRn/EZMc/xSUHf8TlBz/ + FJQc/xaVHf8YlR7/GpYe/x2XH/8hmCD/JZgh/ymaIv8umyT/NJwm/zqeKv9DoC//SKE1/0+iO/9WpEH/ + XadJ/2KqU/9nrmH/bLJv/3W2fv95vI3/gsKd/4rGrv+JzcD/mdzb/6nl6f+26ef/1/Xz/+z69v/3/PX/ + +v33//j8+f/5/Pr/8vv7/9f3+P+x7+3/mOrp/4vn6P+K5eb/f9/f/23Z1v9s1dD/ddHG/3/OvP93yaX/ + csOQ/2m3cP9bq0z/XalF/1WnPP9OpDT/R6Ev/0KgMP9AnzP/Pp80/zedMP8wmi3/Lpot/zOiNP8toTT/ + KZ00/yecM/8ili3/Jnwl/53MnP9iaWL/NzAz/5qXlf/e39/42dnacfDw8AYAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrq6cEq6qryFpQW/9NSU3/QG9C/xWEHP8OlBz/ + D5Qc/xCVHf8RlR7/EpUf/xOWH/8TmB7/FJge/xaYH/8YmR//Gpkg/x2aIf8gmyL/JJwi/yidJP8tniX/ + M58n/zihKv8/oi7/RqM0/02kOv9UpUD/WqhI/2CqUf9krV3/arJr/3O2e/93vIn/gMCZ/4rFq/+Gyrr/ + idPK/6Ti4/+p5OD/w+3q/+n59v/2+/L/+fz2//f8+f/2/Pv/7/v6/9j3+P+68PH/pOvr/5bm5f+Y4+L/ + luLi/4Xb2P9808b/Zr+Z/267if9ounX/X7Ri/2CvVP9frEn/WatB/0+oOv9KpjL/RaQu/z6hLf86oC7/ + PKAy/zmfMf8ynS7/MZ4w/zGhNP8xozj/M6M+/yqdOf8jlzT/G4gl/2WiZv9WVlD/OSwz/768u//Y2dfn + 39/eI/j4+AX4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + vry/a3tyfP88PT3/NWs6/xWJHf8PlR3/D5Ud/xCWHv8Rlh7/Epcf/xOYIP8SmR//E5kf/xWZIP8XmiD/ + GZoh/xybIv8fmyL/Ipwj/yadJP8rnib/MKAn/zahK/88oi7/Q6Qz/0qmOP9QqD//VqlH/12sUP9jrlv/ + a7Jn/3S2df92uoP/fL+S/4TEo/+FyLL/iM/B/5PX0v+a3d3/tOfp/9319P/1+/X/+Pz1//X7+P/d9PH/ + 2fT1/83x9f/B7vX/sent/6fm5/+f497/m+DZ/5XazP+DzKv/Zrl+/2e2cf9mtGP/ZLFY/1+uT/9brEb/ + VqpA/06oOf9IpjP/Q6Qv/z2hLP84nyz/N58t/zegL/8zny//MqEz/zOjN/80pTv/NaVA/y+hPv8qnTr/ + IpEt/zp8Pf84PTT/S0JH/97c3P/Y2daW4+TjCPj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAubi9HZ+aovA2PDn/K2gx/wyIFf8Plx7/EJge/xGZH/8SmR// + E5og/xSaIf8TmyH/FJsh/xWbIf8XnCL/Gpwj/xydI/8fnST/Ip4l/yafJv8qoCf/L6Ip/zWjLP86pC7/ + QKYz/0ioN/9Nqj7/VKxH/1quT/9gsVn/Z7Rk/3C4cf9zu37/eL6M/4DDnP+Ex6z/iMy7/4/TzP+T2Nj/ + p+Hh/8bp5P/v+fX/9vv3//L69//E6+L/suTe/6ng2v+y5eb/mdrR/5fbz/+P18T/fMyr/3XFmf9xv4f/ + cbt7/3C4cP9qtGD/ZLFW/16vTv9ZrUb/U6s//0ypOP9HpzP/QaUv/zyjLf84oi//NqIw/zakMv81ozT/ + NqU4/zimPf85qUH/O6pH/zenRf80pEL/Jp0y/y12M/8pMyf/gHt+/+fo59Pa3dsIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6A8PByLNIU0z/ + HGAk/wyQGP8Qmh7/EZof/xGbH/8SnCD/FJwg/xScIf8TniL/E54i/xWeI/8WniP/GJ8k/xufJf8eoCX/ + IaEm/yWiJ/8poyj/LaMq/zOlLf84pi//Pqcz/0WpOP9Lqz7/Ua1G/1ewTv9dslf/ZLVj/2y5bv9wvHv/ + db+I/33Dl/+Cx6b/h8u2/4/Rxv+U19L/ot3a/7jl3f/f8/D/7/n1//L69v/M8Oz/tOfk/6nh2/+g3NP/ + mdnM/43Vv/+L0LL/g8qk/3vElf92wIX/crt3/224bP9otV//YrNW/1ywTf9Xr0b/Uaw+/0qrOf9FqTT/ + P6Yw/zmkLf83pDD/N6Uy/zenNf82pzj/Oag9/z2pQv8/rEf/Q69O/0CtTv8+q0z/K6c5/y2ANP8uPy// + ure58ejo6TsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAMvK0F54h3//GWIj/xCbH/8QnB7/EZwf/xGdH/8SnSD/E54h/xSeIv8TnyT/ + E58k/xWfJf8XnyX/GaAm/xugJv8eoSf/IaIo/ySjKf8opCr/LaUr/zCmLf81pzD/O6g0/0KpOP9IrD3/ + T61E/1WwTP9as1X/YLVe/2m5af9svXb/c8CE/3vEkv9/x6H/hMqv/4zQv/+V1sv/odzV/7Lj3v/J7Of/ + 6fj0//H69f/N8e3/tern/6nk3v+f3dP/l9nI/4vTuf+Gzqv/gMmd/3nEj/9yv4D/brx0/2i5af9ktl3/ + YbRU/1uxTf9Vr0X/T60+/0mrOf9DqjT/PaYw/zekLf82pTH/N6c0/zeqN/83qzr/O6pA/0CrR/9Dr0z/ + SLJT/0axU/9Er1L/La48/y2FN/9ccF//zc7NfO3t7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xQ2qta/0KHoz/wybHP8ToSL/ + EqEi/xKhIv8ToSL/E6Ai/xShI/8ToCX/FKEl/xWhJf8XoSb/GaIm/xuiJv8doif/IKMn/yOkKP8npSn/ + K6Yq/zCnLP81qC//Oaky/0CrNv9GrDv/Ta5C/1OxSf9ZtFL/X7db/2a6Zf9qvXH/cMB+/3fEi/97x5n/ + gMqn/4nOt/+S1MH/m9rO/6bg2v+z5d7/2fTu/+358P/Q8uz/terl/6fj2P+c3c3/k9nB/4fTsv+BzqX/ + e8mY/3PEif9uv3v/a7xu/2S5Y/9htln/XrNR/1ixSv9TsEL/Ta48/0isN/9BqjP/Oqgv/zWnLf81pzD/ + N6k1/zmsO/87rT//QK1E/0OsR/9Is1L/TrZb/063Xv9Rt17/Na5E/yyPOP+RrpXw4ubkGQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACyt7KpNI4+/weaGf8UpCb/FKQm/xOjJf8SoyX/EqEj/xKhI/8UoiT/FaMk/xajJP8XoyX/ + GaMl/xqjJf8doyX/H6Qm/yKlJ/8mpin/Kqcr/y6oLf8zqS//N6sy/z2sNv9Erjv/Sq9A/1CxR/9WtFD/ + W7dZ/2O7ZP9ovm7/bcF5/3PEhv93yJP/fMuh/4TOsP+N07n/lNfF/5vd1P+o49v/wevf/+b37P/Q8ej/ + uOri/6jj0/+c3sf/ktq7/4XWrf+A0J//esqS/3PFg/9vwHX/bbxp/2e4Xv9htlX/XLRO/1WyRv9QsD// + S686/0WtNf8/rDH/OKst/zOrLf80rDD/Oaw3/z2tP/9BrUT/R7BH/0euSP9PtVn/VLZl/1u9bf9lw3H/ + RKtQ/yuYN/+axZ7U9PHzCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcq55SMow8/QibGf8RoSP/EaEj/xGhI/8RoSP/ + EqEj/xKiJP8Toyb/FKMm/xWkJv8WpCb/GKQn/xmkJ/8bpCf/HaUo/yGmKf8lpyv/KKgt/yypLv8xqjD/ + Nqsz/zyuNv9Crzr/SLA//02yRf9RtEz/VrhT/127XP9jvmf/asJz/3HGf/92yo3/fM2c/4LQp/+K07P/ + kda8/5jbx/+g4NH/rubZ/8Lu5f+67OX/quXc/6Hgzf+a3cH/lNq2/4rXq/+F0p7/gM6R/3bJgv9uw3P/ + aL5n/2G5XP9dtlL/WbRL/1KyRP9NsD7/SK85/0OuNv89rDP/N6sw/zOrLv81rDT/Oq09/z+vQ/9Er0j/ + S7VO/0u0Uf9StVz/WLZm/2bDdf9uynr/Rq9T/zCcPf+Qv5TB8u/xAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXrJoR + L5E85QSYF/8QoCL/EaEj/xKiJP8ToyX/FaQm/xWkJv8UpSj/FKUo/xWmKP8Wpij/GKYp/xmmKP8bpin/ + Hacp/yCoKv8jqSz/KKot/yurL/8vrDD/NK0y/zquNP9Arzf/RbE8/0qzQv9OtUj/UrdO/1m6Vv9fvWH/ + ZcFt/27Gef9zyof/es6V/37Rn/+F06v/itWz/5HYvP+V3MP/m+DM/53j0f+X4tD/leDM/5LdwP+P2rT/ + jdiq/4fWof+F05f/gtCN/3jLgf9uxHL/Zr9l/126W/9atlH/VrRJ/1CyQ/9JsD3/Ra85/0CuN/88rjT/ + Nq0y/zatNP87rzz/QLFF/0SzS/9JtlH/T7xX/1K5Wv9at2T/ZLpu/3nOhP970ob/S7FY/zaiRP+XxZy9 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALps8tAKWFf8SoiT/E6Ml/xWlJ/8Xpyn/Gagq/xmpK/8UqCn/ + Fagp/xWoKf8WqSn/GKkq/xmoKv8aqCr/Hakr/x+pLP8iqi3/Jqsu/ymrL/8trDD/Ma0y/zavNP88sDf/ + QLE7/0a0P/9KtkX/T7hM/1e9Vf9fwV//aMdr/3DKeP91zIP/e86P/37Rl/+A06H/gdSo/4fXsP+L2rf/ + kN3A/4/ewv+B3Lv/hN27/4fbs/+I2Kj/ideg/4TUl/+A0o//e86F/3HJef9ow2v/Yb9g/1m6V/9Wt07/ + UrVI/0y0Qv9Gsj7/QrI6/z6xN/87sDX/Oa83/z2xPv9DtEf/R7ZN/0u4Uv9Ou1f/Ub9d/1e9Yv9lvWz/ + dcF7/47blv+F1o//TLFb/zumSv+j06unAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHpgsegaXFv8VpSf/ + FqYo/xmpK/8brC3/Hq4v/x+vMP8TqCn/FKkq/xWpK/8Wqiv/F6or/xiqLP8ZqSv/G6os/x2qLP8gqy7/ + I6su/yasL/8qrTH/Lq4z/zOwNP84sTb/PLI5/0K0Pf9JuEP/Ur1M/13EVv9jyWD/a81r/3TPdv94z4D/ + etCH/3vUjP951pT/eteb/3/YpP+C2ar/htyy/4jdtv983bP/ft2y/3/aqP+B2J7/gtaV/3/Tjf960YX/ + dM58/23Jcv9mxGb/X8Bc/1e9U/9Tu0z/TrlH/0i5Qf9Etz3/QLU6/zyyN/86sDj/PbE+/0O0R/9It07/ + S7lT/027V/9PvVv/Tr9f/1jAZ/9wxHb/g8yH/53lo/+L15X/TK9b/z2oTf+v4biYAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF5EkPwqdHP8UqSf/GK4t/xurMf8mrDn/KbI7/ySzNv8aqzD/Gasw/xirLv8Xqyz/ + Fqwr/xerK/8Yqyv/Gqwr/xysLP8grC3/Iqwu/yWtL/8prTD/La4x/zCvMv80sDP/ObI2/z+0Ov9HuUL/ + UcFL/1vIVP9ezVr/Yc9f/2rQa/9y0Xb/c9J7/3HVff9v14H/cNiJ/3bakf9425j/fdyg/3/cpv993ar/ + e92o/3jZmv9315D/d9aK/3XUhP900n3/b9B1/2nNbP9ky2L/X8ha/1jEUv9QwUn/Sr9E/0W+QP9Buzz/ + P7c6/zuzOv87sjz/PrRC/0G1SP9EuE3/SbpT/068Wf9Svl7/U75j/13EbP92yoD/lM+Y/67ls/+F1pD/ + RLFW/0SmVf/B7shqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5EuGA2gIO0OqiP/ErMs/xysNv85r1D/ + ObNN/y+5Qf8rsUH/J7E9/yKxN/8crzL/GbAu/xevK/8WrSr/GK0q/xuuK/8drSz/IK0t/yOtLf8nri// + Kqww/y2oMv8vpTP/M6Y2/zutO/9DuEH/TcNI/1XIT/9TxlL/UcFS/1O/WP9Zv2L/XsFo/17Ca/9gxXD/ + Zst4/23Tgf9v1Yf/cNCN/27LkP9nyZH/csya/2nMiv9r0IL/bNR//2vVev9r1HX/Z9Bt/1/JZP9Ywlz/ + U75V/1G9T/9KvUf/Rb1B/0G9Pv89tzz/Oa08/zanO/80pjz/NKc+/zWsQf89s0f/RblR/1G9W/9awWP/ + Yb5r/2jJdP+A04v/qdKv/7zjw/9204T/OLFN/16qa/jg/OYpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKlPBQ2QG8cOpiP/C64k/xuyNf9Hwl3/Rr1Y/0DCUv85u03/NbpJ/y65Q/8otzz/I7Y3/x+zNP8asS7/ + HLAv/x2wLv8dry7/IK8v/yOvMP8lqTH/JZo0/yKGNv8gdzj/I3Y6/ymDPv8zm0D/QLRD/0m/SP9Er0n/ + OZFJ/zOASv80fU7/OH5R/zl/VP8+h1n/S55i/1y8bv9ixXb/Wa50/0uSb/8/g2z/Rot1/0Wdbv9bvXP/ + Z89z/2bTcP9gy2n/VbZg/0WcV/85h1D/NH5M/zSDSf83lUT/O6g//zu0Pf82pz7/LIw//yV4QP8jc0H/ + JHtA/yiRP/81qkT/Q7pS/1LAXf9dxGf/Y8Nu/2/Ke/+M1pf/suC5/7ruw/9uzXz/O6ZL/4PDjebb++IO + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOBIJAQoSP/C7Ek/xO1Lv9MzWT/XtBw/1TKZv9Hw1r/ + QsFW/zu/UP80u0n/L7pD/ym4Pv8ktzf/I7Y2/yK1NP8itDT/IrQy/yOxMf8gnDP/GHU//wxydv8Hh6j/ + B5C1/wqJpf8Wcmv/KH9C/zafQv8vikr/EYmc/wqQuP8KkLj/CpC5/wuRuf8Mkrv/H4eP/0aaXv9Ssmb/ + OZJ3/xWGpP8Mkb7/DY65/x2Gkf9KpmT/Xcln/1rKZP9Kqlr/MHdV/xh0gf8Mia3/CpC5/wuJrv8VdHr/ + JnVC/y6XPP8qkD3/E4B+/wiMsP8Hj7f/DIKc/x2EZv81pkj/R75W/1bFYv9hyWz/aMt1/37Pif+h26n/ + ve3E/67xuP9gxG//TqZb/6rdsbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGPP1cUoCf/ + Dbcm/wq3Jv9Cy1r/ct+E/2jQeP9XzWr/Uspm/0vHX/9DxFb/O8BQ/za/TP8xwUT/Lr9B/yq9Pv8mvDn/ + JLs2/yO4NP8YjDH/C4CF/wKs4v8JbX3/EVtY/w1pev8DrOL/DYWa/yR0QP8jbkD/DH+Z/wC+/f8LiK3/ + FlVb/xhZXP8SbYT/EY+t/zmMUv9JsVr/N4VV/xdqfv8Avv3/BqLV/x5eTf9EqVr/Vchb/0u6V/8ve1D/ + C5W8/wC9+/8Dq+H/C4Wo/wuDpf8Epdn/C4yn/yF1Pv8kiDr/Flc+/wSezP8Avv3/EWl8/yZ6SP87sk// + TMRb/1vLaP9mz3L/cNR9/5DZmv+3477/v/TH/5Hmn/9TvWP/drp+/8fqym8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG+8eR4bpS3/C7cl/wW7I/8xwUv/euKL/3vZif9q233/Zdh3/13Tb/9Tzmb/ + S8te/0XJWf88yFD/OMhM/zHHRf8qxD//JsM6/yC+M/8YjTT/EHyA/wlwfv8UZDv/H3dA/xZRQP8JfZv/ + Abby/xRhWf8cYD7/C32X/wC+/f8LgaD/IF1C/yh0Q/8hYUr/G4iH/zuZTP9Iu1H/OZRP/xhmcf8Avv3/ + B5vK/yNpSf9EtFH/TshR/z+pTv8cbWb/Abn2/wK07/8VT07/H2ZB/yJpQ/8WT0v/BZ7O/xRrWv8ghTj/ + FmI6/wSaxv8Avv3/E2h2/y+NTf9Dv1X/T8pg/1/QbP9q1Hb/dt2E/6Djqv/I587/vPPF/3PUgv9JuFr/ + m9Of6dfw1xYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpji5BK8X/wzEJ/8kuDz/ + atx8/4zkmf994oz/eN+O/2zbgv9k2nD/YNdv/1XNaf9IzV3/Q85X/zzMUP8zykj/LclB/ybCOv8npj// + HX9W/xNpUP8YZz//G2NC/xJOSv8Gkrv/AL79/w9obv8ZWjz/CnyW/wC+/f8KgKD/G1c//yNqQP8fd13/ + L4RD/0CxRv9Hw0r/OZtK/xhnbP8Avv3/B5rH/yZwRv9CuUj/SMdI/zadRv8Va27/AL37/wadzP8dY0D/ + LqQ9/zCqPf8gbz//CYWl/wxze/8afjf/E2g4/wSaxv8Avv3/EmV2/yp5T/8+qlf/UL5k/2XPdP9y1X7/ + hOCQ/63mtf/S7tf/re23/2DKb/9PuF//pt+shAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA8pUo8C6sX9grBG/8aui3/P8lS/5Dwn/+T3p7/i96g/4Lhl/933oT/ddt+/2fQdf9d1XD/ + V9Nq/03RYv9E0Fj/Ps1R/zrJTf8vsEb/IH9D/xFbVf8Ke5X/BprH/wKy6v8Avv3/Abbx/xJnW/8ZYjv/ + Cn2W/wC+/f8IiKv/EVJW/xFdZv8NkKr/LIc//z+7Qf9DxUT/NJtF/xZnav8Avv3/B5rG/yRwQf88uEH/ + QcVC/y+ZQv8Sa3D/AL79/waVwP8ecj3/L7Q5/y68N/8egTr/CH+W/wl4hf8VeTb/EGc3/wOaxv8Avv3/ + EWV7/xhbYf8mcGH/QIhh/2Kzdv9+0Yr/nOGl/7/qxf/H8s3/htiQ/1nBZv91w3/wxPLKKQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4y4YCKKY2rACzCf8QxiL/JLQ3/2jmfv+v6L// + n+ag/5jloP+R36r/gNyN/3fief9u3YD/aNt5/1/Ycv9V1Wj/UNVh/0jPW/85q1H/HXJe/wOt5P8Avv3/ + AL79/wGy7P8EnMn/DW95/x13O/8bcjn/CX2V/wC+/f8Dp9n/Bo+1/waVv/8LjKn/KIM7/zm4O/89wTz/ + MZk//xVnaP8Avv3/BpnG/yJvPf84tT3/OsA9/yuUPv8Qam//AL79/waQtf8ddjr/LLY2/yu9NP8chDf/ + CICV/wl4hf8TeDX/EGY4/wOaxv8Avv3/DniY/wmWxP8Dsuv/E4qt/0N7a/99xI7/rOWy/8b0y/+k563/ + aMh0/1SvYP+n266o4P/lBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKNKLg6uGPQHxBT/G7Yu/ynHPv+s67T/tPG6/6fdsP+o5bb/memj/4vokv+D4ZH/fN+L/3Pcg/9o23n/ + Y9lz/1nSav8/nlv/FYCS/wC+/f8HmMT/E1pj/xdRRf8VUkL/GWhB/yCPO/8aejj/CH6V/wC+/f8GgJ7/ + DkU7/xBNPf8Kg43/HHo3/ySbNP8opzT/Iow3/w9lZP8Avv3/BJnF/xhoOf8moDX/JqM4/x1/Ov8MZm3/ + AL79/wSPtP8Wdjb/IbUw/yG8L/8VgzT/BoCU/wZ3hP8PeDP/DmY4/wOaxv8Avv3/E2N4/xxGTv8Sepz/ + AL38/x9/oP90rI3/tOW9/7fvvv971ob/W75o/3/DiPLh9ucUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcsV5AjOuO5sEpxD/Ebok/w/AI/9gzmL/rfjA/7zsyv+26rP/ + ruyx/6Dnsf+W46D/kOOc/4fgk/983or/ddyD/2nUef9Ko2X/G32Q/wC+/f8QaH7/GlJI/x5oSf8UYVr/ + DIqW/xmBPf8Scjn/BX2V/wC+/f8Df53/B1A3/wheNf8HWUD/B1o4/wZ0WP8Hdkb/B2My/wRcYP8Avv3/ + AZjE/wVQNP8HbC//BYVs/wVUNf8DYGr/AL79/wKPtP8IbDH/DK0n/wy0Jv8Jei//A32T/wN0hP8IbTP/ + CV43/wOaxv8Avv3/E2N5/x1GUP8YaYT/AL79/xKRwf9vnIv/ruO4/5fkof9WvmT/bcF4+Lzpwnfw+/MA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHzCfCAtpzb3 + BbQS/xTFJv8Wuh//bt58/8P7zv/H7sr/uea+/7fuvv+p6rH/pOmt/5rnpf+P5Jr/iOKU/33eiv9iu3f/ + Nnps/weq3/8ImMb/GFJc/xhPUv8MfJz/CZO4/xtuQf8UYD3/B32Y/wC+/f8EgqL/B0M6/wdFOf8Dg6H/ + BFpi/wNxhf8EZHH/BUA3/wRaYv8Avv3/AZjE/wQ/N/8EQjj/ApG4/wRBOP8DZHH/AL79/wGYwv8GWzT/ + C5wp/wukKP8HZzL/An2X/wJ2jf8GUTb/CEo5/wOcyP8Avv3/FGR7/x1NW/8MlsT/AL79/x2Nt/95o5L/ + mNqk/2/RfP9SvGD/ldSeu+P86AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABnvmWMGawi/wy4If8JvBn/IL4g/43nl//b9Oj/0+3W/8T0x/+68MX/ + t/C7/63rq/+h6KP/muik/4/lnP9+1Ir/YKt5/zl4bv8Xiqv/Cp/P/wig0v8LmsX/GYSN/yh7Sv8Xe2z/ + CJG2/wSfzv8En87/A5/N/wKfzf8CoMz/BWFl/wRvfP8Cn8z/Ap7M/wGey/8Bnsv/AJ7L/wGezP8Bnsz/ + ApW+/wNXW/8ChKP/AZ7M/wKXv/8Ee2//CZEr/wmXKP8FfWD/ApO2/wKPsf8GWlT/B298/wWYxf8Gn9D/ + CKDR/wmg0/8Mn9P/IIuz/1SDgf+AvpP/d82C/1e8Y/92yYHpxPbMOAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC73b0bb8V33g+iGP8OtxP/ + Brsb/x+2Mf+n56D/6fzo/9bv4f/O7tP/y/LM/73su/+37rj/r+qz/6Dip/+Z4aL/itKW/3G2hf9WlHP/ + SIBp/z96Yv9AhGD/RZlg/0KlWv8zkVD/J3hK/yBtRf8dbEP/GWw//xVsO/8QdDb/D38y/w96Mv8NbjL/ + Cmgy/whnMP8FZS7/A2Us/wZmMP8IZzD/CGsw/whvLv8IbC//CGgv/wltL/8Jgij/CJ0h/wihIf8Iiij/ + CHMu/whwMP8QdzX/GnU+/yVvS/8ublT/NnRa/z12YP9QfnD/apeE/3Oyhf9nyXf/XsFp/3vCgPS04LpT + 5/vsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAsOy2PV29ZOIIsA7/DKcr/wqxGP8isx3/meGd/+b15//r8eX/3/jk/9H32//B7sn/ + wevC/7ztvf+s6rL/pOes/5ffof+H05T/fcuM/3THg/9wyH3/as14/2HMbv9TwmT/TLtd/0G1VP88slD/ + NrFJ/y2vQf8lsTn/IbQ2/xqtMP8XqS7/FKYs/w+lJ/8KpCP/BqMg/wmjI/8JpCL/CKUg/wilHv8HpB7/ + CKQe/w2lI/8LqB//C64e/wyxH/8PrSP/EKon/xKnK/8dqjT/LqxD/0OyVv9St2X/YLtx/2u+ef9zyYH/ + eNKH/2/Kev9hvm3/dL177KrerVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzjtSZDrUjODZkJ/waxF/8BqBH/ + H60g/4Tbiv/c9eb/7Pro/+v13//i9t7/0vXe/8Tv0f/B7cT/uuu9/6/otP+k5av/nOOk/5XgnP+N3JT/ + hdqN/3rWg/9u0nj/aNBy/1zKZ/9Vx2D/TMZY/0LCT/83wEX/Mr1B/yi6Of8kuDX/HrYw/xi2K/8StCT/ + DbMh/wqzHf8Ksxz/CLIZ/wexFv8FsBT/BrEV/w2yHP8OsRv/D7Ac/xKyH/8Ytib/HLcp/yG1Mf8uuj3/ + QsFP/1jIY/9mznH/dc99/3vRgf9y2nz/ZtVz/16+af9zwX7aks+YOQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACGvH8YOpw4pgaNCvwLpRf/AqUI/wutD/9gwGX/zfHO//r5+P/19PX/2Pvd/8320f/W7tb/ + zezP/8Lpxf+357v/sOS1/6ngrv+i3Kb/m9uf/5DWlP+E0on/fdGE/3LLef9qx3L/YMVq/1TAYP9JvlT/ + QrpP/zu6SP84uET/MLY+/yi0Nv8isjD/HLAr/xKvIv8RriD/Dqwc/wyqGf8JqBT/CqkU/wysGP8Oqhr/ + Eakc/xerIv8fsCn/JrEw/zS0QP9Bu0z/UsJc/2PIa/9ty3b/dsx9/3rQgf9ty3X/W7dl/Wi0cbuQzZkg + t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcK56CDiXM3ALjhT0B5wV/wqnCf8Onwv/ + RKxN/6bftP/p/PD/7Pfm/+r04f/o9Of/3/Pf/9Tv1v/K7Mz/wunG/7zlv/+14Lf/rt+x/6Lapf+X15v/ + kNWV/4fRjf+Azob/dMp9/2fFcf9bwGb/Vb5g/068VP9JuU//QrZI/zm0QP8ysDn/LK80/x2sKv8aqib/ + F6gj/xSlHv8Soxr/D6MY/wqnFv8NpBj/EqQb/xymJP8kqyv/Lq82/0O3TP9Qvln/XsNm/2vGcf9xxXb/ + ccl3/2vHcv9ksWn3baxziIjAjw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjmzgzGoQbwh2AGf0MnRD/ApcE/xegGf95x3n/0ejQ//n3+P/4/Pj/8Pfw/+bz5//c9N// + 0/TW/8zxzv/F7MX/vOe9/7Titf+s3q3/pdil/5janP+Q2ZX/hdOM/3rOgf9vyHb/acVx/1+9Y/9bu13/ + VLhX/0u0T/9BsEX/Oq0//yusNP8oqi//I6Yq/x+jJv8anx//Fp4b/w6lFv8QoRf/F6Ac/yGkKP8sqDH/ + O65A/1S4Wv9dvWH/ZcFq/2zDcP9twXL/ZLtr/lWqXdJYnV5AiLmMAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATIVKDyd3JXQHgAbpAosD/weaC/8Igwn/ + O5w5/5/Snf/j8+P/+Pv3//T08v/w9u7/6/rr/9/33v/V8tH/zOvI/8nrxv/D58D/tdqy/6vbq/+l2qf/ + nNOe/5LMlP+Kxoz/hcSJ/2+8df9nuW3/YLZl/1i0XP9TtFf/T7RT/z2pQf85qDz/NKY2/y+kL/8ooin/ + IqAk/xeeHv8anSH/IJom/ymcMP89qUT/ULJU/2K2Yv9kuGX/YbVk/2i6bP9kuGjuWqhgh2edbhYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAcgRwoCG0IoAaCCfgHkAv/BIUF/xSAFf9Dl0P/mdGX/97w2//3+vT//fT4//nu9v/z7PD/ + 6ezn/9/w4P/R79P/wOfE/8TgxP/D3cT/uNi5/6vRrf+dyp//lsaZ/4fMi/+AyYP/dMN3/2i9av9dtl7/ + VrNY/1exW/9OrFL/Q6dG/zijOf8vojL/K6Eu/x+SKP8gkCr/K5c0/zqjRf9CqE//SKlR/1OtVv9gsmL/ + Zaxo/FmZXLFlpGcxZ6xrAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5FCAQpqCy4DcAOqBn0G9AaEBf8Hgwb/ + EXoQ/zOCMf+Atn7/v+S9/+f55//3+/j/8fXy/+nv6v/i7eT/3+vh/8vkzf/C4sT/uuG+/7DgtP+k26n/ + mteh/57Ln/+dyZv/lMeT/4nBh/99unr/dbZy/2iyav9js2b/WK9b/0OkRv8pkiv/H4oh/zCSL/81lTT/ + PJs+/0ejSf9RrFX/WbBc/1mqW/hWnle0VZFVPmqXaQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQZxAECV8JMQZqBpUHcAXoBnAF/gNyBP8Hcwj/HH8d/06YT/98uH7/qtmr/9Xx1f/v+O3/ + 9fbz/+rv5v/l7uH/4e7e/9jp1f/J38n/wNjA/7nUtv+xz63/p8mh/5vElv+Uwo3/kMKJ/3bCdv9brFz/ + PpM+/yyGK/8piCj/Lo4r/zWRLP8/lzf/TZ5G/1agTv9QlknsSY9FpFKSUztQjlEGAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZxwbA1YEaANkAsEFdAb7 + B3YG/wVqBP8HaQf/GnMZ/zN+MP9WkVD/dahu/5/Dmv+v0Kv/vtu5/8jjw//M48b/y+HF/7Tgsf+p2qb/ + mc+V/4C9fP9nqWL/U5lO/yJ+If8fehz/IHsc/yZ/If8vhij/NIwu/zSNM/9AkD/8Q4hBzUaBQXVVikwg + Wo9TAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUgCF8GagZlAq4EaADiB2sC/AJoAP8AZAD/BGgD/wpmCf8MaQz/ + EXER/xh1Gf8edR7/H3Me/yJ4I/8fdR//F3EX/xJvEP8QcA3/D3MN/xF7Dv8WexH/HHwW/yN8HP4sfSHl + M4Mrtit/M3Ukcy0mLnQ2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJAAIATwAS + CF0INgJcAWMBWwCbAFsAvgFgAd4BXwHrAV0B8gFcAfgBXwH8AmIC/gNlAv8DZAH8AmMB+QVlAvMMagbs + D20K4QhjA8MQaQmfHXMWaiR3Hz0YZxETDF0GBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVeFAcRWxAYClcJJgVVBTICVQI6 + A1cEPwZYAz8HVwM7ClkGMxBcCygZYhUaHmcaCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////// + ////////////////////////////////+AAAP///////////wAAAB//////////+AAAAAH/////////w + AAAAAB/////////gAAAAAAf///////+AAAAAAAH///////4AAAAAAAD///////wAAAAAAAA///////gA + AAAAAAAf/////+AAAAAAAAAH/////8AAAAAAAAAH/////4AAAAAAAAAB/////wAAAAAAAAAA/////gAA + AAAAAAAAf////AAAAAAAAAAAf///+AAAAAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAD///4AAA + AAAAAAAAB///wAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAAAAAAAAAAAf//gAAAAAAAAAAAAf//AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAH/+AAAAAAAAAAAAAH/8AAAAAAAAAAAAAH/8AAAAAAAAAAAAAD/8AAAA + AAAAAAAAAD/4AAAAAAAAAAAAAD/4AAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAAAAAAAAA/4AAAAAAAAAAAAAB/4AAAA + AAAAAAAAAB/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAB/+AAAAAAAAAAAAAD/+AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAf//AAAAAAAAAAAAAf//AAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAA + AAAAAAAAA///gAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAA + AAAAAAAAB///wAAAAAAAAAAAB///4AAAAAAAAAAAD///4AAAAAAAAAAAD///4AAAAAAAAAAAD///8AAA + AAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAH///+AAAAAAAAAAAP///+AAAAAAAAAAAP////AAA + AAAAAAAAf////gAAAAAAAAAA/////gAAAAAAAAAA/////wAAAAAAAAAD/////4AAAAAAAAAH/////8AA + AAAAAAAH/////+AAAAAAAAAf//////gAAAAAAAA///////wAAAAAAAD///////8AAAAAAAH///////+A + AAAAAAf////////gAAAAAB/////////8AAAAAH//////////gAAAA///////////4AAAH/////////// + /4AH//////////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAA + AAAAAABAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkpKED09PSY1NTU2 + LS0tPi0tLT06OjozS0tLIVhYWAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAPJSUlTiQkJIwjIyPA + IyMj6SwsLP84ODj/QEBA/0dHR/9FRUX/Ojo6/ywsLP8nJyf8Jycn4SwsLLMqKip9Ojo6PVZWVgYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpChkZGVksLCy1 + Nzc39lBQUP9jY2P/c3Nz/4KCgv+Li4v/k5OT/5iYmP+ZmZn/nZ2d/6Kiov+jo6P/np6e/5qamv+Dg4P/ + Xl5e/0VFRf8pKSntJSUlnzY2NkFXV1cDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4U + ICAggjQ0NOpTU1P/b29v/3Z2dv9/f3//h4eH/5CQkP+dnZ3/paWl/7CwsP+6urr/wMDA/8DAwP/AwMD/ + wMDA/8DAwP+6urr/tLS0/7W1tf+qqqr/oqKi/3p6ev9AQED/JSUl1ScnJ2RPT08HAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACYmJgooKCh7PDw88WRkZP9ubm7/d3d3/4eHh/+RkZH/q6ur/8nJyf/e3t7/7Ozs//Ly8v/39/f/ + +/v7//v7+//6+vr/+fn5//n5+f/x8fH/7+/v/+np6f/g4OD/1dXV/8PDw/+6urr/r6+v/5SUlP9OTk7/ + IyMj3CwsLFhEREQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACIiIkU9PT3bXV1d/2VlZf9tbW3/h4eH/62trf/R0dH/7+/v//v7+//+/v7/ + +/v7//39/f/+/v7//v7+//39/f/9/f3//f39//7+/v///////v7+///////+/v7//v7+//n5+f/y8vL/ + 5ubm/9DQ0P/BwcH/tLS0/5OTk/9ISEj/IiIivCwsLCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjBzMzM49RUVH8ZmZm/29vb/+Hh4f/ubm5/9zc3P/z8/P/ + +Pj4//b29v/y8vL/7Ozs/+fn5//k5OT/5OTk/+bm5v/n5+f/6+vr/+7u7v/09PT/+fn5//n5+f/9/f3/ + /v7+//7+/v/7+/v/+/v7//z8/P/5+fn/8fHx/9vb2/+/v7//sbGx/4GBgf8xMTHyIiIiYAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpGUBAQMRZWVn/YWFh/3t7e/+srKz/ + 39/f/+7u7v/s7Oz/4ODg/87Ozv/Hx8f/yMjI/8jIyP/Ozs7/1NTU/9jY2P/e3t7/5OTk/+np6f/t7e3/ + 8fHx//X19f/29vb//Pz8//7+/v/8/Pz/+/v7//39/f/8/Pz//v7+//z8/P/6+vr/6urq/9XV1f+6urr/ + oaGh/0tLS/8jIyOXNTU1BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExJ0ZGRt5iYmL/ + aWlp/5aWlv/MzMz/5ubm/9ra2v/IyMj/ubm5/7a2tv+9vb3/xcXF/83Nzf/b29v/3Nzc/9ra2v/c3Nz/ + 29vb/9ra2v/W1tb/1NTU/9bW1v/Y2Nj/39/f/9/f3//h4eH/6urq//Pz8//8/Pz//v7+//39/f/4+Pj/ + +/v7//z8/P/6+vr/5eXl/8jIyP+2trb/YmJi/yEhIbgxMTENAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MTExKklJSeZcXFz/cnJy/62trf/d3d3/0dHR/7m4uP+pqaj/r6+v/7q6uv/Ozs7/2NjY/9ra2v/P0ND/ + t7e3/5ydnv+Fh4j/dXh6/2lsbv9cX2H/WVxf/11hY/9obG3/c3V2/4GBgf+RkpL/q6ys/8HDw//V1tb/ + 39/g/+np6v/y8vL//Pz8//7+/v/8/Pz/+fn5//b29v/p6en/1tbW/7i4uP9tbW3/IyMjwkRERA4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAOzs7IEtLS+NdXV3/eHh4/8DAwP/S0tL/tLS0/6Wlpf+rqqr/t7e3/9jY2P/g39// + xcXF/5ydnf9tb3D/UlRW/zo7QP8yMzr/MDM6/y00Of8vNj3/MztC/zc9RP8vOD7/Mzo//zw+Qf8/P0H/ + Pz9C/zg+RP88RU7/WmJn/4OJiv+1uLf/2NrX/+Dg4P/w8PD/+vr6//r6+v/19fX/9fX1//X19f/Y2Nj/ + vb29/3Nzc/8nJye8TU1NBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyEEJCQtNbW1v/goKC/8DAwP+/v7//nJyc/52dnf+1tLT/ + 19bW/9HR0f+kpKP/bGxr/0NDQ/8pKiv/MzU1/09RT/91d3X/l5mX/6+1sv+3w7//vsrH/8bRzv/J0tD/ + xs/O/7/Ix/+8xMP/rLOz/5afnf9tfXv/PFRS/yQ0Ov8gLTT/OEBF/2Zoa/+en5//0dHR/+Tj4//v7u7/ + +vr6//n5+f/u7u7/8vLy/97e3v+6urr/bGxs/zExMaFsbGwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAjw8PK1dXV3/fHx8/7m5uf+np6f/ + j4+P/6Wlpf/T09P/0tLS/6Cgn/9iYWH/OTg3/ycpJf9UWFT/mJyZ/8XHx//RztT/0dPW/9HX1//R2Nj/ + 1tzc/9jf3P/X4dv/2N/d/9ff4P/W3t//1N3e/9PZ2//W2Nv/0tTV/9HQ0f+6wsH/j5ud/09bYP84PEL/ + PDs8/2FgYP+bmpr/0tLS/+np6f/29vb/+Pj4//Ly8v/s7Oz/3Nzc/7q6uv9WVlb/REREbwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3N2pUVFT/ + eXl5/62trf+hoaH/lZWV/7Kxsv/Z2dn/ra2t/2xsa/83Nzb/Li0t/3Z3df+4vrj/z9XQ/8PKxP/P1s// + 0tzS/8/g0v/D3Mn/tda+/6/Uuf+n0LH/os+s/6LQsP+cz7H/nNGy/6XWuP+u2sD/u97I/8jg0P/Q4Nb/ + x9PJ/8vWz//P2NT/usDB/3x7fP88Ojr/PDw7/2ZmZv+zsrP/3t7e//Hy8f/5+fr/8fHx/+np6f/S0tL/ + rq6u/0pKSvhpaWkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADg4OCRJSUnzZmZm/5iYmP+Tk5P/k5OT/8HEv//Ky8j/jYuK/09MTv8uKzb/cnFt/7/Au//KzMv/ + v8a7/77Mvv+1y7r/pcSq/5bDmP+Kv4r/gL+B/3a5ff9ss3z/aLR8/2Kzef9csHv/TrB8/061gP9SuoL/ + XcCF/2HAgv9vx43/ec2V/5bNpP+s1bX/vtfH/8POy//K1sz/ycjG/3hzdf80NjP/RkpF/42Ojv/Mysv/ + 8u7s//j4+P/t7e3/4uLi/87Ozv+Wlpb/WFhY0Z6engYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0OzXl5e/4GBgf+Tk5P/k5OT/8bGx/+2t7j/dnZ3/zw8PP9JSEb/ + sLOq/8DHwf+0wrf/q8Kx/5K5m/+Csn3/ebRq/22nXf9hk17/T4Bc/0p6YP9BfmH/PoVi/z+Mav9Dk3D/ + QJly/yeYbf8al2v/EZdn/xeYZP8dmWD/LKRk/0C0b/9QwXL/W8Rz/3jOjf+N0p7/rda0/77Qvv/Q0s// + rq2u/09NTP88Njz/dXBz/8vIxP/p6en/+Pj4/+np6f/Z2dn/u7u7/3Fxcf+KiopzAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDxGUFBQ/3R0dP+Tk5P/jo6O/8fHx/+sq6z/ + cGxy/zg5O/9vdXT/u8K9/6+2rv+btaL/iLOD/3msZ/9qnl3/UHtK/z1bO/84XD7/Qm5M/0uIV/9Xm2D/ + WKdq/1ivdP9YtHj/Wrp8/1i6g/87tYL/KLSB/yKzf/8js3v/H7Bt/yCtZ/8RoVj/FqVS/x+nUP8+t2H/ + Xcl1/33Qi/+d1p7/rc6s/7vJuv/Cw73/bmxt/zY0Nv9wbmv/uLi4/+7u7v/z8/P/6Ojo/9DQ0P+np6f/ + f39/8M7OzhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKSkoBRkZGyGZmZv+Li4v/ + iIiI/8TExP+kpKT/bWxt/z46O/+IjYj/uca7/56vnv+Nrov/aqVk/12VU/9BYjj/KUAn/y9PKP9BczX/ + SodB/1KcUf9aqGL/X7Bs/2K2e/9kvIf/ZcGO/23HlP9qyZn/R8iZ/yjEkf8dwof/IcKE/yLCf/8txIP/ + I792/yK5bv8hsmP/JKxc/yirVf9DvV7/ddZ2/4bSgv+c0Zn/sMyt/77Pv/+EiIf/NTA0/2xsbP+5uLj/ + 6+vr/+/v7//e3t7/xsbG/4qKiv+ysrKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBAQ1dXV/94eHj/i4uL/7GzsP+trqr/cW9u/0hER/+PlIr/t7+o/5aykP9vonb/YpxU/0BrOP8dNBn/ + JEUh/zBoJP9AfzD/SZE3/06bQ/9YqVj/YLZr/2TAev9txIv/ccaX/3LKn/92zaL/dNCs/03Nqv8uyKL/ + Lcqh/yvNmv820p3/OtOY/zLSi/8ny33/Lcp5/zLEdP8wvGj/MLZY/0u1UP9rymD/dddt/4rTg/+fyqP/ + wNC9/5GRif88Pz3/b3Nw/7u8vP/x7vD/6Ojo/9DQ0P+rq6v/pqam8fPz8xEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEhISLJmZmb/jo6O/52dnf+5urn/dXV1/05OT/+Hh4f/rbmw/4ekjf9sn2b/ + UY09/yRGHv8WLxP/IlYd/ytwJP8ugSb/P480/0qYPv9SnEr/Xp9e/2qkdv90qov/dbGZ/3K4pf90vq7/ + d8S2/3DEuP9UwLn/O724/zvAu/8zwK3/Qcay/0zJr/9HyKL/P9SX/zjUiv870oD/O9Jy/zvKYv9Vw1j/ + V7pL/1W/Tf9t1Gb/gtF//5rJkP+3xbf/f4B//0FBQP+AgID/0M/Q//Dw7//f39//xMTE/5ycnP/i4uJe + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKShlOTk76dXV1/4uLi//CwsL/f32A/1ZWW/9yeHb/ + rbqr/4Gjhf9go1r/PXs2/xYsEP8RLg//IFga/yZ0G/8tgCL/PIUv/0KEN/9Jgj//UYVJ/2OSW/9up3b/ + gb6X/47Lq/+R07r/j9bC/43ZyP+I2cr/d9bO/1XQy/9Fy8X/QcnB/0LHvP9Oyb3/Tsew/0zEq/8/wJT/ + SMeI/1DPe/9J0mX/YtVh/2DKU/9UvUz/SL4//2HUVv992G7/lsmb/7nJtv9rbmj/VVRU/4yRjv/i4uL/ + 7u7u/8/Pz/+lpaX/x8fHdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBvXV1d/4WFhf+np6f/ + mpqZ/2tpZ/9dX2L/orCh/42ogP9Zm1n/OWss/wwlB/8TKxL/FVgO/yN0Fv8seR7/MXEk/zh0LP9Cfzb/ + WJdI/2utW/98uWv/hcSE/4/Ppf+X07b/m9fD/5nZyv+V2c3/kdnQ/4HX1v9aztD/QMfL/z/Hyv9Cycf/ + SMnB/0zJvf9BwrD/Obyb/zi4hv89tXb/Prpo/2LQaf9r1ln/YtFS/1PBQf9Cvjz/VdFK/3XYbf+Vz5P/ + p76k/0pLSv9na2n/p6en/+7u7v/X19f/vLy8/8TExNPy8vIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCvm9vb/+Ojo7/tLS0/2trav9cXFn/mJya/42nif9onln/OX0y/wwXCv8OLwf/F14P/yFwEf8caxD/ + ImgX/zV3Kf9JlDr/WKJI/2GoUf9hp1H/a6NZ/3Wqc/+Lv6T/nMy9/6PUyf+n2dL/q97a/6je3P+X2+H/ + as7Z/0TC1P85wND/N77N/zu7yP83t7//IbSs/x2wnP8dqYH/KKpy/y+sZP9HtGD/X8Fd/2fPV/9W0kX/ + S8FA/0K8N/9X2k3/e9dz/5/RnP+Rm5H/UU1Q/3d3d//U1NT/4uLi/8XFxf/ExMT/8fHxEAAAAAAAAAAA + AAAAAAAAAAAAAAAAampqAUhISPd2dnb/oqKi/46Ojv9hYWH/cHFu/5itmf9un2r/QIM2/xArCf8JIgX/ + GFQK/xdmD/8XYw3/JnEX/zeCJ/9FkTb/RpM3/0qQO/9WlkX/YJxN/2mcVf9wpGf/ebCG/6XSxP+03s// + yufe/9Ds5P/C6Of/qOPn/3rX5P9Ty9r/N8LR/y67zP8zusz/NrbH/yKrtv8WoaD/F5uI/xmVbv8bmFn/ + IJhU/0WuXP9hu1b/V8VJ/1XOR/9BwDH/QsEx/2LbWP+B1H3/qcio/2VkYv9lZWX/oKCg/+jo6P/Nzc3/ + xcXF/+3t7RMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/hYWF/6mpqf9iYmL/ZGRk/5agk/9woG7/ + RYtC/xhME/8JFwT/CkoI/w1eBv8ZZQr/IHEY/y1+IP80hSH/OIcm/0SOM/9RlT7/U5I9/1iRP/9mmlD/ + c6Rl/36ugv+gzrz/yOfY/+Pv5P/q8+r/3PPw/7zp7f9/2OT/ZNLj/0nM3P9CxNn/Or/P/zG3xf8nrbv/ + HqWr/xibk/8Wknb/GI5d/xyPU/85lE7/XKZT/1+vVP9Ov0P/Sck6/0G5LP9C0Dj/beNm/5zbl/+OoIv/ + Wlla/3Nzc//d3d3/0tLS/8bGxv/k5OQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/5OTk/+ZmZn/ + Wlpa/3Fxcf+Oo4r/UpZN/ytvJf8IGwX/BzoC/w1gB/8SaBX/H3gQ/yF4Ev8rgRz/MoYi/zqIJ/9HjDH/ + TIwz/1SPOP9glUT/aptV/3enbf+BtIv/ptLD/9Tr4P/n8ef/7fXt/+n39P/V8vL/m+Tx/2jU5/9Uz9// + V8ze/03H2P83vcr/K7TB/ySstf8cpJ//F5qC/xeQZf88m2D/XKFe/1yeVP9Tmkv/TqFE/0q0QP9Bwjf/ + OL4q/2HkVP+D3Xz/o8qg/2hmaP9hYWH/vLy8/9vb2//Gxsb/3NzcKAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGlpaf+Xl5r/g4WA/1hbXP+BioD/b5hp/z2MM/8QPA7/CTMG/wdcAv8Tbw3/GHoX/xZ9Df8jgRb/ + LIUe/zOIJP85iCT/Q4oo/02OL/9Wkzn/Y5pI/2ygW/94rHf/g7qT/53PvP/b7uP/7PPq//H38f/z+fT/ + 6vn0/6zq8v9l1uj/V9Pg/2bV5P9b0OH/OcTP/zO7x/8vtL7/I62q/xmhhP8emWz/X6xx/2qqY/9hpFv/ + UJlK/0yYRv9Bmj3/OaU2/z+/KP9FzDr/e+dw/5/Ymv98inn/XVZc/5OWlP/i5OL/ycnJ/9zc3CkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABubm7/nZ+h/2xuaP9bX2D/f5d+/1iRUv8keR3/AzgF/wpTCf8ObQz/ + F3oU/xeAEv8Vfw3/IYEW/ymEGv8yiB//OIkh/0OMJ/9OkTH/V5Y9/2KdTf9rpGL/ea9+/4S8l/+Tzbz/ + 1Ovh/+316//x+PP/9vr1//f7+P/J9Pf/Z9rm/1vV4f9j2eb/UNLh/znH1P83v8r/NbjD/yWvr/8cpI3/ + OqV4/3CzeP9vrmj/Y6de/1OeTv9Gl0L/PJQ5/zOPMP85pSz/N7gq/3rxZ/+X4pT/mLKT/15VXf90enf/ + 293b/83Nzf/f398mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1/5+jpf9ZV1T/ZGpm/3Kabv9BiTf/ + EGMO/wlSB/8RcBT/FX8W/xmCF/8YgxX/GYIT/yGDF/8ohRn/MYgd/zuLI/9Ejyr/T5M1/1qZQv9kn1P/ + bKdn/3uxgv+GvZn/icm7/8Lm3v/p9e3/8Pj0//T79v/6+/r/2/f3/43m6/+B4uz/cN/s/0XR3f85yNf/ + OMHN/zW7xP8ps7X/Kqya/1mxgP93tHb/cK5p/2OnXf9VoVH/SJlD/zqRN/8wjC//K4Er/zGlJP9t5lf/ + jOaN/6zNqP9fXF7/XGJf/9nZ2f/R0dH/4eHhIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fP+Um5z/ + V1JR/252bf9hmFr/L4Uj/wpjDP8VcAv/Cn8R/w+EE/8ShBP/GIUX/x2HGf8ihhn/KYgc/zKLH/87jiT/ + RZIt/1GWOP9bm0X/ZqJW/26pa/98s4b/hr6d/4jIt/+j3Nj/2fPt//L59f/z/Pf/+fz4/+f7+v/C9fb/ + qO/x/5Dn8P9X1+H/O83Z/znFz/82vsX/Lbi6/zizoP9ktYH/eLRz/26vaf9iqV3/VaJR/0qdRv8+ljv/ + NJEz/y2MLv8afRn/Vr9J/5Hrjv+t2Kv/aWpp/01TUP/W09X/1dXV/+Tk5B8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAB9fX3ylJmb/05PTv9ud2n/UJRI/yZ/Hf8JbQ3/D30R/wuGE/8PhRT/EoYW/xeHGf8ciRv/ + IYkb/yiLHf8wjiD/OpEm/0WVLv9RmTn/W55H/2alWf9uq27/fLWI/4O+nv+My7n/ldzi/8Dr5//z+fb/ + 8vz3//n99//w/fn/1/j5/7Hy8P+m7PT/ad7k/z7S2v87ytL/N8LH/y68vP80t6j/X7WE/3Wzcf9tsWj/ + X6pc/1OkUP9In0X/P5s9/zSWNP8tlSz/H4Ql/y+ML/+c7Zf/sd+u/291cP9OT0z/ysrM/9TU1OPq6uoO + +Pj4AgAAAAAAAAAAAAAAAAAAAAAAAAAAiIiImZiam/9HTUv/aXRl/0mTQ/8adRX/C3gQ/w2HGP8Qihj/ + EYkY/xSKGf8Xihr/G4sb/yGNHP8ojx7/MJEh/zqUJ/9FmC//UJw6/1uhSP9lp1n/ba1u/3q2h/+Cv57/ + icm3/4/b3v+p5eH/8Pj1//b8+P/5/fn/9v75/+X8+v+89fP/ou3y/3Xj6v9D1N3/O87U/zbGxf8zwLz/ + Mbqv/1G1if9tsm3/a7Bj/1+qWP9SpEz/RqBD/z6dPf80mTX/L5gx/yeRLf8Vdhn/eMp1/7nntf9xeXT/ + S0lG/9PU1v/W1tbH7+/vAfj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjDObmZv/S05O/2NwYP9AjTz/ + DnQQ/xCEGv8Rjx3/E48a/xKNGv8Vjhv/GI8c/xyQHf8hkR7/KJMg/zCVI/86mCn/RZsx/1CfO/9ao0f/ + ZKlY/2qtbP93tYT/f76Z/4TGsP+R2tf/n+Th/+X28//3+vj/+f35//n++f/x/fj/z/j2/5nu7/9s4eL/ + Vdjf/0fR1P9Aycf/Q8O//zzAtf9QuY//X61g/2KqUv9Wpkf/TaJB/0WgP/8+nz7/NZs3/zCbMv8llCz/ + Io0p/zCNLv/A7bz/aXBs/1JPTP/W1tj/3Nzbkfb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + qKKlzFRVVP9ZaFj/MIIx/w9/Fv8RjR//DI0Z/xWTG/8Tkhz/FZId/xiTHf8clB7/IZUg/yiXIf8wmST/ + Opwp/0SeMf9PoDv/WaRG/2OqVf9qrmj/dbR//32/lf+Gxq3/jdTO/6Lk5P/W8/P/8Pr4//n9+P/5/vn/ + +fz6/9z4+f+l7/D/e+Xn/2vd3/9Z1dX/VNDP/1zLxP9YxrP/YL2M/1mqUv9eqEb/UqQ7/0igN/9Bnzf/ + PJ43/zKbMv8vmjD/LaA1/ySWLf8bgh3/pdKg/11lYP9eXFn/2tvd/93d3UUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALKvr2ZhXWH/UltS/yR+KP8Pjh3/EJIf/w2RG/8TlB7/FJYd/xaWHv8Zlx7/ + HZgg/yKZIf8omiP/L5wk/zieKf9DoTH/TaI5/1elQ/9hqVD/aK9j/3K1ev96vZD/icWp/4rPxP+l4+X/ + uern/+f59v/4/PX/+Pz5//j8+//e+Pn/re7t/5Do5/+N5OX/d9vZ/3LTzP94yrH/cMST/2q4cf9dq0n/ + Vqg9/0ukMv9CoS//P6Ay/zmeMv8wmy3/MaAz/y2gNP8qnTf/HY4o/2+tb/9QUE3/gn5+/9zd3NDm5uYQ + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0tbMNiIGJ9EJMQ/8dgST/D5Uc/xCVHf8Rlh7/ + E5cf/xOZH/8VmR//GJog/xyaIf8gmyL/Jp0k/y2eJv82oSr/PqIv/0mlN/9Tp0H/XKtO/2WvX/9xtXP/ + d7yI/4TDof+Fyrf/k9fS/6Ph4P/X8/L/9/v0//f8+P/k9/X/1fT2/7vu8v+l5+j/nePf/5Tc0/94yKX/ + ZbZ1/2SzYf9fr1H/W6xF/1CpO/9HpjH/P6It/zifLf84oDD/Mp8v/zKiNv8zpTv/MaI//yWYNP84hzz/ + NzUy/7Gtrv/Y2deB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqlraY2SDn/ + EoIb/xCYHv8RmR//Epog/xSbIf8TnCH/FZwi/xidIv8bnSP/H54k/yWgJv8roSj/M6Mr/zulMP9GqDb/ + TqtA/1iuTf9hslz/bbdt/3O8gf99wpf/hMiu/43Rx/+W2dj/u+bi/+/59f/z+vb/wevk/6rh2/+m39v/ + lNnL/4nSuf94x5z/c76E/3C4cf9os17/X7BQ/1etRP9Nqjr/Racy/z2kLv83oi//NqQy/zWkNf85pz7/ + O6pE/zuqSf8zpUH/KoQy/zxCOv/W1NXI2t3bBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADLydBMUWtY/xGMHv8QnB7/EZwf/xOdIP8UniH/E54k/xSfJP8XnyX/GqAm/x6hJ/8joij/ + KaQq/zClLf83pzD/Qak3/0qsP/9UsEr/XLNY/2i4aP9vvXr/esOQ/4HIpv+Lz73/mNfQ/6/i3P/W8e3/ + 8Pr1/8bv7P+s5d//ntzS/4/Vv/+Hzqr/e8WU/3K/fv9quWz/ZLVb/1yyT/9Ur0P/S6w6/0KpM/85pC7/ + NqUx/zeoNf83qjv/PqpF/0OvTP9GsVP/Pa5M/yuRNv9ufHD08e7wJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7/FBoqjj+wMkhv/E6Ik/xOiI/8ToSP/E6Ej/xShJf8VoiX/ + F6Im/xqiJv8eoyb/IqQn/yilKf8upyz/Nakw/z6rNf9HrTz/UbFH/1q1VP9kuWP/a75z/3XDh/97yJv/ + hc2x/5PVwv+h3tb/uOfg/+f47//J8Or/q+Xa/5rcyP+J1bT/gM2g/3TFi/9uvnb/Zrll/2G1Vv9Zskv/ + UbBA/0itOP8/qjH/Nqgt/zWpMf86rDv/Pa1B/0StRv9LtVf/Ubhh/1C3Xf8tmjr/m7qfqgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7n3+ZCZQZ/xKiJP8SoiT/ + EqEj/xKhI/8UoyX/FaQl/xekJv8ZpCb/HKQn/yCmKP8mpyv/K6kt/zKqMP87rTX/RK87/02xRP9TtU// + Xbpc/2W/bP9wxX7/eMqS/4HPpv+N1Lf/l9rI/6bi1f/G7uP/vOzk/6bi0v+Z3cD/i9iu/4PRm/93yYb/ + bsFx/2W6X/9dtlH/VbNG/02wPf9Frjf/PKwx/zSrLv82rDX/Pa5A/0SwSP9Ls07/UrVd/2C+cP9iwW7/ + M6BA/5PBl4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X5tnRAmVGv8QoSL/EqIk/xSkJv8WpSf/FKYo/xWmKP8Xpyj/Gacp/xunKf8fqCr/JKos/yqrLv8wrDH/ + OK40/0CwOP9IskD/TrVI/1a6VP9gv2P/bMZ1/3XMif990Jv/hNOq/43Xt/+U3MP/meHM/5Hgyv+P3cD/ + jtmv/4jWof+D0pP/ecyC/2vDbf9eu1z/WLZO/1CzRP9HsDz/Qa83/zquNP83rjX/PrFB/0W0TP9MuVT/ + U7xc/164Z/95zIP/ccl8/zqmSf+ayJ96AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG2wdQoLlhz6FKUm/xenKf8aqyz/Ha0v/xSoKv8VqSv/F6or/xipK/8aqSv/ + Haos/yKrLf8mrC//LK0x/zKvNP85sTf/QbQ8/0u5Rf9YwVP/ZMhi/3HNdP94zoP/fNKO/3vWmf+A16X/ + htqw/4nduf993bT/gdut/4PYnv+B1JH/etGG/2/Kdv9kw2X/Wr1X/1O5S/9LuEP/RLY9/z6yOP86sDj/ + QLND/0i3Tv9MulX/T71b/1W/ZP9wwnb/lNya/3nLhf89qU7/rN61aAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZwfyxOrKP8brTL/LKxA/ym0O/8erDT/ + G6wx/xesLf8WrCr/GKwq/xusLP8frC3/JK0u/ymuMP8vrjH/NK80/z2zOf9JvET/V8dR/1zNWf9jzmT/ + bs9z/27Sef9t1X//c9iL/3jalv992qH/e9yn/3XYmv901ov/c9WD/3HSef9pzm3/Ycpf/1jGU/9OwUf/ + Rb5A/0C6PP87sjr/O7E9/z60Rf9EuE7/TbxY/1W/Yf9ew2z/gc2J/67ds/9uy3z/RKhV/sfwzzoAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+VHpENqST/ + F7Ax/0S8Wf89v0//NbhJ/y23Qv8ktTn/HrMz/xqvLf8cry3/Hq4u/yKvL/8mqDH/JpQ1/yWDN/8tizz/ + O6lB/0vASP9FsEv/PJNN/z+PU/9DkVn/SZth/129cP9kxXr/VqZ4/02Yev9Ppnj/YcZ3/2fTdP9hymr/ + T65c/0CVUv88kkz/PaRD/z21Pv82pj7/K4g//yeCP/8qkz//OrBI/06+Wv9dw2f/a8d2/5LWm/+76MP/ + XsRt/2OzcPHc++IOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAXgiVXEKYl/w20Kf9T0Wn/XM5t/0rFXf9BwlX/NrxK/y26Q/8nuTr/JLc3/yO2NP8itDL/ + HYw0/wqGk/8HiKr/CYem/xODhf8ujUH/JXtT/wegzv8Li7H/DoGi/wyWvv86iV3/TKli/x1+jv8IoNP/ + GX6O/06wY/9ZyWL/PZFX/xWHnP8InMr/B5zL/xKFkf8phT3/I4dH/wmFpP8Gmcb/G3hk/zuvTf9TxWH/ + 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 + z/fUBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs47URO6U5tQajD/8FpxL/S8NP/8vv0f/y+Oj/ + 5Pfk/8fy1P/F7cf/tum7/6blrf+c4aL/kdyX/4LXiv9y0Xv/Zcxv/1jHYv9JwlX/Or5I/y+6P/8nuDj/ + HbUv/xSzJv8Nsh//C7Ec/wiwF/8GrhP/C7Aa/w6vG/8SsB//G7Un/yS1Mv84vEX/Vsdh/2vOdf97z4L/ + btZ4/16+afx6xISFw+bDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKLPqwQnjyd/ + CpYU+gemCf8tqS3/rd64/+z58P/i9tv/4fLi/9Pu1P/D6cb/ueW9/6/fsv+h2qT/kNWV/4TRi/94y3// + ZsVw/1W/YP9LvFX/Q7hL/ze0QP8tsDb/Hq0q/xerJP8Tpx7/D6QY/wunFv8OpRj/GKci/yOsLP88tUX/ + UL5Z/2bGbf9xx3f/cct4/2W1a+xvs3ZSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAByRJzoffhzVB5QJ/wycDv9quGr/3e/b//n8+f/t8+3/4Pbi/9H10//G7sX/ + u+a5/7Der/+g2aH/kdmW/4HQh/90x3r/Z79s/126Yf9StVb/RbBJ/zSsO/8sqTH/JKQp/xyeIP8Sohn/ + FKAa/yGhJ/8zqjj/VbZZ/2G9ZP9pwW3/aL1t/1qsYbNYnl8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5A+CAl5CXcHhQrwBokI/yeOJv+AvYD/ + 3fHa//j49P/18fL/6ezm/9zu2//J68r/vN+9/7rZu/+p0Kr/mMea/4bGiv92w3r/Zbto/1m2W/9RsFX/ + RqlJ/zikOf8uozD/H5gn/yGUKv8ynjv/Q6pO/1WvWP9is2T/YKZj22StaFOEvIoBAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + C2sMFQR0BIYGfAbvB34G/x17HP9nqGb/uOC4/+Lz5P/q9Ov/6vLr/9rp2v/K5cv/vOO+/6narf+k0KX/ + oMme/5DAjP+Bun3/c7lz/2CxY/9DoEX/JY0n/y2PK/86mDj/SqNJ/1KoU/9XplnbVZtXZ1uNWQcAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDDgtlCmgCZwPHBXYF/QtuC/8jeyT/V5xW/4y2hv+zz67/ + xt3B/9DlzP/P4sr/vt66/6rXp/+QxYz/drFw/0iZRf8shir/JX4h/zCJKv80jjD/QpI+90uNRbJMikRN + Pnc7BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVZBCAHZANr + BWcBrQNmAeUBYwD/BmcF/wlpCf8Pbg//FW8U/xdyF/8UcBT/Dm4M/w9xC/8OdQv/FncQ/CF7G9ksfSGd + L4IyWCVzLRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAABE8BGANWAj0FWQVbAlYCbwJaAnsEXgN/BVwCeQhdBWsPZAtW + C1wFMxBYCQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////////wD////////gAAf/// + ///wAAAP/////8AAAAP/////AAAAAP////4AAAAAf///+AAAAAA////wAAAAAA///+AAAAAAB///wAAA + AAAD//+AAAAAAAH//wAAAAAAAP/+AAAAAAAA//4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gAAAAAAAAf + 8AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAP4AAAAAAAAA/gAAAAAAAAB+AAAAAAAAAHwAAAAAAAAAfgAAAA + AAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAA+AAAAAAAAAD + 4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAH8AAAAAAAAA/4AAAAAAAAH/gAAAAAAAA/+AAAAAAAAH/8AAAA + AAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAP/+AAAAAAAA//8AAAAAAAD/ + /wAAAAAAAf//gAAAAAAB//+AAAAAAAP//8AAAAAAA///wAAAAAAH///gAAAAAA////AAAAAAP////AAA + AAB////+AAAAAP////+AAAAD/////+AAAA///////AAAf///////gAf///////////////////////// + KAAAADAAAABgAAAAAQAgAAAAAAAAJAAAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAMDAwCCQkJEIkJCR9IyMjqjAwMM48PDziQUFB7UBAQOw1NTXfKioqyCgoKKMtLS1y + MjIyNlZWVgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAGxsbAx4eHkQwMDCmRkZG8l1dXf9xcXH/goKC/4+Pj/+YmJj/nZ2d/6Kiov+mpqb/ + pKSk/52dnf9/f3//YWFh/zw8POgnJyeULy8vMklJSQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACsrKwMmJiZSQUFBzllZWf93d3f/fHx8/5GRkf+qqqr/wsLC/87Ozv/c3Nz/ + 4uLi/+Dg4P/f39//29vb/9PT0//Jycn/vr6+/7W1tf+Wlpb/W1tb/SsrK7opKSk7VlZWAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiJ0JCQr1ZWVn+bGxs/4eHh/+wsLD/2tra//Ly8v/6+vr/ + /f39//7+/v/+/v7//f39//7+/v///////v7+//7+/v/8/Pz/9/f3/+jo6P/T09P/wMDA/6Kiov9cXFz7 + JycnoiwsLBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwI4ODhkUFBQ82pqav+FhYX/vb29/+Xl5f/09PT/ + 7u7u/+fn5//h4eH/4ODg/+Li4v/m5ub/6+vr//Dw8P/39/f/+fn5//39/f/+/v7/+/v7//v7+//7+/v/ + 9fX1/93d3f+8vLz/lpaW/0JCQuUmJiZFREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqBD8/P5NcXFz+cXFx/6ysrP/f39// + 5OTk/9HR0f/CwsL/wsLC/8nJyf/Q0ND/1NTU/9ra2v/f39//4eHh/+Li4v/m5ub/6urq/+/v7//09PT/ + +vr6//7+/v/+/v7/+vr6//v7+//x8fH/1dXV/7CwsP9fX1/4ISEhbEtLSwEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8GREREpVxcXP+EhIT/ + ysrK/9PT0/+4t7f/sLCw/7q6uv/Nzc3/1dXV/8/P0P+4ubn/n6Gi/42Pkf9+gIL/dXh5/3l8fv+GiIn/ + lJWV/6enp//AwcH/1tbW/+fo6P/y8vL/+/v7//39/f/7+/v/9vb2/+Pj4/++vr7/bm5u/iUlJXtiYmIB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwNHR0ed + XV1d/5OTk//Nzc3/sbGx/6alpf+6urn/09PT/8jHyP+YmJj/YmRk/0RHSP83OTz/PkFH/0VNUv9QWV7/ + WF9k/1BZXf9QVVj/TE1P/z9DRf8zPkX/RVBV/3R6fP+ztrT/1tfW/+zt7P/5+fn/9/f3//X19f/r6+v/ + x8fH/29vb/4xMTFxWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAD09PXlaWlr+l5eX/7a2tv+ampr/r6+v/9DQ0P+3trb/cnJx/zg4Nv8+QD//cHJy/6Cgof/AwsH/ + zdLQ/8/Y1v/P2db/0drY/9DY2f/P2Nn/ztXW/8TKyv+hq6n/cX1//z1KUP82PEL/YGBi/6SkpP/Y2Nj/ + 8PDw//j4+P/z8/P/6+vr/8XFxf9nZ2f6PT09TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAANzc3PVZWVvqNjY3/qqqq/5iXmP/AwMD/wMDA/3R0c/84Nzb/V1dV/6CmoP/Hzcj/ + 0dfS/8/X0f/L3dD/wNrI/7rYw/+z1rz/sda7/63Wvv+w2cH/ud3I/8Tezv/M2tH/zdfQ/83Y0v+vtrf/ + c3R0/z89Pf9gX1//s7Kz/+bm5v/39/f/8fHx/+Xl5f+9vb3/VlZW62lpaRwAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0MSkpK2nR0dP+YmJj/mJiX/8fJxv+enpz/TUpL/1FPVP+mp6L/ + x8vJ/7rHuv+vyK//nMGd/429jP97tX//a6x3/1+ldP9ap3X/VKZ2/0Cndv9ArXn/SbR7/1m7fv9uyY7/ + hcuY/6LTrf+408L/xdXJ/8DAvf9qaGj/PkI9/4WFhv/c2Nf/9vX0/+7u7v/b29v/p6en/19fX7Svr68C + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQ0N/Y2Nj/4yMjP+YmJj/w8PE/4aEiP9ERUb/ + fYB+/7vBt/+lu6r/kriN/3esdP9jlVv/UH5K/0h1T/9IfVf/TY9j/0ucbP9NpnT/Tqt7/y+oeP8fp3b/ + GqVw/xadYP8gol//Ka1c/z+6Yf9oy4D/jdGa/7TUs//Dy8L/m5mY/0U/Q/91cnD/zMvL//X19f/o6Oj/ + zMzM/4SEhP6YmJhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQBdSUlLvgYGB/5GRkf+/v7// + fn5+/0lGSP+Zopv/qbiq/4ytjP9rpGX/UXpF/zRPL/82Wy7/RXo//1GYVP9bqWX/YLN1/2O7hf9mw43/ + aMaU/z/ElP8jwYr/IMCC/yTAff8ov3r/H7Zp/x+sXf8rrVv/Rr1j/37Vff+Y0JX/ss6v/666sP9LSUr/ + bGts/83MzP/w8fD/39/f/7i4uP+SkpLR1tbWBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSoFra2v/ + ioqL/7m7uP+CgoD/U1BS/6KnnP+htJf/b6Jw/1KGRv8nRSL/JEgg/zJxJv9EizT/TptC/1urXf9muXb/ + bcCL/3DDmv90yaT/dM2s/0TIqv8uxqf/LMqe/zrRof870pf/Ls+E/zDMfP8zw3D/Mrpe/1C4Uv9tzmP/ + gdV5/5/Lof+0vq3/U1RS/3J1c//U0dL/7Ozs/9DQ0P+bm5v/1tbWUAAAAAAAAAAAAAAAAAAAAAAAAAAA + T09PBVJSUuV/f3//qqqq/4+OkP9WV1n/l5yX/5Cqlf9knWT/PGot/xUxE/8fVRn/Kngh/zeILP9Hjjz/ + T49H/2CUX/9xp4P/gLef/4DDsP+Ayrz/fM3C/2HJw/9CxMH/OsG5/0TFuP9Px7H/Rcmh/zzMjf9H04D/ + QtFm/13MWv9Uu0r/VsVP/3bVbf+ay5X/qrOq/09PTv+Ji4r/5OXk/+Li4v+xsbH/vr6+kQAAAAAAAAAA + AAAAAAAAAAAAAAAAQUFBR2FhYf+Pj4//qKio/2lnZ/96gX7/lq2N/1yZWf8mVRv/ECQP/xdXEf8odxr/ + MHYj/zp3Lv9Khj3/Y6BU/3m0bP+IypT/ldSy/5rZxP+X28v/ktvP/3vY1f9Nzcz/QsrK/0PJxP9Kyb3/ + SMWz/zy7l/8+uX3/Qr5q/2TTZf9l0lX/U8JD/0jFQf9s1mP/lc+T/46di/9TVVT/o6Sk/+vr6//IyMj/ + u7u7zvLy8gQAAAAAAAAAAAAAAAAAAAAAREREl3Z2dv+np6f/dnZ2/2lpZ/+YqZn/aJ1b/ylbI/8MHwb/ + FVoO/x5sEP8haxX/NXkp/0uWPP9aokv/YaVR/2uiW/9+tIr/l8q4/6bXzP+u3tn/reDe/5Pb4v9XyNb/ + OsDS/zW8zP86ucb/JbKx/xysmP8ipnn/Kahl/0ayXv9ixlv/WtFJ/0rBPv9IyD3/cNln/5/Pnv9rbGn/ + b29v/9TU1P/V1dX/wsLC//Dw8AwAAAAAAAAAAAAAAAAAAAAATExMv4KCgv+bm5v/X19f/4mTh/9tnmz/ + M3Mt/wkcBP8PTAn/FmML/x5sFP8xgCL/Powt/0WQNv9Rkj7/W5ZF/2mdVv92qHH/msiz/8Xk1f/f7uT/ + 1O7r/6nj6P9p0uH/RMjX/zW90P81usr/J627/xigof8Wln//GZJe/x2SUv9RqVb/XLdP/1DKQv9Cvy// + TdBB/3/aev+btJj/XFxb/5ycnP/g4OD/xcXF/+jo6BIAAAAAAAAAAAAAAAAAAAAAXV1dv5eXl/93d3f/ + amlp/4Whgv9EjT//DzAL/wk8A/8NYgz/HHIQ/yN5Ff8vgyD/N4cl/0iNM/9Qjzb/XJNB/2ucV/98rHr/ + m8u2/9bs4P/q8+r/6fby/8jv8f962er/V9Dh/1TK3v8+wM//LLTB/yKpr/8YnY//FpBn/zyZXf9anlf/ + V55O/02pQ/9Gvjv/OcAs/2rlX/+X1JL/cnVy/29vb//c3Nz/yMjI/93d3R0AAAAAAAAAAAAAAAAAAAAA + ampqv5ucnf9gYmD/eYN6/2GWWv8jZR7/BzME/wpiBf8XdxP/Fn0P/ySCF/8vhyH/OIgj/0WLKf9SkTT/ + YJlG/26jYP9+s4b/l8u0/9/v5P/v9e//8/n0/+X49f+D3uv/V9Ti/2fW5f9Hytf/NL7J/y+0vf8dp5j/ + H5tx/2atcP9mp2D/VJxO/0mYQ/87mzn/Prcr/03RQ/+L4YL/jKOI/15ZXv/Gysf/zMzM/93d3R4AAAAA + AAAAAAAAAAAAAAAAcnFxv5eamv9YWFb/dI50/0SKPP8KUQj/DVwO/xR4Ev8ZgRb/FoAQ/yKCF/8thhv/ + OIoh/0WOK/9UlTn/YZ1N/26nav+Atoz/i8i1/9Lr4v/u9/D/9Pr1//b7+v+l6+7/atvm/1/Y5v8+zNv/ + OMHO/zO4wf8irKX/Q6uB/3Szdf9qq2P/V6FS/0SXQP81jzL/MI8r/0K+Mf+E7Xn/osmg/1lVWf+oran/ + 0dHR/+Dg4BsAAAAAAAAAAAAAAAAAAAAAe3t7v4qPj/9dW1n/ZpNh/yqAIv8MYQf/DXsR/xGEFP8WhBX/ + HIYY/yOGGf8tiRz/OY0j/0eSLv9WmD7/Y6BT/3Cqb/+CuJH/iMez/7Li3f/q9/L/8/v3//j8+f/O9vf/ + pu7x/4Lj7f9D0Nz/OcbQ/zS8w/8utK7/WbOF/3azcv9orGP/V6NT/0ebRP84kjb/Loov/yWMH/974nL/ + p9qm/11fXv+Vl5b/19fX/+Pj4xcAAAAAAAAAAAAAAAAAAAAAfn5+q4WKiv9ZW1j/V5FQ/x14GP8LdxD/ + DIUT/xCGFv8Uhxj/G4kb/yKKHP8sjR//OJEl/0eWMf9WnED/ZKRW/3Ctc/+AupT/i8m0/5bd4v/f9O// + 8/z3//n9+P/l+/n/ufTz/6Dr8/9P2N7/PMzU/zXCxv8turT/VbWM/3Szb/9lrWH/VaVS/0aeQ/86mTn/ + LpYu/yCEJf9guF3/sOSr/2VpZv+Li4v/1tbW5ezs7An4+PgBAAAAAAAAAAAAAAAAjIuMTIiJiv9UWFT/ + To1K/xF1Ef8Phhn/EYwZ/xKLGf8WjBr/G40b/yKPHf8skiD/OJYm/0eaMf9WoEH/YqdV/22ucf99upD/ + hcav/5Db2v/H7uv/9/v3//n9+v/0/fn/zvj1/5Ts7/9b2+D/QNDW/zjGw/83v7j/SbiU/2evZf9hqlX/ + UqRI/0SgQf85nDr/MJoy/yWQLP8jhCX/tOmv/2FmYv+Uk5P/2trbxvHx8QEAAAAAAAAAAAAAAAAAAAAA + iomLBJaTlOJNUk3/P4I+/xCBGP8NjBv/FJIb/xORHP8Wkh3/G5Me/yKVIP8smCL/OJso/0aeMv9UokD/ + YalS/2uvbf96uov/hMSp/5HY1P+87Oz/7vn3//n9+P/5/fn/4Pn5/5rt7v9u4OL/WtXW/1LOzP9Vx73/ + Wr6V/1uqUv9YpkL/S6E6/0GfOf84nTb/L5ox/yudNP8aiiD/jMKH/1VZVf+lpKP/2trafff39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAKSio39QTFD/Lnoy/xCQHf8Okhz/EpQe/xSWHf8Xlx7/HJgg/yKaIf8rnCT/ + Np4o/0ShMv9RpD7/XqlN/2iwZv92uYT/hcOk/4zSyP+r5eX/3PXy//j89f/4/Pr/5Pn5/6rt7P+R5eX/ + gt3c/3HOvf9zw5j/Z7du/1yrRv9Ppjf/Q6Iv/z2gMv80nS//MZ8x/y6hN/8mmjP/UZxT/0pHRv/DwsH3 + 3NzdKPj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAL27viJiYGT7IHkn/xCXHf8Rlx7/E5gg/xOaIP8WmiH/ + Gpsi/yGdJP8onyb/M6Eq/z6kMf9MqDv/WKxL/2WxYP9zuXr/fsGX/4bLt/+U2NX/v+no//X79v/i9fH/ + wOrp/6/m5v+b39b/iNO6/3PAi/9qtWn/YbBT/1erQ/9Kpzb/P6Mu/zehLv81oTH/NKQ4/zenQf8xokD/ + LIg0/0tLSP/f396c5ebkAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa1ugGDi4nEFHsg/xCbH/8SnCD/ + FJ0h/xOeI/8WnyT/GqAl/x+hJ/8moyj/L6Us/zmnMf9Gqjv/U69J/1+0W/9sunL/eMKN/4PJq/+R08n/ + q+Da/+D08P/f9fH/r+Xh/5zbz/+K0rX/fseZ/3K+fP9ot2T/XrJR/1OuQv9Hqjb/O6Uu/zalMv83qTf/ + PKpC/0OvTf9CrlD/LJY4/3iDedvo6OkPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACutrFq + HI8q/xOiJP8ToiP/E6Ej/xShJP8WoiX/GqIm/x6jJv8lpSj/Lacr/zapMf9CrDn/T7BF/1q2Vf9nvGr/ + csKC/3vJnf+L0bj/nNzQ/73q4v/d9ez/r+bc/5fbxP+D0an/d8eN/22+cv9jt1z/WrNM/0+vPv9DrDT/ + N6kt/zaqM/88rT//RK5G/061W/9YvGb/NKBB/5u8n3oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACbq50ZG5Qq+BGhI/8SoiT/E6Ml/xSkJ/8WpSf/GKUo/xymKP8ipyv/Kqku/zOrMf8+rjf/ + SbFA/1K2Tf9evF//a8R2/3jMkf+E0qn/kdi8/5/gzv+s59v/nODN/5Patf+H1aD/fMyI/2vBbP9duFb/ + VLNH/0mwO/8/rjX/Nawx/zuuPP9Eskr/TrhU/1q3Zf9yy37/PqdL/5TCmGAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZciyxSkJv8YqCr/HKst/xSoKv8WqSr/GKkr/xupK/8gqi3/ + Jqsv/y6tMf83sDX/QbM8/025SP9dw1r/bstx/3jOhv9805b/gNam/4nbtf+F3bn/gtyy/4XXn/9/047/ + c8x7/2PCZP9WulH/TbdF/0O0PP88sTf/PbE+/0e2Tf9Nu1f/VL9h/3PDef+P25f/RKtT/6nasVAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ0fkROtKf8mrDz/LbRA/yGuN/8brjH/ + F60s/xisK/8drCz/I60u/yqtMP8wqzP/Oa44/0q9Rf9YyVT/XMhd/2fJb/9ozXb/btSF/3XXk/9005z/ + c9Oa/3HUh/9w1Hz/aM1t/1zFW/9RwEz/Rb5B/z22PP84rDv/Oq9C/0S3Tv9Tvl3/XsJr/43PlP+Z3KP/ + R61Z/cny0SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIoeVw2pJP8wvkn/ + TsZg/z6+Uv8xukb/Jrc7/x+zM/8fsjH/IrEx/yCVNv8VfmP/F4R1/yyQTP89pkj/Iop6/yCHhP8kioj/ + Q59v/1Gucv8ri4//Lo+L/1q/bf9axWb/OY9j/yGHgf8jhW3/M5o//yiRTv8WgXr/HYVg/z2yTf9ZxWX/ + bsp5/6fgr/+O3Jr/abh06Nv74gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QZpNHRKtKP8gvzv/dNuE/17Tcf9Py2P/QMVV/zTESP8rwT//I702/xKFW/8Ke4b/FWNU/waZwv8eaUX/ + Bp7L/xNvev8dZ1v/KI90/0ChVP8Mk7r/FIGN/0u7Vv82k1f/BLDn/xB5hv8SeIP/EYKD/xxxO/8CreP/ + HnZi/0bAWP9i0G//hduR/77sxv9ozHj/ls6bmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABOrI7sVviv/cd6C/4Xflv9y3YP/ZNRz/1DRY/9AzlT/M8hG/yWVR/8Sal7/ + DX+P/wKx6f8VY1D/BZ3J/xBseP8Yc2v/N55C/z6wR/8Mk7T/FoWF/0K/Rf8jg1r/A6vh/yaLPf8nlTv/ + CnyP/xVyN/8CrOH/GWdo/z2YX/9tynz/o+Ss/7Ppu/9fwm37reOzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6mOzcJuxb8NMZI/6zrs/+e4az/h+SP/3Xehf9k2XX/ + VdNm/yqPZ/8CsOn/C4ek/xBxcf8cfTr/BJ7J/wd/mv8LfIz/KJQ4/y6jOf8JkrH/EYKA/y+uOv8ZeVX/ + A6fZ/yCWNv8foDP/B3yN/xBvNv8CrOH/Em6J/wqdzP9Vmon/t+u+/3jRhP97w4Wr4P/lAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHLFeQEjqiysDr0g/2TXb/+/8MX/ + sOq4/53mp/+L4pf/edyG/z+Vdv8Imsj/GldQ/w1+kf8XcD3/A57K/wVlbP8GYFT/BWZe/wZfSP8Cja// + A3B8/wRxY/8EVlL/Aanc/wmELf8Kjiz/A3mP/whaNv8BreL/GFZo/wmf0P9Gl6X/k9ye/2fDdOy+6sQf + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0w3Mq + JrIy9w+7Gv+M3pT/1vPa/8PwyP+w67D/nuan/4DMj/9Gk4T/Jo6b/yqPhf8ti1j/FYWF/w+Fh/8KiIL/ + CnJR/waFf/8Egn3/A4J9/wWBev8FbVf/BYJ6/wiLOf8IkDT/BYFx/w5tUf8YhY3/IYuX/zqQnv9rr4T/ + acNz/JDVmV0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdsp9URenIfMNrxf/iNiM/+X25v/Y9Nj/xe/L/7LquP+c4KX/iNWU/3vThv9nzXP/ + VMJj/0W8VP8zuUT/JbY4/xuvMP8RrSb/Cqsg/wmrHv8Hqxn/Cqsd/w2uHf8RsSL/GK8r/y+0Qf9VwGT/ + b8Z6/3HTfv9owXP2hceLXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWgRDIPlRbYCKUN/2C/Y//g8uT/3/fd/9rw2//G68n/ + tuS6/6jdq/+T1pf/gdCI/3DJeP9YwWP/SLxT/zy3Rv8tsjj/Hq4r/xSrIf8Ppxn/DKgW/w+nGv8dqyf/ + M7M9/1C/Wv9rx3L/c8t6/2W5bd9vuHg6t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjmzgNH4AdkQWQB/kooSn/ + qdOn//H48f/q9Or/2vXb/8nsx/+75Lr/p9qo/5XWmf+Byob/b8F0/125Yv9Os1L/PK5C/y6oM/8koif/ + F6Ad/xieH/8tpDP/ULRU/2K7Zf9pvW37XbBkm1ieXxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAxxDTIGgQi0CYIJ/D2ZPP+iyZ//5/Dl//Hy8f/f7+D/y+XN/77ewP+n1qr/lc2Z/4nHiv9zu3L/ + Y7Nk/1OtVv81nzf/JpQp/y+WNP9Fp03/U6xX/V6oYLtcm185Z6xrAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQZxABB2cGMQdrBpoFcAXvHX4e/1KbU/+TvpD/vdS4/83iyf/N48r/ + vtu7/6fQov+Fu4D/X6db/zaNNP8rhSf/M44u/0SUP/JRlkqgTJBJOFCOUQEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUIB2MDRgZnAokBYgC/ + BGMD5ghmCPcOag79EWwR/w9rDv0NbAn3DnAK6Bh3EsImex6NL4EtTCVzLQoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFV4UAgxYDBADVQMbBVgEHwhYBBsUXg8QHmcaAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD//4AB//8AAP/8AAA//wAA//AAAA//AAD/4AAA + B/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPAAAAAADwAA + 8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAAHAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAA + AAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAQAAwAAAAAADAADAAAAAAAMAAOAAAAAAAwAA + 4AAAAAAHAADgAAAAAA8AAPAAAAAAHwAA8AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAA + AD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/wAAAAH/AAD/gAAAAf8AAP/AAAAH/wAA + //AAAA//AAD/+AAAP/8AAP//AAH//wAA///wH///AAD///////8AACgAAAAoAAAAUAAAAAEAIAAAAAAA + ABkAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRQQxMTEfMDAwOSkpKUYoKChENzc3NkBAQBpYWFgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwAjIyMhKysrdUBAQLxLS0vwV1dX/mlpaf9zc3P/ + dXV1/2lpaf9eXl79U1NT6jk5ObIoKChoPDw8F1dXVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + KSkpACUlJTw/Pz+0V1dX/HNzc/+Ghob/mJiY/62trf+8vLz/yMjI/8nJyf/Jycn/xMTE/7u7u/+wsLD/ + kJCQ/11dXfcyMjKjKioqKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiG0RERKtaWlr9dXV1/5ycnP/Jycn/ + 6Ojo//f39//9/f3//v7+//39/f/+/v7//v7+//z8/P/6+vr/8vLy/+Hh4f/IyMj/q6ur/2ZmZvktLS2U + LCwsDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjIyMAOzs7T1FRUexvb2//oKCg/9nZ2f/v7+//6Ojo/+Hh4f/e3t7/39/f/+Xl5f/q6ur/ + 8vLy//n5+f/6+vr//v7+//v7+//8/Pz/+/v7/+7u7v/Ly8v/oqKi/0xMTN0oKCg2AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjIBQ0NDc1xcXPuEhIT/ + ysrK/9vb2//IyMj/vb29/8TExP/S0tL/2NjY/9XV1f/T09P/0NDQ/9HR0f/W1tb/4uLi/+np6f/w8PD/ + /Pz8//39/f/6+vr/+fn5/+bm5v++vr7/Z2dn9CQkJFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcARUVFeF1dXf6dnZ3/zMzM/7a1tf+ura3/ycnJ/9DQ0P+xsrL/ + iouM/2Rmaf9MUFT/P0RJ/zpARP87Qkb/TlBS/19fYP9xdHf/kpaZ/7/Bwv/l5eT/8/Pz//z8/P/39/f/ + 7+/v/8vLy/9zc3P5KCgoVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/XV1dXf2jo6P/srKy/6Ojo//FxcX/v7+//4CAf/9DQ0P/R0pK/3R2df+Ulpb/qbKx/7W/vv++yMf/ + ucHC/7G5uv+co6P/e4eH/0pZXP8vO0H/YWRn/6enqP/e3t7/8/Pz//b29v/w8PD/zs7O/25ubvY5OTk8 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3KlhYWPSYmJj/oaGh/6qqq//ExMT/ + e3t6/z8+Pf9ucWz/r7Ww/9DV0f/O1tL/ydvQ/8Hayf+82cT/uNjB/7XYxf+528j/w93P/8rZ0P/O19H/ + wMvH/42SlP9QT0//XVxc/7SztP/r6+v/9vb2/+vr6//IyMj/X19f42lpaRMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPj4+BUtLS8h9fX3/lJSU/7W2tP+oqaf/T01N/2tqa/+3urX/vMe//6vEqf+YwJX/ + g7WD/2+od/9dn3H/V6Jz/1Gjdf86pHX/Oap2/0iyd/9ev4P/esqS/5nRp/+00r7/x9PH/5SRkv9GSET/ + g4KD/+Pg3v/09PT/4+Pj/7Gxsf9lZWWkv7+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCQmJnZ2f/ + jo6O/7S0tP+TkZT/TU5P/5OZlf+tuq3/j7SN/3Ojaf9TfU3/RG1D/0Z5T/9RkV7/VKVu/1WveP9XtoH/ + M7KA/yCwfP8erXH/G6dj/xyoWP8xsVv/XMV2/5LTmf+yzrD/tLmx/1xaW/9xb23/1tbW//Dw8P/W1tb/ + kJCQ/aSkpD0AAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAZWVlbeg4OD/6mqqP+QkI//VlVU/6Wsnv+TsJX/ + bqBl/z5oN/8rTSX/OWwt/0uOPv9Xp1r/Ybhy/2rAiv9tx5f/cc2g/0DKn/8lx5T/KMqO/zHMjP8lxHj/ + KL1t/yq0Xv9Kv13/etBz/5bRkf+xyLP/aWhm/3Fycf/X19f/6ejo/7+/v/+enp679PT0AQAAAAAAAAAA + AAAAAAAAAABERERVbGxs/5ybnP+am5v/XFxd/5+moP+CpoP/UYhF/yBAHP8gUhv/LXol/0GONf9PlkX/ + YZ5j/3Otif94uqH/ecOy/3bIuv9Pw7v/OcG5/znFsP9My6//P8ya/zvRiP8/0Xb/Scdc/1m+Tv9hy1n/ + htGA/63Dqv9hYmD/hISE/+bm5v/Z2dn/q6ur/eTk5BsAAAAAAAAAAAAAAAAAAAAATU1NtIKCgv+oqKj/ + Z2Zn/4iSif99pnr/P3c1/xIqEP8ZVRL/Kncc/zZ4Kf9EgDf/XZlQ/3awbf+Ky53/mNa7/5fayf+R287/ + ddfT/0fMy/9Bycb/Scm+/0vGtP88u5P/Q714/1PLaP9m0lf/U8NF/1DKR/9903j/osCf/1dZV/+ho6L/ + 5+fn/7m5uf/Q0NBSAAAAAAAAAAAAAAAAT09PDVlZWfaampr/fX19/3R2c/+IpoX/RIE5/w4iCv8VVw3/ + HWsQ/yhwHP9CizT/VJxF/2CjUP9sol7/hLmX/6PTxv+x3tf/suHf/5Da4/9MxtX/Nb7O/zi6yP8psrX/ + G6mV/yKjcv8vqF3/Wb5d/1zOTP9JwT3/T85E/4TVfv+KmIn/aGdn/9PT0//Kysr/y8vLigAAAAAAAAAA + AAAAAEdHRyBqamr/m5ub/19fX/+KnYf/To5L/xExC/8LRgf/FmQK/yJzGP80hCP/P4wu/0+SO/9Yk0D/ + ap1X/3yuf/+23c//4e/j/9/y7f+p5Or/Y9Lh/0LG2f84vc3/KrC//xqhov8VlHj/Go9X/0CbU/9drlH/ + TcNA/0G+L/9b21L/m9KX/2ZpZf+bm5v/1tbW/8vLy5IAAAAAAAAAAAAAAABKSkogfn5//4KDgv9ucW// + bJlm/yJeHv8HNgP/EWcM/xp4Ev8lfxf/Moci/z+JKf9NjTH/XpVC/2+hYP+BtYz/v+HV/+rz6f/v+PL/ + 0PP0/27X6f9Z0N//Ucra/zG6x/8nrrT/GJ+I/zObaP9jpWD/VZtO/0yeRP8/tDf/RMk0/4Lgev+HmIX/ + b25v/9na2f/Ly8uZAAAAAAAAAAAAAAAAXFxcIIeIiv9tbmr/c4V0/0WLPf8JRgn/DmQM/xd8E/8WgA// + I4IX/zGHHv8+iyT/T5Ey/1+bSf9vqGv/g7uV/7Hc0P/s9ez/9Pn0/+z6+f963uf/ZNnl/0vQ3v83wc3/ + MLa9/yCmk/9arnr/bq1n/1ihU/9Dlj//NZEx/zarKv926Gf/m8WY/1tYXP/Iy8n/0dHRlwAAAAAAAAAA + AAAAAGtrayCMj5D/Yl9e/2iNZf8nfCD/DmUJ/w6AE/8VhBX/G4UX/ySGGf8wih7/QI8o/1GWOP9in1D/ + cqty/4W9mv+Y08n/3/Tu//P79v/1/Pr/ufLz/5Tp8f9Q1N//OcbS/zO7wf80sqH/b7R5/22uaP9ZpFX/ + RZlC/zSQM/8lhiT/Ys1V/6Pbov9YWln/u7u7/9fX15MAAAAAAAAAAAAAAAB3d3cQj5GS9lhaWf9bjFT/ + GHYV/wx+Ev8OhxX/E4cX/xuJGv8jixz/L48g/z+UKv9Smjv/YqNU/3Kvdv+Dvpz/j9TP/8Ls6f/0+/f/ + +P34/9v5+P+s8PL/ad7l/z3O1v80wsT/NLir/2m0ef9rsGb/V6ZT/0WeQv82mDX/KJAr/zmWOv+u56n/ + X2Je/7Gxsv/Y2Nht+Pj4AgAAAAAAAAAAAAAAAJyZnKZXWlj/T4ZL/w95E/8QjBv/Eo4a/xWOG/8ajxz/ + I5Ee/y+VIv9AmSz/UZ88/2GnU/9ur3P/f72Y/4rQxP+r5+X/9fr2//n9+v/x/fn/tPPz/2zh5P9J0tf/ + P8fE/z/AtP9Ys3b/YapT/1GkRf9CoD//Nps3/yuXL/8chSL/l9OT/1hcWP+8vLz/39/fQAAAAAAAAAAA + AAAAAAAAAACup6pAYGBg/zx5Pf8Rih3/DY8a/xSTHP8WlB3/G5Ue/yOXIP8vmiT/Pp4t/0+iO/9fqE7/ + bLBt/3y9kP+Jy7n/qOTl/+H29P/5/ff/9/z6/8Pz8/+G5uf/btvb/2bQyf9qx6r/YLJl/1inQP9IoTP/ + Pp81/zKbMP8vnzT/JZkv/2GnYP9SUlD/zc3N4uXl5QkAAAAAAAAAAAAAAAAAAAAAtLSyAnRuddgqcS// + D5Ud/xGXHv8TmB//FZkg/xqaIf8inCP/LJ8m/zqiLf9KpTj/WapK/2ixZP93u4X/hcar/5TX0v/C6+r/ + 9vv2/+L18//C7vD/oeTi/4/azf9wwZL/ZrRm/12tS/9PqDr/QaQu/zigL/80oDH/NKQ5/zCiPv8wjjn/ + W1hX/9/f3YD4+PgBAAAAAAAAAAAAAAAAAAAAAAAAAACWmJuBG3Ql/xCbH/8SnCD/E50i/xWeI/8ZnyX/ + IKEn/ymjKf81pi7/Q6k3/1KuSP9htF7/cLx6/37Fnf+N0ML/qd/a/+X28v/O8Oz/pN/Y/47Vv/9/yJ3/ + cb16/2a1Xv9ZsEn/S6s5/z2lL/83pTL/N6g5/z+rRv9Crk//L5k7/3yEfMrp6+kHAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAwsTFKTCUPP0ToiT/EqEj/xOhJP8WoiX/GaMm/x+jJ/8npin/Magu/z6sNv9NsEP/ + W7ZX/2m+cP93xo7/hc6v/5nazP/B6+L/zfDp/6Lgz/+J1bH/eciQ/2y9b/9gtlb/U7FE/0atN/83qi7/ + N6s1/0CuQ/9JsVD/WLxn/zulR/+avZ1iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTBwwEeli3P + EaEj/xSkJv8VpSf/FaYo/ximKf8cpyn/JKks/y2rL/85rjT/RrE+/1G3TP9gv2P/ccmA/3/Qnv+L1rT/ + md/I/5jizv+R3Ln/iNah/3zOh/9nwGj/WbdQ/0yyQP9Brzf/OK40/z+xQ/9Kt1L/V7lg/3fMgv9IrlX/ + mMeeTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpkekRapKf8grDP/Ha0x/xeqLf8Xqyv/ + Gqsr/yCsLf8orS//Ma8z/zyyOf9PvUn/Yctd/3HPdf9104X/d9iV/4Dbpv9+3a7/fNic/3rUif9vznb/ + YMVe/1G+S/9Fuj//PLM5/z6zQv9IuVH/Ub1d/2fEc/+b3KH/S69b/7bmvzQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA+THlcOrCb/PLtT/zu9T/8ut0P/IbQ2/xywL/8fsC//JKsw/yKKOv8lhkv/ + O6dE/0KsUP82kGH/O5Fp/1Csb/9buHz/RZiE/1Kyev9l0HH/T6tf/zeRX/83mEn/N6s+/yaJUP8mjU7/ + QbVO/13DZ/9/0Ir/qeKy/1u2afTf/OUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kkEd + D64m/0LMWv9m03f/Uctk/z/DU/8xwkX/J786/x2hNP8Jg5b/EXJv/wyOpv8bcFj/BaLS/xlwbv8kjXz/ + O5VY/wWp3/8yjVv/Rq5U/wufxv8PhJb/DYSc/x5+R/8Ika7/GIWC/0jAWf9o0XT/p+Gv/4zfmf+Axom0 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGwIrsmwTv/ieSX/3zfj/9p1nb/ + UtJl/z/OU/8wt0b/FHRk/wuJnv8Ep9f/FGNS/wWi0v8TeHz/MpZF/ziiRv8Fo9T/MJRG/zGXQ/8Eptj/ + KJU8/xuFU/8Qf2X/B5Cl/xN+kP88mmz/e9GI/73sw/9ryHf/ldmeQwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAmpTE3D7gd/WLXcf+s6Lb/l+eg/4Dgjv9r2nv/TLZk/wihz/8Rcnz/ + FG5c/xR5UP8Dncr/CmVf/xl+Pf8dhzj/A6LT/xl9Ov8YeT//AqPT/xmbMf8RiEr/CXxl/wWPpP8SbYj/ + CpzN/3avmP+U3p3/d8WCvdP02QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + fsuAAC2vNKwTvCL/kueb/8Xtyv+u7LX/mOaf/3rSiv8rk5z/FHSM/xSDkf8VdWP/BJW+/wVvfv8Eb3v/ + BHCA/wGZwv8Da3n/A2Zy/wKZw/8Ihzf/Bn9V/wRucf8GhqP/EX6g/xaaxv9zsZD/acZ18qvhsyUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2p8fKbMw2xWyI/+m4qj/ + 3fTe/8XwyP+w6bb/ktae/3K6hP9mv3b/ULdi/zukUf8rokL/HaU1/xSaLv8Klib/CJYl/wiYIv8JlyP/ + C6Yf/w+lJf8YnTL/PKRT/1qsbv9uv3//acF18I/OlEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWwYBYVmBq4DaYU/4LNhf/n9+n/2fPZ/8jsy/+z5Lj/ + otym/4nUj/90zHz/W8Nm/0a8Uf83t0L/JrEy/xWuJP8PqRv/C6kW/xCoG/8grir/P7lK/2PGa/9zy3r/ + Zb1t13S9fi8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAOKxXAh+BHmsGjgjuP6Y//8Phwv/t9u3/4fXh/8zryv+54rj/o9mm/4zNkP92wnr/ + Xrlj/0yzUP83qjz/KaQt/xugIP8cnSP/N6k+/123YP9numv5X7Nmj1ieXwsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + DW4OFwV+BowLfQrwSJhH/6bNpP/b69z/5fLm/9Ln0v+8377/pNKm/5fIlf9+u3r/ZbRn/zycPv8qkSr/ + O5o7/02lUPlYp1qmXpxgKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEmQRDwRoBGMGbAW0 + E3AR8DaDM/9dnFr/cKpt/3Cqbf9boln/P487/x9/HP8kfR73MoguxEGMPnVOiEYdPnc7AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5fCwYBVwArA10CUAFaAWYCXwJv + BGACaQxnCFYLYQQ0InMcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + //////8AAAD//wD//wAAAP/wAA//AAAA/8AAB/8AAAD/gAAB/wAAAP4AAAD/AAAA/AAAAH8AAAD4AAAA + PwAAAPgAAAAfAAAA8AAAAA8AAADgAAAABwAAAOAAAAAHAAAAwAAAAAMAAADAAAAAAwAAAMAAAAADAAAA + gAAAAAMAAACAAAAAAwAAAIAAAAADAAAAgAAAAAMAAACAAAAAAwAAAIAAAAABAAAAwAAAAAMAAADAAAAA + AwAAAMAAAAADAAAA4AAAAAcAAADgAAAADwAAAOAAAAAPAAAA8AAAAA8AAADwAAAADwAAAPAAAAAfAAAA + +AAAAB8AAAD4AAAAHwAAAPgAAAA/AAAA/AAAAH8AAAD+AAAA/wAAAP8AAAH/AAAA/8AAB/8AAAD/8AAP + /wAAAP/+AP//AAAA//////8AAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMAQlJSU2 + IyMjajMzM41AQECdPT09nC0tLYopKSllMDAwLlZWVgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHyU9PT2T + VVVV6m5ubv+JiYn/nZ2d/6urq/+wsLD/sLCw/6Ojo/+AgID/YWFh4jQ0NIYqKiobAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIhFGRkaY + XV1d+4aGhv+2trb/29vb//Dw8P/5+fn//Pz8//z8/P/6+vr/9fX1/+vr6//V1dX/tbW1/3FxcfY2NjaF + LCwsCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT05 + U1NT4n9/f//Dw8P/5+fn/+Hh4f/b29v/29vb/+Dg4P/o6Oj/8PDw//f39//9/f3//Pz8//z8/P/5+fn/ + 39/f/7CwsP9ZWVnUJCQkJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCTl5eXveioqL/z8/P/76+vv++vr7/zc3N/8vMzP+2t7f/paeo/5mbnP+cnp//q6ur/7/AwP/d3d3/ + 8fHx//n5+f/8/Pz/9PT0/8/Pz/9wcHDtJiYmNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEFBQUFiYmL4rq6u/7Cvr/+3trb/wcHB/5WVlP9ZW1v/VFZW/2ptb/90fn//foeJ/3qChP95fX7/ + XmZn/z5MUP9ka27/r7Cw/+jo5//29vb/9fX1/9nZ2f91dXXuMzMzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcbXFxc6qGhof+fn5//v7+//4aFhf9QT07/gYWA/7zBvf/R19T/x9jN/8HYyP+92MX/ + utfJ/77ZzP/L29L/yNHM/56pqP9qbW//XVxc/7W1tf/v7+//8vLy/9TU1P9qamrZaWlpDAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAE5OTrKFhYX/oKCg/66vrf9YV1b/hIWD/7rEu/+kv6T/kLqL/3Sld/9gnHD/ + VJ5x/1Cjdv83pXX/Nqp0/0axdf9ow4b/j9Cf/7LTuv+0t7L/Xl9c/4OAgv/n5uT/7Ozs/76+vv9tbW2S + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0NEbW1t/5ubm/+hoKH/W1tc/6Crov+QsJD/aJVd/0RqPf9AbDz/ + To5W/1yqbP9euID/YsGL/zS9i/8hu4H/JLl2/xuwZP8or1z/UcBt/5HTkP+yy6//en56/3Jxcf/h4eH/ + 4eHh/56envu2trYoAAAAAAAAAAAAAAAAAAAAAFZWVr2Li4z/o6Si/2RiY/+frJz/caBq/zdfL/8kUB// + N34s/02YQP9gqWb/b7iK/3LBov90ya//QsWv/zHGqf8/zab/OM6Q/zTNfv81w2X/Wb9V/3DPaf+ezZz/ + gYV//3t8e//m5eb/yMjI/62trZgAAAAAAAAAAAAAAABCQkIiaWlp/qOjo/9oZ2n/k6OQ/12TWf8dPhj/ + GlUT/yx4IP8+fzL/V5NL/3StcP+Ny6f/ldbC/4/ZzP9q08//QcjH/0fIwP9KxrL/Pr+P/0XEcP9k0V3/ + VMNI/13PU/+WzpX/bHNr/5+hoP/g4OD/ubm50vLy8gIAAAAAAAAAAEZGRm6FhYX/g4OD/3+Ff/9pmmD/ + FzgT/xVSDP8fbBL/NX0n/0yWPf9eoE3/bqNi/5HDq/+y3dL/ueTg/4nY4f9CxNT/NbvL/yyzuv8appH/ + I6Fn/0OvW/9dyE//ScM8/13TUv+XwpT/ZWRj/9DQ0P/Hx8f/7+/vCQAAAAAAAAAAWVlZf5eXl/9kZGT/ + ep52/yRYIP8KPwX/FmkN/yZ6Gf82hyT/So41/1iSPv9uoF7/kcGj/9rt4f/n9O//q+bt/1rQ4f9Ixdf/ + LrXD/x2kpP8Xk27/O5hY/1qjUf9Mt0D/P8Ix/3vgc/99inv/m5ub/8/Pz//f398SAAAAAAAAAABra2t/ + iYqJ/213b/9Ki0P/CT4I/xBtDP8XfhH/JoMZ/zWIIv9IjSz/XZhD/3KobP+Oxan/4vDm//P48//W9PX/ + X9bk/13U4/83wc3/K7K3/yOhff9qrm3/WqBU/0SXP/85pi7/XNdP/5O9j/9wb3H/1dbV/93d3RQAAAAA + AAAAAHl4eX95enn/aYRn/yJ1Hf8ObA7/FIIV/xmEFv8lhhn/Nosg/0qSMf9gnUz/dK13/4fDqv/K6uT/ + 8vr2/+36+f+e6+//Z9vm/znH0/8wub7/SLGP/3Oxb/9cpVf/Qpc//y+KL/9Esjf/nd2c/1xfXf/V1dX/ + 4+PjEAAAAAAAAAAAgYGBY3B0dP9chVb/FXYU/w6FFf8Rhxf/GYka/ySMHf81kSP/S5g0/2CiUP90sXv/ + h8Sr/6Pi4v/z+vb/9v34/8r39f+J5+3/PtDX/zPBwf9Ft5n/brFq/1mnVP9DnkD/MZcx/yKGJv+g35z/ + XmFe/9LS0+rt7e0FAAAAAAAAAACMi4wNdnV28kt6Sf8PgRj/EZAb/xSQG/8akR3/JZQg/zWZJv9Knjb/ + XqZO/3Cxdv+CwqP/mN3a/+j39f/5/fn/5fr4/4np6v9Y1tr/TcrG/1G/of9eqlL/T6M//0CfO/8xmzP/ + JpUu/2y0av9dYFz/2drbtfb29gAAAAAAAAAAAAAAAACAeoCZNWo4/w+SHf8RlR7/FJce/xqYIP8kmyL/ + Mp4n/0ajNP9aqEn/bLJs/3/Amf+R1cz/xu7s//f89v/k+Pj/p+vr/43f3P9yx6b/Z7hu/1eqQv9FozD/ + Op8w/zGfMf8voTn/OpZC/25sa//b3NtY+Pj4AAAAAAAAAAAAAAAAALSwuD0qcDP/EZof/xOcIP8UnSP/ + GZ4k/yGgJv8uoyr/Pqcz/1GtRv9ktWL/dr+I/4fMtv+m3tn/6vjz/7fo4/+a2s3/gcul/3C8eP9is1b/ + Uaw//z+mMP83pTL/Oag9/0CtS/8xmj3/f4Z/uNrd2wEAAAAAAAAAAAAAAAAAAAAAv7/FAT+ZSuESoiT/ + EqEj/xSiJf8Yoyb/H6Qn/yqnK/84qzP/Sq9B/1u3WP9twXn/fsyh/5bYxv/D7OL/tunf/5LZu/97y5P/ + ar1r/1u0Tv9Lrjv/Oaov/zmsOP9Er0f/VLhh/0WsUf+YvZxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FpcmkhSkJv8ZqCr/FKcp/xioKv8cqSv/Jasu/zGuMv9Bsjv/UrpN/2jHbP96z43/g9ao/4/dvv+H3bv/ + h9eg/3nOhP9iv2H/UbZI/0KyOv87sDn/RrVM/1G8XP93yX7/WLlm/6LSqTgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAOmR5XFKws/zW3Sf8nsjz/HLAw/xquLP8hri7/KaYy/zGcOP9Ju0f/ULdV/1ewZv9iwXf/ + bMiK/2O8jf9s0X7/YsZr/02uVP9DtkL/N6Y9/zKeQP9GuFL/X8Nq/5/apv9du2z7y/PSEgAAAAAAAAAA + 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 + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmMain.Designer.cs b/AllPurposeAutoSetup/frmMain.Designer.cs new file mode 100644 index 0000000..7015743 --- /dev/null +++ b/AllPurposeAutoSetup/frmMain.Designer.cs @@ -0,0 +1,170 @@ +namespace All_Purpose_Auto_Setup +{ + partial class frmMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain)); + this.btnStart = new System.Windows.Forms.Button(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label1 = new System.Windows.Forms.Label(); + this.btnSelectConfigFile = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.txtBoxConfigFile = new System.Windows.Forms.TextBox(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // btnStart + // + this.btnStart.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnStart.ForeColor = System.Drawing.Color.Purple; + this.btnStart.Location = new System.Drawing.Point(11, 80); + this.btnStart.Margin = new System.Windows.Forms.Padding(2); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(127, 48); + this.btnStart.TabIndex = 0; + this.btnStart.Text = "START"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2); + this.menuStrip1.Size = new System.Drawing.Size(390, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.aboutToolStripMenuItem.Text = "About"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.SystemColors.Highlight; + this.label1.Location = new System.Drawing.Point(-3, 33); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(200, 31); + this.label1.TabIndex = 2; + this.label1.Text = "Generic Setup"; + // + // btnSelectConfigFile + // + this.btnSelectConfigFile.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnSelectConfigFile.Location = new System.Drawing.Point(3, 143); + this.btnSelectConfigFile.Name = "btnSelectConfigFile"; + this.btnSelectConfigFile.Size = new System.Drawing.Size(190, 30); + this.btnSelectConfigFile.TabIndex = 3; + this.btnSelectConfigFile.Text = "Select Configuration File"; + this.btnSelectConfigFile.UseVisualStyleBackColor = true; + this.btnSelectConfigFile.Click += new System.EventHandler(this.btnSelectConfigFile_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(6, 185); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(116, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Current Config File:"; + // + // txtBoxConfigFile + // + this.txtBoxConfigFile.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.txtBoxConfigFile.Location = new System.Drawing.Point(123, 181); + this.txtBoxConfigFile.Name = "txtBoxConfigFile"; + this.txtBoxConfigFile.ReadOnly = true; + this.txtBoxConfigFile.Size = new System.Drawing.Size(255, 20); + this.txtBoxConfigFile.TabIndex = 5; + // + // frmMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(390, 215); + this.Controls.Add(this.txtBoxConfigFile); + this.Controls.Add(this.label2); + this.Controls.Add(this.btnSelectConfigFile); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnStart); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "frmMain"; + this.Text = "Generic Setup"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmMain_FormClosing); + this.Load += new System.EventHandler(this.frmMain_Load); + this.Shown += new System.EventHandler(this.frmMain_Shown); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnSelectConfigFile; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtBoxConfigFile; + } +} + diff --git a/AllPurposeAutoSetup/frmMain.cs b/AllPurposeAutoSetup/frmMain.cs new file mode 100644 index 0000000..d2f984c --- /dev/null +++ b/AllPurposeAutoSetup/frmMain.cs @@ -0,0 +1,395 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Diagnostics; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading; +using System.Reflection; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + public partial class frmMain : Form + { + frmSetupStatusDisplay dlgBuildSoftwarePackage; + + private bool restartApplicationRequested = false; + + private bool rebootRequested = false; + + string pathAndNameOfConfigFile = ""; + + public frmMain() + { + InitializeComponent(); + + Version appVersion = Assembly.GetExecutingAssembly().GetName().Version; + + DateTime buildDateTime = File.GetCreationTime(Assembly.GetExecutingAssembly().Location); + + this.Text = "Automated Windows Setup - " + buildDateTime.ToString("MM/dd/yyyy") + " - Version " + appVersion.Major.ToString() + "." + appVersion.Minor.ToString(); + } + + private void btnStart_Click(object sender, EventArgs e) + { + bool iniFileValid = false; + string msg = string.Empty; + + while (!iniFileValid) + { + iniFileValid = true; + if (pathAndNameOfConfigFile == null || pathAndNameOfConfigFile.Length == 0) + { + msg = "INI file is not provided"; + iniFileValid = false; + } + else if (!String.Equals(Path.GetExtension(pathAndNameOfConfigFile), ".ini", StringComparison.OrdinalIgnoreCase)) + { + msg = "File " + pathAndNameOfConfigFile + " is not an INI file"; + iniFileValid = false; + } + else if (!File.Exists(pathAndNameOfConfigFile)) + { + iniFileValid = false; + msg = "INI File " + pathAndNameOfConfigFile + " doesn't exist"; + } + + msg += "\nPlease select a valid INI configuration file to continue..."; + + if (!iniFileValid) + { + List buttons = new List() + { new MessageBoxCustom.clsCustomButton("Select File...", "0"), + new MessageBoxCustom.clsCustomButton("Cancel...", "1"), + }; + + string result = MessageBoxCustom.Show(this, MessageBoxCustom.PopUpMsgType.CUSTOMQUESTION, buttons, msg, "ERROR!!!", -1); + + if (result == "0") + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.InitialDirectory = Application.StartupPath; + openFileDialog1.Filter = "INI File (*.ini)|*.ini"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + pathAndNameOfConfigFile = openFileDialog1.FileName; + txtBoxConfigFile.Text = pathAndNameOfConfigFile; + processConfigFile(); + } + + } + else + break; + } + } + + if (iniFileValid) + { + bool proceed = runApplicationUsingAdminAccount(); + + if (restartApplicationRequested) + { + this.Close(); + } + else if (proceed) + { + // we only ask for login account if we're starting a new setup process + if ((int)Properties.Settings.Default["CurrentSetupStep"] < 1) + { + provideWindowsPasswordForAutoLogin(); + } + + dlgBuildSoftwarePackage = new frmSetupStatusDisplay(this); + dlgBuildSoftwarePackage.FormClosing += getReasonForSetupFormClosing; + dlgBuildSoftwarePackage.parentForm = this; + dlgBuildSoftwarePackage.ShowDialog(); + + if (restartApplicationRequested) + { + this.Close(); + } + + if (rebootRequested) + { + ProcessStartInfo proc = new ProcessStartInfo(); + proc.WindowStyle = ProcessWindowStyle.Hidden; + proc.FileName = "cmd"; + proc.Arguments = "/C shutdown -r -t 1"; + Process.Start(proc); + + this.Close(); + } + } + } + } + + public string getConfigFile() + { + return pathAndNameOfConfigFile; + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + frmAbout dlgAbout = new frmAbout(); + dlgAbout.parentForm = this; + DialogResult result = dlgAbout.ShowDialog(); + } + + void getReasonForSetupFormClosing(Object sender, FormClosingEventArgs e) + { + if (dlgBuildSoftwarePackage.restartApplicationRequested) + restartApplicationRequested = true; + + if (dlgBuildSoftwarePackage.rebootRequested) + rebootRequested = true; + } + + private void frmMain_Shown(object sender, EventArgs e) + { + string[] args = Environment.GetCommandLineArgs(); + + if (args.Count() > 1) + { + pathAndNameOfConfigFile = args[1]; + if (!PathManip.IsAbsolutePath(pathAndNameOfConfigFile)) + pathAndNameOfConfigFile = Path.GetFullPath(Path.Combine(Application.StartupPath, pathAndNameOfConfigFile)); + } + else if (Properties.Settings.Default["ConfigFile"].ToString().Length > 0) + { + pathAndNameOfConfigFile = Properties.Settings.Default["ConfigFile"].ToString(); + } + else if (pathAndNameOfConfigFile.Length == 0) + { + pathAndNameOfConfigFile = Path.Combine(Application.StartupPath, "config.ini"); + } + txtBoxConfigFile.Text = pathAndNameOfConfigFile; + + processConfigFile(); + + if ((bool)Properties.Settings.Default["AutoRunOnStartup"]) + { + Properties.Settings.Default["AutoRunOnStartup"] = false; + + Common.deleteTaskSchedulerForAutoRunAfterReboot("Auto_Win_Setup_Task"); + + btnStart.PerformClick(); + } + } + + private void processConfigFile() + { + if (pathAndNameOfConfigFile.Length > 0 && File.Exists(pathAndNameOfConfigFile)) + { + IniFileManip iniFile = new IniFileManip(pathAndNameOfConfigFile); + string sectionName = ConfigFileManager.enum_INI_SECTION_NAMES.General.ToString(); + string program = iniFile.ReadValue(sectionName, "program_name"); + + if (program.Length > 0) + { + this.label1.Text = program; + } + } + } + + private bool runApplicationUsingAdminAccount() + { + bool proceed = true; + string msg = ""; + if (pathAndNameOfConfigFile.Length > 0 && File.Exists(pathAndNameOfConfigFile)) + { + IniFileManip iniFile = new IniFileManip(pathAndNameOfConfigFile); + string sectionName = ConfigFileManager.enum_INI_SECTION_NAMES.Global_Settings.ToString(); + string provideAdminAccount = iniFile.ReadValue(sectionName, "Always_Run_Application_Using_Admin_Account"); + + if (String.Equals(provideAdminAccount, "true", StringComparison.OrdinalIgnoreCase) + || + String.Equals(provideAdminAccount, "yes", StringComparison.OrdinalIgnoreCase)) + { + // if application is not run using an admin account + if (!WindowsAdministration.IsApplicationRunAsAdmin()) + { + msg = "This software application must be run using an Administrator account.\n\nClick OK to run this application using an Administrator account."; + + MessageBoxCustom.Show(this, MessageBoxCustom.PopUpMsgType.INFO, null, msg, "INFO", -1); + + ProcessStartInfo proc = new ProcessStartInfo(); + proc.UseShellExecute = true; + proc.WorkingDirectory = Environment.CurrentDirectory; + proc.FileName = Application.ExecutablePath; + proc.Arguments = pathAndNameOfConfigFile; + proc.Verb = "runas"; + try + { + this.Hide(); + Process.Start(proc); + restartApplicationRequested = true; + } + catch + { + this.Show(); + proceed = false; + // The user refused the elevation. + // Do nothing and return directly ... + //return; + } + } + } + } + + return proceed; + } + + private void provideWindowsPasswordForAutoLogin() + { + if (pathAndNameOfConfigFile.Length > 0 && File.Exists(pathAndNameOfConfigFile)) + { + IniFileManip iniFile = new IniFileManip(pathAndNameOfConfigFile); + string sectionName = ConfigFileManager.enum_INI_SECTION_NAMES.Global_Settings.ToString(); + string provideAdminAccount = iniFile.ReadValue(sectionName, "Provide_Windows_Password_For_Auto_Login"); + + if (String.Equals(provideAdminAccount, "true", StringComparison.OrdinalIgnoreCase) + || + String.Equals(provideAdminAccount, "yes", StringComparison.OrdinalIgnoreCase)) + { + enableWindowsAutoLogin(); + } + } + } + + private void enableWindowsAutoLogin() + { + string errMsg = ""; + string password = ""; + string password2 = ""; + string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; + + frmUserInput inputDialog = new frmUserInput(this); + inputDialog.parentForm = this; + do + { + inputDialog.richTxtBoxOverwriteText("There might be one or more reboots during the setup process.\n\n"); + inputDialog.richTxtBoxAppendText("Please provide the password for " + WindowsAdministration.GetWindowLoginID() + " so that the application can auto-login to continue the setup process.\n"); + inputDialog.richTxtBoxAppendText("If there's no password, leave the field blank."); + inputDialog.ShowDialog(); + + password = inputDialog.getUserPassword(); + + if (password.Length > 0) + { + inputDialog.richTxtBoxOverwriteText("Please re-enter the password."); + inputDialog.clearUserPassword(); + inputDialog.ShowDialog(); + password2 = inputDialog.getUserPassword(); + inputDialog.clearUserPassword(); + + if (password != password2) + { + MessageBoxCustom.Show(this, MessageBoxCustom.PopUpMsgType.ERROR, null, "The passwords you entered do not match. Please re-enter the password.", "ERROR!!!", -1); + } + } + } while (password.Length > 0 && password != password2); + + string username = Regex.Replace(WindowsAdministration.GetWindowLoginID(), @"[^\\]+\\(.+)", "$1"); + + WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "AutoAdminLogon", Microsoft.Win32.RegistryValueKind.String, "1", ref errMsg); + + if (WindowsAdministration.GetDomainName() != System.Environment.MachineName) + { + WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "DefaultDomainName", Microsoft.Win32.RegistryValueKind.String, WindowsAdministration.GetDomainName(), ref errMsg); + } + + WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "DefaultUserName", Microsoft.Win32.RegistryValueKind.String, username, ref errMsg); + + if (password.Length > 0) + WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "DefaultPassword", Microsoft.Win32.RegistryValueKind.String, password, ref errMsg); + } + + private void frmMain_Load(object sender, EventArgs e) + { + this.AllowDrop = true; + this.DragEnter += frmMain_DragEnter; + this.DragDrop += frmMain_DragDrop; + } + + private void frmMain_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + e.Effect = DragDropEffects.Copy; + } + + else + { + e.Effect = DragDropEffects.None; + } + } + + + private void frmMain_DragDrop(object sender, DragEventArgs e) + { + + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop)); + + if (filePaths.Length > 1) + { + MessageBoxCustom.Show(this, MessageBoxCustom.PopUpMsgType.ERROR, null, "More than one file detected. Expecting only one file of type INI", "ERROR!!!", -1); + } + else if (!String.Equals(Path.GetExtension(filePaths[0]), ".ini", StringComparison.OrdinalIgnoreCase)) + { + MessageBoxCustom.Show(this, MessageBoxCustom.PopUpMsgType.ERROR, null, "Wrong file type detected. Expecting only file of type INI", "ERROR!!!", -1); + } + else + { + pathAndNameOfConfigFile = filePaths[0]; + processConfigFile(); + } + } + } + + private void btnSelectConfigFile_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + + if (pathAndNameOfConfigFile.Length > 0) + { + openFileDialog1.InitialDirectory = Path.GetDirectoryName(pathAndNameOfConfigFile); + } + else + openFileDialog1.InitialDirectory = Application.StartupPath; + + openFileDialog1.Filter = "INI File (*.ini)|*.ini"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + pathAndNameOfConfigFile = openFileDialog1.FileName; + txtBoxConfigFile.Text = pathAndNameOfConfigFile; + + processConfigFile(); + } + } + + private void frmMain_FormClosing(object sender, FormClosingEventArgs e) + { + Properties.Settings.Default["ConfigFile"] = pathAndNameOfConfigFile; + Properties.Settings.Default.Save(); + } + } +} \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmMain.resx b/AllPurposeAutoSetup/frmMain.resx new file mode 100644 index 0000000..d238e28 --- /dev/null +++ b/AllPurposeAutoSetup/frmMain.resx @@ -0,0 +1,3898 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + z/PlLMsW0zSdl1J28jxvSymbUsq6UqrKGAsAeHEcu2maCqUU55xLznlmWVbMOY8sy5oIIUa2bQ+EED3b + tneFEDtCiC3LsjaEEGu2ba85jnP593//99+wstj7pm3fAezbvr2F7cfHC7Vv+7ZvN73tO4B927e3sO07 + gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3 + t7D9/08bzI8AXVWFAAAAAElFTkSuQmCCKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxJISEgsQEBAQzo6OlY2NjZmNTU1cjExMXsoKCh/ + KysrfTAwMHc2NjZtPz8/X0hISE1PT084V1dXIGBgYAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGCjY2NjYlJSVjHx8fnhwcHMMYGBjk + Ghoa/RwcHP8fHx//ISEh/yQkJP8lJSX/JiYm/yQkJP8jIyP/ISEh/x8fH/8cHBz/Ghoa/xkZGf8cHBz/ + ICAg9CQkJNQvLy+xOzs7gVBQUExkZGQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgUuLi42 + JSUleiUlJb0iIiLvIiIi/yQkJP8kJCT/JSUl/zExMf84ODj/QUFB/0xMTP9UVFT/Wlpa/1xcXP9hYWH/ + b29v/2xsbP9mZmb/XFxc/1BQUP9ERET/Ozs7/zU1Nf8tLS3/KCgo/yMjI/8iIiL/JCQk/ygoKP0lJSXW + MjIyoUpKSlJWVlYZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPDw8BycnJz8fHx+YGxsb3SQkJP8rKyv/MzMz/0FBQf9VVVX/ZmZm/3Nzc/98fHz/ + h4eH/4qKiv+Pj4//lZWV/5qamv+cnJz/nJyc/5ycnP+cnJz/np6e/6Ojo/+lpaX/p6en/6ampv+mpqb/ + oaGh/5iYmP+Pj4//f39//2lpaf9OTk7/NDQ0/yMjI/8jIyP/JSUl/yMjI/UrKyu/QkJCaFpaWh4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpJxQUFIMbGxvaKSkp/zg4OP9AQED/ + W1tb/2tra/92dnb/fHx8/3x8fP96enr/e3t7/35+fv+IiIj/iYmJ/4qKiv+NjY3/kJCQ/5OTk/+VlZX/ + lpaW/5eXl/+ZmZn/m5ub/5ycnP+enp7/oKCg/6Ghof+goKD/oKCg/6mpqf+wsLD/sLCw/6ampv+Wlpb/ + ioqK/3V1df9WVlb/ODg4/x0dHf8YGBj/ICAg9S8vL7dERERNV1dXCgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwC + GhoaQCMjI7MhISH3JSUl/z4+Pv9dXV3/cXFx/3d3d/91dXX/eHh4/39/f/+AgID/gICA/4KCgv+IiIj/ + jY2N/5OTk/+VlZX/mJiY/5ycnP+goKD/o6Oj/6enp/+pqan/r6+v/6+vr/+wsLD/sbGx/7Gxsf+ysrL/ + srKy/7Kysv+zs7P/sbGx/6+vr/+urq7/rq6u/66urv+wsLD/qamp/6ampv+dnZ3/fn5+/1VVVf82Njb/ + JSUl/xkZGf8iIiLbMTExeUlJSRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwEHR0dTB8fH8YhISH/NTU1/1NTU/9vb2//eXl5/3h4eP91dXX/ + c3Nz/3l5ef9/f3//h4eH/4uLi/+Pj4//lpaW/5+fn/+oqKj/ra2t/7CwsP+3t7f/vr6+/8bGxv/Nzc3/ + 09PT/9XV1f/S0tL/0tLS/9HR0f/Q0ND/z8/P/8/Pz//Pz8//zs7O/83Nzf/IyMj/wcHB/7y8vP+6urr/ + ubm5/7y8vP+vr6//qqqq/7S0tP+4uLj/t7e3/6enp/97e3v/RkZG/ysrK/8bGxv/Hh4e7TIyMotPT08d + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkQiAgIMUpKSn/ + SEhI/2lpaf9wcHD/a2tr/29vb/93d3f/fn5+/4CAgP9+fn7/gICA/4qKiv+ZmZn/p6en/7Ozs/++vr7/ + ycnJ/9TU1P/h4eH/5OTk/+jo6P/t7e3/8fHx//b29v/5+fn/+vr6//X19f/19fX/9PT0//T09P/09PT/ + 8/Pz//Ly8v/s7Oz/5eXl/+Xl5f/h4eH/3d3d/9fX1//Q0ND/zMzM/8rKyv/Gxsb/u7u7/7Ozs/+vr6// + sLCw/62trf+oqKj/i4uL/2JiYv8yMjL/GBgY/xsbG+0wMDCFUFBQFQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAJiYmKSUlJa4rKyv9RERE/19fX/9wcHD/cXFx/25ubv9wcHD/dnZ2/39/f/+Kior/ + lJSU/5mZmf+rq6v/vLy8/83Nzf/f39//7Ozs//X19f/8/Pz//v7+//7+/v/+/v7//v7+//////////// + //////////////////////////////////////////////////////39/f/4+Pj/+vr6//v7+//5+fn/ + 9/f3//Pz8//y8vL/6urq/93d3f/S0tL/zc3N/8nJyf++vr7/tLS0/7S0tP+4uLj/rq6u/46Ojv9hYWH/ + MTEx/xcXF/8lJSXkNTU1aERERAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjDh0dHX4wMDDvR0dH/1tbW/9hYWH/ + YWFh/2lpaf9qamr/b29v/39/f/+NjY3/mJiY/6mpqf/Gxsb/3t7e/+zs7P/29vb//v7+//////////// + +/v7//n5+f/6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v////////////////////// + //////////////////////////////////////7+/v/+/v7//v7+///////9/f3/9vb2/+rq6v/k5OT/ + 4ODg/9TU1P/IyMj/xMTE/7q6uv+xsbH/s7Oz/7S0tP+bm5v/XFxc/ykpKf8RERH/KSkpxzw8PDQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAB0dHTcjIyPPODg4/19fX/9tbW3/ZmZm/2dnZ/9sbGz/ampq/3Z2dv+Li4v/oqKi/729vf/T09P/ + 5OTk//Pz8//7+/v/9/f3//j4+P/+/v7///////39/f/8/Pz//f39//39/f/+/v7////////////+/v7/ + /v7+//39/f/8/Pz/+/v7//v7+//7+/v//Pz8//39/f/+/v7//v7+///////+/v7//f39//7+/v////// + /v7+//7+/v/+/v7///////n5+f/4+Pj//f39//z8/P/39/f/7+/v/+Hh4f/U1NT/y8vL/83Nzf/AwMD/ + qqqq/6ioqP+srKz/jY2N/1hYWP8gICD/FxcX9CkpKYRLS0sOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYmJgklJSV8MTEx805OTv9oaGj/Z2dn/2pqav9ra2v/ + cnJy/4GBgf+SkpL/qqqq/8DAwP/V1dX/7Ozs//j4+P/6+vr/+vr6//r6+v/7+/v//f39//z8/P/7+/v/ + 9/f3//b29v/19fX/8/Pz//Hx8f/x8fH/8PDw/+/v7//u7u7/7e3t/+zs7P/s7Oz/7u7u/+/v7//x8fH/ + 9PT0//f39//5+fn//Pz8//v7+//8/Pz//f39//7+/v/+/v7//////////////////v7+//z8/P/7+/v/ + +fn5//z8/P///////Pz8//Dw8P/r6+v/4eHh/9PT0//IyMj/vLy8/7Gxsf+vr6//s7Oz/25ubv8+Pj7/ + Gxsb/yIiIss0NDQtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIyMb + KSkpt0FBQf9eXl7/Z2dn/2VlZf9mZmb/bm5u/3l5ef+Ghob/o6Oj/8bGxv/j4+P/7Ozs/+7u7v/z8/P/ + 9fX1//f39//39/f/9fX1/+7u7v/q6ur/5ubm/+Li4v/d3d3/2tra/9jY2P/X19f/1tbW/9fX1//Z2dn/ + 3Nzc/+Dg4P/h4eH/5OTk/+Xl5f/r6+v/7Ozs/+7u7v/x8fH/9PT0//f39//4+Pj/9/f3//b29v/7+/v/ + /f39//7+/v/+/v7//v7+//v7+//6+vr/+fn5//z8/P/8/Pz/+/v7//r6+v/7+/v//f39//7+/v/5+fn/ + 7+/v/+Dg4P/R0dH/wMDA/7Ozs/+urq7/urq6/56env9jY2P/IyMj/xgYGO0yMjJlAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoPzc3N+JPT0//XV1d/1lZWf9dXV3/ampq/3BwcP+EhIT/ + oqKi/8HBwf/Z2dn/5+fn/+/v7//z8/P/9PT0//Ly8v/t7e3/4uLi/9bW1v/Pz8//y8vL/8nJyf/IyMj/ + xsbG/8jIyP/MzMz/0NDQ/9PT0//X19f/2dnZ/9zc3P/g4OD/4+Pj/+fn5//p6en/7Ozs//Ly8v/z8/P/ + 9fX1//f39//6+vr//Pz8//39/f/6+vr/9fX1//v7+/////////////7+/v/9/f3/9/f3//n5+f/8/Pz/ + /v7+//39/f/6+vr/+vr6//z8/P/+/v7////////////7+/v/8/Pz/+np6f/Y2Nj/zMzM/8LCwv+ysrL/ + srKy/7CwsP99fX3/MzMz/xsbG/40NDSUREREDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKWM1NTXw + WVlZ/2FhYf9XV1f/YGBg/29vb/98fHz/mJiY/7e3t//U1NT/7Ozs//f39//09PT/7+/v/+np6f/h4eH/ + 1tbW/8vLy//Dw8P/vr6+/729vf/FxcX/yMjI/8fHx//IyMj/ycnJ/8zMzP/Pz8//0dHR/9XV1f/W1tb/ + 19fX/9ra2v/d3d3/39/f/+Hh4f/h4eH/4+Pj/+Tk5P/m5ub/6enp/+vr6//u7u7/8PDw//Ly8v/29vb/ + +fn5//7+/v///////v7+//7+/v/+/v7//f39//v7+//8/Pz//v7+///////////////////////6+vr/ + +fn5//39/f/9/f3/+fn5//Dw8P/o6Oj/4ODg/8rKyv+7u7v/rKys/66urv+Wlpb/SkpK/xoaGv8hISG7 + NTU1GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACgoKAMqKip+Pj4++lpaWv9jY2P/YWFh/2ZmZv95eXn/jIyM/6Wlpf/Ly8v/ + 5eXl/+zs7P/s7Oz/6enp/+Dg4P/Q0ND/xcXF/8DAwP+4uLj/tbW1/7e3t/+9vb3/wsLC/8PDw//FxcX/ + ysrK/8/Pz//S0tL/0tLS/9DQ0P/Pz8//1dXV/9fX1//Y2Nj/2tra/9zc3P/d3d3/39/f/93d3f/Y2Nj/ + 2NjY/9nZ2f/a2tr/2tra/9vb2//b29v/3t7e/+Hh4f/j4+P/5ubm/+rq6v/u7u7/8/Pz//j4+P/8/Pz/ + /v7+///////+/v7//f39//39/f/9/f3//Pz8//b29v/19fX/+fn5//z8/P/9/f3//Pz8//n5+f/39/f/ + 4ODg/9LS0v/BwcH/srKy/7u7u/+oqKj/VlZW/x0dHf8ZGRnYQEBAJAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysHMjIykExMTP9UVFT/ + Y2Nj/2dnZ/9mZmb/dnZ2/5mZmf+8vLz/2dnZ/+np6f/r6+v/3d3d/87Ozv/ExMT/vLy8/7S0tP+xsbH/ + sbGx/7Ozs/+2trb/vb29/8LCwv/Hx8f/yMjI/87Ozv/Y2Nj/4uLi/+jo6P/p6en/5ubm/+Li4v/i4uL/ + 4uLi/9/f3//d3d3/2tra/9fX1//V1dX/1NTU/87Ozv/Pz8//z8/P/9LS0v/T09P/1dXV/9XV1f/a2tr/ + 4uLi/9zc3P/X19f/1tbW/9jY2P/c3Nz/4ODg/+Xl5f/t7e3/9/f3//7+/v/////////////////7+/v/ + +/v7//z8/P/7+/v/+/v7//v7+//7+/v//Pz8//39/f/19fX/7e3t/9/f3//Ozs7/u7u7/7i4uP+qqqr/ + bm5u/yMjI/8hISHjMTExNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAALCwsCTMzM5lHR0f/XFxc/1tbW/9hYWH/bm5u/4KCgv+lpaX/y8vL/+Li4v/m5ub/ + 3Nzc/83Nzf+9vb3/sLCw/6ysrP+srKz/rq6u/7Gxsf+1tbX/vLy8/8TExP/MzMz/1dXV/9ra2v/j4+P/ + 5OTk/+Li4v/e3t7/1NTU/8rKyv/BwcH/ubm5/6SkpP+fn5//mJiY/4+Pj/+Hh4f/fX19/3d3d/90dHT/ + dXV1/3h4eP98fHz/g4OD/4mJif+Pj4//k5OT/5ycnP+qqqr/s7Oz/8DAwP/Ly8v/09PT/9fX1//Y2Nj/ + 29vb/+Dg4P/k5OT/7Ozs//Hx8f/19fX/+vr6//7+/v/////////////////+/v7//Pz8//r6+v/5+fn/ + +fn5//r6+v/w8PD/6urq/97e3v/V1dX/vb29/66urv+5ubn/d3d3/xkZGf8XFxfnPz8/OgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLgcyMjKZRkZG/1paWv9WVlb/ + YWFh/29vb/+Kior/tbW1/9ra2v/o6Oj/3d3d/8nJyf+7u7v/sLCw/6moqP+ioqL/pKSk/6+vr/+1tbX/ + urq6/8fHx//X19f/4ODg/+Hh4f/d3d7/2trb/9DQ0P/ExMX/tLS1/6Chof+Ji4v/d3p7/21wcf9kaGn/ + VFlb/1BWWf9NVFf/SVBU/0RMT/8+Rkn/PUNH/zxCR/8/R0v/PkdL/0BKTv9GT1L/TlRX/1RYWv9XWlv/ + XF1d/2FiYv9mZ2f/bm9w/3x/f/+RlJP/pqmp/7K0tP/GyMn/1dbW/9TV1f/Y2dn/3d7e/+Pj4//m5uf/ + 6urr//b29v/8/Pz//f39/////////////f39//r6+v/39/f/9vb2//r6+v/v7+//7u7u//Dw8P/W1tb/ + wcHB/7i4uP+wsLD/dXV1/ywsLP8dHR3oREREOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcDODg4kEdHR/9WVlb/YWFh/2ZmZv9ra2v/kpKS/8jIyP/g4OD/2NjY/8vLy/+7u7v/ + qqqq/6ampv+lpKT/p6am/6Kiov+tra3/w8PD/9PT0//f39//6Ojo/+np6f/g4OH/0NDQ/7W2tv+en5// + goSE/3J0dv9kZWf/VVVZ/0dITP8/QUX/PD1D/zc6QP8qLzT/Jywy/yQrMP8iKTD/ICgv/x8oLf8iKjD/ + Iyox/yMqMf8eJy7/Hiku/yMsMf8qMDX/MjQ4/zc4Ov8+PkD/R0VG/0lISf9ISEv/SEpO/0xRVv9TWF// + VFlg/21yd/+Ok5T/oqan/7m8vP/O0M//4OHf/+Xl5P/e393/4uLi/+fn5//x8fH//v7+///////+/v7/ + +fn5//n5+f/5+fn/8/Pz//r6+v/6+vr/9fX1//Pz8//b29v/vr6+/7i4uP/AwMD/f39//yUlJf8fHx/m + TU1NLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PH5NTU3/V1dX/1lZWf9jY2P/ + dnZ2/5qamv/IyMj/3t7e/9XV1f+9vb3/qamp/6CgoP+hoaH/pqWl/6moqP+3t7b/vb28/9HR0f/j4uL/ + 6Ojo/+bm5v/S0tL/s7Oz/5eXl/+Dg4T/aWpq/09QUf9HSkr/P0NE/zI1OP8pKi7/JSYs/yYoLv8pKTL/ + LCw3/zM4Pf81O0D/Nj1E/ztBSf8+RU3/Q0xS/0hQWP9LUFn/Sk9U/0FKTv8+R0z/P0ZL/0FGS/9CRUn/ + R0dK/0JBRf83Njn/Nzc6/zM1Ov8oLjb/JC04/yQwO/8nNED/LzxD/0BKTf9QWVz/YGdo/36Dgv+qrqv/ + y87K/9PV0P/Y2tj/3t/f/+Xl5f/s7Oz/8fHx//v7+//6+vr/+/v7//X19f/19fX/8fHx//Hx8f/19fX/ + 9vb2/+vr6//e3t7/yMjI/7S0tP+1tbX/dHR0/x8fH/8xMTHgTU1NHQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAzMzNjQkJC+lZWVv9bW1v/ZGRk/3x8fP+np6f/zc3N/97e3v/Gxsb/qKio/5ubm/+ampr/ + mZmZ/5ycnP+np6b/vby8/9vb2//l5OT/4ODg/9PT0v+7u7v/np2d/3p6ev9hX2H/T09P/z0+P/8tLzD/ + KSss/yIlJP8kJyb/KzAt/zU4N/9ER0b/VllZ/2hqav94env/jJiV/5Ognf+eqqn/qra0/7XBv/+/ycj/ + w87M/8TPzf/Gzcv/w8rI/73GxP+0vbv/q7Sx/6Gpp/+epaP/jZST/291df9mbm3/VWBf/z9OTv8rP0D/ + HTU1/xEsLf8WKi7/ICw0/yYxOf8vOT//PUVJ/1BWWf9ucnT/jpCQ/7a4uP/P0M//3N3d/+Hh4f/i4uL/ + 6+vr//Ly8f/+/v7//Pz8//b29v/29vb/9/f3//Dw8P/q6ur/7u7u//Pz8//f39//ysrK/7Gxsf+tra3/ + fHx8/ykpKf8vLy/KWFhYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyPzo6OvBQUFD/WFhY/2JiYv+AgID/ + qqqq/8rKyv/FxcX/tra2/6Ojo/+Wlpb/lZWV/5qamv+lpaX/vb29/9LR0f/g39//4+Pj/9DQ0P+xsbH/ + j5CO/3Nycv9ZWFf/QD8+/zQ0M/8pKSj/HR0e/xweH/8zNjf/UFBP/2hoZf+FhoP/oqOg/7q7uf/LzMj/ + 1NbT/93f2v/a5eD/2OLd/9Pe2v/P2tX/y9jT/8rX0//L2NP/zNjU/8zW1v/M1db/y9XV/8zX1v/R29n/ + 1d/e/9zk4//d5eT/2ODf/9Pb2P/J0s//tMC8/5emof9xhYD/U2pl/ztMUP8eLTf/EiIr/xknL/8jLjX/ + MDY9/0FESf9aWl7/bm5w/4eHh/+xsbH/1dXV/+Pi4v/f39//4eHh/+np6f/29vb////////////6+vr/ + 7u7u//Ly8v/19fX/9PT0//X19f/c3Nz/ycnJ/8DAwP+kpKT/aGho/yQkJP9CQkKobGxsBwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACkpKRs2NjbiT09P/19fX/9eXl7/d3d3/6ampv/FxcX/v7+//6Wlpf+RkZH/jY2N/5GRkf+fn5// + t7e3/9PT0//q6ur/6unp/9fX1/+zs7P/iomJ/2trav9aWFj/RUVE/ysuKf8bGxj/GRsY/ystKv9FRkb/ + Zmto/5CVk//GxMb/2NPX/9rY2//c297/29vc/9PV1v/Lz8//xszL/8zS0//M0tP/y9PT/8rT0v/M1NP/ + zdbV/8/Y1f/R2df/0tfc/9DW2f/N1Nj/ytLW/8rR1v/J0dX/zNTX/8nP1P/Eyc7/zNDU/9fZ2v/b3t7/ + 293c/9fY1//U1dP/tLu7/3yJjv9UZGn/OEhN/yQzOv8mMDj/MDQ5/zY3Pv8/P0L/T05P/2loaP+CgYH/ + qqqq/9fX1//k5OT/2dnZ/+jn5//19fX/+vr6//v7+//29vb/9/f3//T09P/v7+//7u7u/+zs7P/k5OT/ + xMTE/7Ozs/+rq6v/WFhY/yYmJv9UVFR+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAJNjY2t0dHR/9eXl7/Z2dn/3l5ef+ioqL/ + v7+//7q6uv+ioqL/lpaW/46Ojv+SkpL/pKSk/8HBwf/e3t7/4+Pj/8rJyf+traz/ioqJ/2xra/9WVVX/ + PTw7/yglJf8eHxv/HyMc/zc5Nf9obGf/pqum/9DX0f/k6uX/6O3o/9bW2//LydL/xsfN/8THzP/J0NL/ + 0dna/9bg3v/X4uH/3eLh/9/k4//i6eX/5Ovn/+Xs5v/i6+T/3+ng/97o3//e5eT/4Ojn/+Lq6P/j7On/ + 4uvp/9/p5//c5uT/3eXk/+Ll5//d4eL/1tja/83P0f/Gx8r/ycjL/9HLzv/X2tj/4Onl/+Xs6f/L1dP/ + lJ+h/2Bqb/9DSk//ODxB/y4uMP8zMjH/RURE/1NSUv9kY2P/hoaF/7Kysv/a2tr/5OTk/+Pi4v/r6+v/ + +Pj4//39/f/39/f/9PT0//Ly8v/m5ub/8vLy/+3t7f/b29v/zMzM/729vf+fn5//PDw8/zU1NfZdXV1K + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADExMXxJSUn/WVlZ/2VlZf92dnb/m5ub/7u7u/+2trb/oKCg/5aWlv+SkpL/k5OT/6urq//R0dH/ + 5eXl/9jY2P+6urr/lZWV/3l5ef9aWVn/ODc2/yYlJP8jISH/Li0s/1ZZVf+Gi4T/tru2/9je2P/Y3tn/ + yM/K/77FwP++xcD/0NTT/9TZ2P/S2df/09/Z/9bl3f/W593/0ebZ/8vj1P/J4M//yN/O/8Tdy//C28j/ + vtrE/73awv+828H/vNvC/7zayP+62cf/uNrH/7jax/+73cn/v+DM/8Lizv/H5dP/0eja/9br3P/X6d3/ + 1+Tb/9bf2f/W3dj/3N/c/8TNx/+0wrr/xNDJ/9Td2P/e5+L/1tzc/7O5uv+IjY//V1lZ/zw7Ov8xLy7/ + MjEw/z08PP9QUFD/cHBw/5STk//Hx8f/2tra/+bm5v/s6+v/8/Pz//39/f/7+/v/9fX1//T09P/t7e3/ + 6+vr/+np6f/a2tr/wcHB/7i4uP+MjIz/NTU1/0pKSuJycnIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTE5PDw8805OTv9hYWH/dnZ2/5KSkv+vr6// + rq6u/5ucm/+SkpL/kpGS/5uam/+0s7T/1NTU/+Li4v/Ly8v/oaGh/4ODgv9kZGH/QEA+/y0sLP8fHh7/ + JiUk/0tKSv+PjY7/x8vH/9Pb1P/S2dL/y9LM/8HIwf+9xL7/ydDK/9rh3P/U3dD/0N3L/9Lhz//O4c3/ + xNzF/7jVu/+szLP/pMmt/5zLqP+azKf/lcik/5DGn/+LxJr/iMOX/4jFl/+Jxpn/iMad/4LFnP99xJr/ + fcWb/4LHnv+Hy6L/i86k/4/Pp/+Tzav/mdCu/6bVt/+03ML/weHL/8fi0f/I4dL/z+DS/9Xf0//Q29H/ + xtHJ/8HMxv/H0c7/09rZ/9vh4P/Gx8j/lpSV/1hWVv82NDP/Ly4t/zU1Nf9DQkL/U1JS/4SCg/+pqKj/ + zMvL/9zb2//l5eX/8fLx//r6+//7/Pz/+vr6/+jo6P/n5+f/6enp/97e3v/Q0ND/xMTE/7Kysv9ubm7/ + Ojo6/2ZmZqqgoKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ojo6Djc3N9BMTEz/U1NT/2dnZ/+JiYn/o6Oj/6enp/+Tk5P/i4uL/5CQkP+bnJr/wMG//93e3P/a29n/ + vby7/4uKif9raWj/VFJW/zAuN/8jISX/JSQj/05NSv+enZn/zs7M/9fW2P/HycP/usC1/7vBuP/EysH/ + zNXN/8zX0f/G083/wc7K/7TNtf+ry6r/pcik/5vBmf+QvY7/ir2I/4rBif+KxIv/fb+H/3zAif99wor/ + e8OK/3nDiP9zwoX/ccGC/2/AhP9qvYj/Zb+I/2HBif9iwor/ZcOM/2fEjf9kw4r/a8eO/3PKk/9rwoz/ + a72K/3PAkP9/xZr/isuk/4zNo/+j0K//utO8/77Ywv/E28n/yNrP/8jV0P/Fzcz/wcfI/9Pa1v/f5N// + 0tLQ/6Kfn/9cWFr/LCkp/yoqKf88Pjr/R0lF/2FjYP+VlpX/wsPD/9DPz//j4uL/8fDv//f19P/4+Pj/ + 8vLy/+vr6//o6Oj/5eXl/9zc3P/W1tb/t7e3/6ysrP9YWFj/T09P/4SEhF8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODiARUVF/1dXV/9mZmb/eHh4/5aWlv+fn5// + jIyM/4WFhf+Qj5D/oqOi/8nNxv/h5N//ztDL/6Okn/+GhYH/ZmNi/05KR/8vKzL/Hhot/0hFTv+Ni4r/ + x8e//9DRx//CxMD/wsTH/8rMyf/HzsP/wMu+/7nKt/+yyLL/p8Wq/5q/ov+UuZ3/iruO/4a9if+Evof/ + gb6E/3u/fv93v3r/dL94/3C8df9ip2//XqZv/1ymb/9YpW7/VqVu/1Okbv9SpG//UKNw/0efcv89oHH/ + NaFx/zalc/88qnb/P694/z6xd/9GtXn/ULx6/1W/ev9Zw3r/YsmC/2jNiP9pzon/Z86F/3bJjP+HyJf/ + kM6e/5/Urf+v17r/utbF/8HTy//F0s3/vM/B/7vLvP/O08z/4d3e/8/IzP+Jg4b/RkdF/ycrJf8wOC// + P0U//1daWf+Gh4n/p6Om/9jT1P/w6+f/7+rm//r6+v/8/Pz/9/f3/+3t7f/m5ub/4+Pj/9zc3P/Ozs7/ + wMDA/5OTk/9CQkL/Z2dn5p6enhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/Kz8/P/BRUVH/YWFh/3BwcP+Hh4f/nJyc/5qamv+Hh4f/iYmJ/6enp//Pz87/3+Lf/77Av/+ZmJf/ + eHh3/1taWv89Ozv/JCIi/ygmJf9pamX/vr+6/9ze2f/Dx8H/tb22/77Hwv/By8f/uMnF/67Gvv+kwa7/ + l7uX/4y4hP+FuXb/f7pt/327av94s2n/d65s/3CnbP9nnm3/YJNt/1eJa/9Ngmj/Q3xl/zt4Wf85eVr/ + OXtd/zh+Yf85gmX/O4Ro/z6GbP88iG3/M45q/yOMZ/8UiWP/EIpi/xONZP8OjmL/CI5e/xKRX/8hmGH/ + Kpxj/zOmZ/9AsW7/Ur58/1bDf/9bxYD/YsaB/2jHgf9qx3//cseF/4DLkv+P0KL/ntWu/6jYtP+y1rr/ + w9zF/8TTxP++xLz/09HQ/+Xh4v+1s7T/YF9f/zg5Nv8yMjD/MzAy/05JT/91cXX/qKOk/9nV0f/v6+f/ + 6+vq//X19v/6+vr/9fX1/+vr6//k5OT/2tra/9DQ0P/BwcH/p6en/3Fxcf9aWlr/kJCQnAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj6yS0tL/1xcXP9ra2v/gYGB/4uLi/+MjIz/ + i4uL/5OTk/+pqan/y8zL/9nZ2v+urLD/j42Q/25sb/9bW13/Ozs9/x8eIP89PT7/mpuV/9bZyP/Fyb// + tr63/625s/+vwbX/rMOv/6O7o/+Rupb/grSI/3Spd/9wpm3/dq5s/3ezaf9rq1v/YKFP/1+MVP9XgFP/ + RnVM/zpqSv86ZE3/QGtT/0V0Wv9Fe2L/Q4tj/0KPZv9Ckmr/RZZv/0ebcv9JoHX/SaJ4/0uke/9IqHj/ + Oqd3/yqjdP8jo3L/IqJz/xqhcP8Vom3/FZ5q/xWcZv8RlGH/CIxW/waKT/8Zlln/JaFe/y2nX/85t2X/ + Pr9k/0C+YP9PxWr/Ycx6/3DRhv93z4z/dsqJ/5TPoP+r1rH/uNe5/8HUv//EzcL/x8rG/8/Oz//W1Nb/ + ioaH/0dBRP80LDH/PjU9/01HS/9rZmj/o6Cc/8PBvP/Y2Nj/7Ozs//r6+v/4+Pj/7+/v/+jo6P/g4OD/ + 2tra/8fHx/+9vb3/np6e/11dXf97e3v4tra2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ozs7SENDQ/9VVVX/ZGRk/3Z2dv+QkJD/lpaW/4aGhv+BgYH/qqqq/9bW1v/T09P/srGz/4uJj/92c3j/ + T09S/y4wM/8uMTL/YWZl/6+1tP/Hy8X/xMS6/7W8tf+ntq7/nrWm/5e3m/+Qt4v/ibN8/3qza/90smX/ + c61m/2miYf9dkVf/UntO/0JnQf82YDn/OFE9/ztWRP8+ZUr/QXRQ/0eDV/9Pj13/Vpdi/1ecZv9SpGf/ + Uqdt/1OpcP9SrHL/U7Fz/1W1dv9Wtnn/WLd+/1G0gv9BsX//MbB9/yivfP8nr37/I69+/x2ue/8grnr/ + Iq51/yCrbv8Vo1//Ep9a/xuiYf8Sm1b/CZVM/w6dTP8Xp0z/I61Q/zW3Wv9EvmP/VMVw/2PNe/9u0oD/ + g9OT/5TUnv+j16X/r9au/7XQtP+5ybn/v8e//8rNyf/Qzcz/pKCg/11XWv8tKS3/NC80/0E+P/92dXD/ + l5aR/729vv/a2tr/8fHx//j4+P/z8/P/7u7u/+rq6v/i4uL/0dHR/8jIyP+2trb/fn5+/2lpaf+jo6PD + 0tLSBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/Pwc8PDzKTU1N/11dXf9vb2//iIiI/5aWlv+SkpL/ + kZGR/6Kiov/Hx8f/1tbW/66urv98e33/bmlv/1BMUv8yMjT/MTU0/3B2c//AycX/wczG/7S9t/+prar/ + m6uh/5aynv+RuZf/g7SA/3epaP9zqFr/bqJc/2WUWf9chFH/SWpD/zJQLv8uQyv/Mkcy/zdTPv89a0b/ + RHlN/0uEU/9Qjlr/VJpd/1mhX/9cp2T/XKpq/12ycv9ftHf/X7d7/165ff9cu37/X76A/2DAgf9gwIb/ + V7yJ/0S7h/82uof/KrmG/ya5hf8muoX/IbeA/yO5gP8luX3/Jrp4/yO4bv8ouXD/K7hy/x2vZv8OpFj/ + F6lZ/xyqWP8Rnk3/E5tJ/ySkUP88tGH/Tb9s/1XEbf9kyXj/d9CF/43XkP+X1ZX/n9Kc/6fNpv+wyq7/ + s8ex/8DIu//U2c//xsrF/2doaP80NDb/MS4v/0lHRv9oZ2X/kZGR/7i4uP/d3d3/8fHx//b29v/19fX/ + 7u7u/+Xl5f/c3Nz/zc3N/7+/v/+pqan/bm5u/4qKiv/Ozs5SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + PDw8VUFBQf9XV1f/ZmZm/319ff+VlZX/kZGR/319ff+hoaH/09PT/8/Pz/+ioqL/goKC/2poav9QS07/ + MzAz/zk6Of+JkIr/x9DJ/7jFuv+jtKb/nKue/6GzpP+SspX/fKp9/2ykav9qpGP/aZ5a/2GTTv9Sc0r/ + OFE4/yU3Iv8oMyT/LUcp/zliMv9EcDz/R3M+/0eGQ/9NkUr/VJpT/1iiXf9cqWT/Xatn/16sbP9crXP/ + YrV9/2K4gv9iuob/Y7yK/2TAjP9nwo//asOP/2nEk/9gxZT/TMOT/z3DlP8rwo//IsCK/yLAif8avX7/ + Hr5//yPAgv8gvnz/Hbx1/ynAfv8pwHv/Jb13/xy5bP8ht2r/J7Vp/yKwYP8hqlv/HqNX/x+hU/8op1T/ + Na9Y/0rBZv9ey3D/d9V7/4HVfv+J0YT/l9KS/6PUof+r1Kn/tc2y/7LFrv/G1cX/z9jR/4aLif8uLS7/ + LSor/0ZDRf9mZmb/j4+P/7q6uv/d3d3/7+/v//T09P/v7+//6Ojo/+Li4v/U1NT/xsbG/8DAwP+Kior/ + enp6/729vc3a2toHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSgZAQEDNUlJS/2dnZ/90dHT/h4eH/5OTlP+IiIn/ + ioqK/8LCwv/b29z/paWm/3l5ef9tbm7/WlhY/zMuL/9BPj7/mpyY/8TNxP+zwbT/s8Kz/6W2pP+SqI// + haiA/32tdP9np1v/WaBN/1WXTf9LekT/MVAs/yAyHP8iNB//J0Ui/y9XJ/83aS3/QXcx/0eDN/9Niz7/ + TphG/1KfT/9VpFj/Walg/1yuZ/9es2z/YbZy/2W5e/9nvIP/Zr+J/2bAjP9mwo//aceU/2/Kl/9zzJr/ + dM6f/2rOoP9WzaD/Pcuc/y3Jl/8kx5P/H8WO/xrEh/8fxoj/JMeH/yPFgv8qyIr/McmM/zLJiv8pxX// + I8J3/yG+dP8gunD/H7hq/yO2aP8puGf/K7Zh/yWvWP8eqFD/JKtN/z++V/9m1Gz/ddly/3nUc/+C0H7/ + jc+K/5XPkv+pzqb/sdKw/6rFq/+6y7z/ytTO/5SVl/80LjP/Lict/05OTv9tbW3/k5KS/7m4uf/b29v/ + 7u7u//X19f/x8fH/5ubm/93d3f/Ozs7/xMTE/6mpqf96enr/np6e/9PT01MAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCS0tLS/9dXV3/cHBw/3x8fP+NjY3/ioqK/4SEg//BwsD/2trZ/6qqqP96enj/cXBw/2NgY/8xLy// + Pj46/52dlv/FyLn/uMGt/6m5ov+Zs5n/jayV/3uke/9vpV//aKFZ/2KfVP9MhUH/J1Mg/xouF/8dJhr/ + I0Qe/ypaIP8yYyb/PHMs/0OBNP9Jizf/SZA4/0iRPv9NmUj/UqJU/1aoXP9asGT/YLhs/2G9cv9jwnr/ + aMSD/27Fi/9uxpD/bceU/27Kl/9wzZz/c8+c/3bQnv950qX/cdSs/1/Ur/86zJ3/LMqb/yfKnP8py53/ + JMqX/yfMlf8r0JX/Lc6U/zXRmf80z5X/Ns+S/zDOiv8tz4X/I8h7/x7Cdf8mxnb/Lcd1/zDDcv8svWr/ + K7hk/ym2Xv8rtVf/LK9N/0C0Tv9cw1n/cNFn/3jScP980nX/gdV8/47Lh/+c0Zn/ocmi/6/Ks//Az8P/ + zdLL/5OPjf9HQUL/Nzk4/1NTUv9tb23/k5WT/7m7uv/g4OD/9/X2//Xz9P/p6en/5OXk/9TU1P/Gxsb/ + vr6+/4iIiP+Hh4f/0NDQyPf39wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz/AWlpa/1xcXP90dHT/gYGB/42Njv+JiIj/ + naGc/+Lm4P+2uLP/ent2/3Z1cv9jX2D/QTpA/0xJTP+nsqj/u8Gx/7S6of+tuZj/mrOM/3unef9hnXD/ + Vppb/16gTf9UiUr/N1sz/xorGf8XHxX/HDAa/yZHJv8rYSX/MG8j/zZ2Kf89gC7/Q4kz/0iSNf9LmDn/ + TpxA/1WlSP9aq1P/XrFe/2G2aP9mvHP/ZsB6/2fDg/9rxYz/dMWV/3TFmv90xp//c8ei/3bKp/94y6f/ + eMuo/3nMrv9vz7L/Xc20/zzGp/81x6v/MMao/zPJqv8zyqf/Lsqg/yvQnf8106P/QNam/z7Xn/9A2Jz/ + ONaS/zLWjP8t04T/LdCB/y/Pfv8xzXz/Nsp7/zbGef82w3L/NsBt/zO8ZP82t1j/RLJS/06uSv9buE3/ + as1b/27aZP9p3V//d9hr/4bXgP+Q0Jb/msWh/67Lrf/E1Ln/xcy5/6aonf86Pj3/LTIv/05TT/9udHD/ + lJmX/8C+v//m4OP/9O/y/+3t7f/n5+f/2NjY/9DQ0P/Jycn/np6e/4mJif/CwsL/8/PzQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBANEdHR/xfX1//ZGRk/4ODg/+Wlpb/hYWF/52dnf/S1NH/wMK//4SFg/98fHr/Y2Ni/0E+P/9GQkT/ + lpSW/8HKwf+0vrT/m6qd/4+okP9+o3r/aZ5h/1ydTv9Vk0b/Rnc9/x9GGf8UJhH/FSoS/xxBGf8nViP/ + LmEp/ypwI/8reyP/MYAo/zmILv8/jzT/Rpc5/0ucPf9Qn0P/VqNP/1ymW/9jqWb/aaxy/2+vfP9xsIT/ + crKN/3Wzlf9utJj/brae/224o/9vu6b/dMCt/3bEsf94xrL/dMS0/2TBsv9Sv7P/QL20/zS8s/8zvbT/ + NsC3/zXBtP8vwan/Mcem/z7Kr/9IzLP/Rsur/03Pq/9Kz6T/Rc+c/z7VlP852o//NteJ/zTUhP820oD/ + OM96/zrPdf860G//N8hn/zrAXv9KvFn/ULhP/1a2TP9Yukv/XcRT/2LRXP923Gv/edZ0/4DPgf+RzJH/ + ncuX/6nFn/+3xLD/v8S9/46QkP8yMzP/OTo5/1VXVf+Bg4H/m5qb/8fDxf/39fb/8/P0/+jo6P/g4OD/ + 19fX/8vLy/+zs7P/j4+P/62trf/p6emjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT2YUFBQ/2RkZP9ycnL/i4uL/5SUlP+NjY3/ + w8PE/8zMzf+FhYb/b29x/2NiZf9PTlH/R0hK/4WHhv+9v73/qrSt/5eqn/9/oYz/cp98/2edaP9jnlb/ + Wpc9/ztrJf8ZNRf/ECgO/xQrEv8aQRb/IFgb/yZoH/8sdCL/KX0i/yqDJP8ziSn/PpAz/0aVOv9Klz// + TZhD/0+YRv9Ul0//XJdZ/1+WX/9lmGz/bJ99/3KiiP96pZP/fKia/3ezn/92t6b/d7qs/3e9sf94wLb/ + eMO6/3fFu/92xb3/cse//2nFwv9WwL3/R769/z+/vv8/wMD/QsDA/zq+t/8xvK3/N76u/0jFuf9Qx7n/ + TsSw/0nDqP9EwKH/Rc2g/z/Wmf881JL/O9OK/z3UhP9B1YD/P9V4/zjTbP860WX/Q85d/1jNX/9hy1r/ + XsJQ/1G1RP9KsEH/S7VG/1/OV/9l0mH/dNRv/4LVe/+Kz37/l8aM/6rEqv+8ycP/wcLA/3x8e/8zMjL/ + Q0FC/2ZlZv+AgID/pqen/9vc3P/z8/P/8PDw/+rq6v/e3t7/z8/P/8XFxf+ZmZn/mpqa/93d3dUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + U1NTD0BAQOpXV1f/Z2dn/319ff+Kior/hoaG/6urq//X19j/oJ2g/2tpbv9tbHH/TExR/0BDRv9+hYL/ + tr62/7W/tP+XqJ3/g6OH/2+mdP9go2H/VppS/0qFQf8uWx//FCsK/w4ZDP8SMRH/HEgY/yNaG/8hZRn/ + IXEa/yd8Hv8uhCP/NYgp/zyLL/9DjTj/SI08/0qKQP9Jh0H/S4ZE/1KFTP9biVX/YIxd/2STav9qoX3/ + dKuM/3+zmP+GuqL/h8Sp/4fIsP+Iyrf/h8y8/4fPwP+G0cP/hdLG/4TTxv990Mf/dM/I/2fNyv9Sycb/ + QsXF/z7DxP86wb//OcG8/zvCuf9AxLr/Ssi7/1XLv/9Wyrz/UMWx/0fApv9Ewaf/PMGd/z/FmP89yIv/ + R8+J/1PVjP9T1oT/R9Ry/0HSZv9J0l//WtNf/2TSXP9jzFX/W8JP/1O5Sv9LtEb/Rrw+/1LIS/9l1V3/ + cdpl/33YbP+O1IL/nMuf/6PBrv+9xrv/vsO7/29xbP80MjL/WFZW/2pra/+LkI3/rrKw/+Hh4f/39/f/ + 8vLy/+Xl5f/U1NT/ycnJ/6ampv+Xl5f/zc3N3vX19QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJSUlVQEBA/2BgYP9wcHD/goKC/4qKiv+SkpL/ + zMzM/7y7vP99e33/dHN3/11cYv9ERUv/XmNi/663r/+tvKn/nLCY/4Kkif9pnGj/XqNU/1GfQf84gC3/ + HU0a/wwaDP8MEQv/DiwM/xZDFv8gVxn/JGgZ/yp4G/8tgR7/KYAf/zWBKv9AgzL/PoAx/z57Mv9BejX/ + Rns7/0p9QP9PgUf/WYpP/2SUWf9sn2P/catw/3q8gv+Fypb/i8+i/5HUq/+Z2rf/m9y+/5rdw/+Y3sb/ + l9/J/5bgy/+V4c3/k+DN/47fzv+H39H/fd/W/2rb0/9X183/UNXL/0zUyP9L0sj/SM7G/0HLwf89xrv/ + Q8a8/0zIvP9Py7f/Ucyx/1rKtf9YxbL/Sr6j/zi1iv8+uYf/ScCF/1LHgf9UzHb/SM9o/1LWaf9j2mn/ + ZtVg/2LOVP9hy1P/XchT/1fATv9EuTj/Rb07/0/KR/9d1lH/a9xb/33ab/+J0Yr/j8eX/6fEpP/B2L7/ + r7qs/1haVf87OTn/WFhY/21yb/+Kj4z/v7+///Dw8P/09PT/7Ozs/9ra2v/Gxsb/tra2/6Ghof+9vb3k + 7u7uEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAENDQ7VFRUX/ampq/3p6ev+Hh4f/k5OT/7CwsP/Kysr/iYmJ/3Jwb/9yb3D/UE9T/1BTVv+ao53/ + qbmm/5irjv+Nq4P/ZJ1o/1mWVf9VlET/OHYl/xRHCv8IHQX/DBMP/w4oFf8QRAz/GlYU/yBnFv8ldBn/ + L4Eh/zSCJP8veSH/M3Um/zlzK/84cSz/OnIw/0F4Nv9Mgz7/WI9J/2GaVP9tp1z/erFo/4K7c/+ExH7/ + ic+O/4/Vn/+P1qj/k9iv/5vZuv+d3MH/m9zF/5ndyP+Y3cr/lt3M/5Tdzv+S3c3/itvN/4Tb0f932dT/ + ZtfU/1PSzf9Hz8r/R9DN/0XPzP9Fzcn/Rs7H/0vPxv9LzsH/Scq8/0nIuv9ExbX/R8Ky/1TEt/9GvaL/ + Q72W/0vAlP8/uH//PrV0/z6zbP82uWD/Tcpq/2fYcf9u2Gj/adRa/2fSVv9k0FX/XstR/1PDQf9Guzn/ + Qbs6/0rIQv9W00v/ZtZZ/3fWcf+D1oP/l82V/6TOov+xy6//lZ+S/0BBPv88PDz/Zmpo/3N3dP+dnZ3/ + 0tLS/+/v7//v7+//39/f/8rKyv/ExMT/ra2t/7W1tfXk5ORi9vb2AQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUVPDw88lJSUv9ycnL/goKC/5KSkv+YmJj/ + wcHB/6mpqf9ramr/bGlj/15cWv9XWFn/f4WE/7G9s/+WqI//kKWA/36mb/9PoFD/V5lW/0JyO/8UMg3/ + CBcF/w0YCP8XKRD/GkgW/xFdC/8Zag//IngU/yV8Ff8mdhj/KG0b/zFqI/8zbif/NnMq/zp4L/9CgzX/ + TZA9/1mfSP9krFP/brdd/3K7YP93vGX/fbtt/328dv+JxI//jsih/5HKrf+WzbX/mM67/5nQwP+b08b/ + mdXK/5jVzf+W1s7/k9XN/5XW0f+V19X/jNbY/33T2/9gytD/TsXO/zy/yv83vsz/N7/K/znCyv85wsj/ + QMXI/0bGx/9Hx8H/TsnA/1bPxv8+xrL/Lb6l/yy7nv8vupf/K7aH/y2zfP85tn3/QLh5/ziybv8+tGf/ + TsFj/2fQZv9u2V7/bttY/2fXVP9g0lD/X8ZH/1XBRf9Duj//OLk3/z7EO/9Y10v/atxb/3HXZ/+K1Yn/ + kMuP/6TKof+0w7D/eHp3/zY2N/9ZXVz/am5t/4KBgf+qqqr/6Ojo//Hx8f/h4eH/1NTU/83Nzf+ysrL/ + r6+v/93d3fTy8vIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAElJSVE9PT3/YWFh/3d3d/+Hh4f/lZWV/6urq/+7u7v/f39//2VkZP9nZ2H/UlFP/3d3eP+qr67/ + nKuc/4ulhP+BonH/aJ5W/0mgQf9AfUD/HTke/wYIA/8LFgf/FDcN/xlKC/8eYhH/IHMT/xtxDv8cdBD/ + HnES/x5nE/8gYBf/LGIh/zh4LP9BiTP/SZA7/1OdRP9cp0z/Y61S/2OxUv9ks1P/Zq9V/2mrV/9tqF3/ + bqdn/32xg/+Iu53/j8Gu/5vJu/+czb//odLH/6DTyf+h1c3/otbR/6PZ1P+i2tb/o9rX/6Pb2v+a2t7/ + itfg/3DN2f9ZxdL/RL7P/zy90/86vtH/OsDO/zi+zP87v8z/PL3K/z68xP87usD/Nrm6/yO3qv8fvKf/ + ILmi/x60lP8bsIP/IK57/yqwd/8prm7/MbBs/zWvZP88sVn/Vr5g/2TJX/9oz1j/ZtNV/2PTUv9by0T/ + Ws1J/07DR/86tDb/Orgz/07PQ/9d3E//X9pU/3zYeP+H04T/mc2W/7TOsf+nr6X/YWJh/zs7O/9sbG7/ + c3Nz/4mJif/R0dH/8fHx/+bm5v/b29v/0NDQ/7e3t/+wsLD/1dXV//Dw8CAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/p0hISP9paWn/eXl5/4yMjP+SkpL/ + yMjI/6Kiov9kZGT/ZGNj/2FhYP9WVlb/nZ2e/6Sspv+NpYz/f6d3/2WeWv9SmkP/RJE0/xhFFf8GDQT/ + CQ4D/w4oBP8MRQX/DV4L/xduFP8nchX/IGsQ/xxlD/8cYxL/ImcW/ylwHf8wdyT/P4wx/0ubO/9QnkD/ + VqFG/1ujTP9fo0//XqFQ/1yfTv9gm1D/Z5tU/2+fXf9tomX/eq99/5DCo/+Ev6P/lcq3/6HSw/+k1cf/ + p9jN/6vb1P+v39n/suLd/7Tj4P+x4t//q+Df/6Pf4v+T3OT/f9jk/2LN1v9Ox9X/QcXX/zzD1P82v8// + NL7O/zW8zP83usv/OrnJ/zm3xf8xsb3/IKyv/yGwsP8erab/GqiW/xqlhv8fpH7/JqZ2/yemb/8mp2L/ + Lqxg/z2wY/9MsmX/U7Jf/127Xv9nx1z/bNFb/1PZRP9S10L/Vc9F/06/Pv9DszT/P7g0/0nRQv9X4U// + b9lg/3rZcv+M1Yf/otOj/7jOuP+HjYX/Qzs//1xUWf9tbm7/c3R0/6Wlpf/q6ur/7+/v/9vb2//Ozs7/ + wcHB/7i4uP/S0tL/8vLyHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGtrawRCQkLfS0tL/2xsbP97e3v/jo6O/6mpqf+2trb/g4OD/2JiYv9iYWH/VVJS/3Z5dv+irKT/ + nK6d/4WohP9tn2b/U5RJ/0WHNv8jVBX/CScG/wUOA/8LIgb/GEIK/xdYCP8VZxH/FmkS/xZiC/8ZZA3/ + H2gQ/yZwFv8veR//OYMq/0SMNf9HlDj/R5Y4/0iUOP9IkTn/TZI//1SWRf9bnE3/YaJS/2GcT/9onFT/ + bZ5a/22hY/9upm7/fLSL/3q3lv+ezr7/qNbK/6nYy/+x3dT/uOLb/77m4f/C6eT/wenm/73n5f+25OX/ + quPm/5zg6f+M3uz/adDc/1PJ2f9Dxdf/OsLS/zG+zv8vvc3/MLrL/zC4yf82ucv/O7jK/zezwv8lrbb/ + H6uy/xilpP8Yopn/HKCN/xqbf/8bmHH/H5hq/yCeYf8YmVX/G5dP/zenXP9LtWH/VLpe/169Wf9iwFH/ + WM1J/1nRSv9b00z/UcpD/0O9NP87tyz/Pb8w/0jLO/9l21j/cNto/3vRdf+Y1Jb/r9Gv/6Ctnv9qZ2b/ + TUhK/2pra/9paWn/jIyM/9LS0v/u7u7/4eHh/9LS0v/FxcX/uLi4/9HR0f/v7+8jAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dnAUNDQ/9QUFD/cXFx/4GBgf+Tk5P/ + vb29/52dnf9hYWH/YmJi/19fXv9dW1n/mZ+X/56xn/+Ep4X/bZ9r/1iVU/89hzf/LWwj/w4eBf8FFAP/ + BhwD/ww7Cf8YVg7/GGIK/xlmDP8XYw7/FGAN/xtoEP8lcRf/Lnsg/zeEJ/8+iy7/RpM1/0STNf9DkDT/ + RZA2/0iOOf9Njj3/UJE//1iXRf9emkn/X5hJ/2WZT/9qnVf/cqNi/3Smaf94qXX/eK2D/6LMu/+r2Mz/ + tN7O/8Pk0f/U6dr/3Ozi/+Du4//f8OT/1O7r/8Po6f+25uj/peLn/4na5P9s0+P/YNDf/1fO2/9DyNX/ + McDP/yu7y/8vucv/MLrK/zfA0f8zuMj/NLTH/ymuv/8bprH/FKKm/xOenf8Um5H/E5eE/xWUdv8WkWf/ + GZRa/xmVVP8VkVL/GJFT/ymaU/9Or13/Yrld/2G2Uf9Xt0j/VsBJ/1fMSf9R0EP/Rso3/z/BLf8/uyv/ + Q70v/1LXRv9j3lr/a9Vm/4fWhf+l1aL/s8yw/5KZjv9MSkn/YWFh/2FhYf9ycnL/sbGx/+jo6P/o6Oj/ + 19fX/8jIyP+6urr/z8/P/+vr6yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARUVF/1hYWP94eHj/ioqK/5mZmf+/v7//gICA/1BQUP9lZWX/X19e/3x7d/+ptqb/ + iqyJ/2qca/9RklH/SI5E/y12KP8TRQz/CgkD/wYZA/8HMwb/C08J/w5dCP8PXwX/FV8G/xljDP8cahX/ + I3EZ/yp6H/8wgSL/NIQk/zeIJP87iif/PIor/z+MMP9HkDf/TZM8/1KVPv9Skz3/VpM//1eSPv9ck0P/ + Y5hM/2mcVv9womD/dqdp/3uqd/9/sIj/lcWu/67Zzf+74dP/zunY/97u3//l7+b/6fLn/+n06v/f8+// + z+7w/8Hq7v+q5Oj/idrh/2zT4/9m0+T/X9Hf/0nL2P86xdT/OcLV/zu/0/84vc//Nr7O/zG4xv8xtMX/ + Ka++/yKotf8dpa3/GqGj/xecl/8VmIn/FZN7/xiRbv8bkWH/G5JZ/xiQVv8XjFD/IYtJ/0KaT/9bqlX/ + ZLFW/1+uUv9atE7/U8FH/07NQP9Kzjv/Rsg0/0S8Lv8/tin/O8sx/1ffT/9n4WD/edt0/5nclf+v2az/ + qLuk/2BmXv9UU1T/YGBg/2VlZf+RkZH/2dnZ/+/v7//Z2dn/ycnJ/76+vv/Nzc3/5+fnNwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0f/ZGRk/4CAgP+VlZX/ + oqKi/6ysrP9oaGj/UFBQ/2dnZ/9lZWT/mJuU/56zmv9xoG7/WppY/0KMP/86gTX/HVkY/wQeAv8JDwP/ + DCsG/w1LCP8KWwj/Cl0F/wxeBv8YZQj/H2wO/x9xF/8kdxr/Kn4f/y+BIf8xhCD/M4Me/zKEIP83hif/ + QYov/0qROP9RlT7/VJY//1OTO/9UkTv/VY86/1qRQP9jl0v/aZxV/2+gYP93p2z/fa17/4K0jv+Mwab/ + sNvQ/8Ll2P/W7N//4vDj/+jx6f/r8+r/7PXt/+X28P/b8/L/ze/x/7fp7f+V3+j/c9bl/2nT5v9j0+P/ + U9Df/1DQ5f9QzOX/R8TY/0PC1P84vsz/MrrH/zC1xP8psL7/J626/yOps/8fpKn/G5+c/xeaj/8VlID/ + FY9x/xWNY/8UiVb/GYxS/yqUVv84lVH/SJVR/1OZTv9dpFL/Zqxc/1ytU/9QskX/Sb4//0rHPv9JyDr/ + Rb0y/zu1KP8rvSD/StlA/2XsXf9v4mf/jeKG/5vWlf+pyqX/h5SF/1JRU/9iYWL/Y2Nj/3R0dP+/v7// + 7u7u/93d3f/Kysr/w8PD/8vLy//i4uJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEtLS/9vb2//h4eH/5ycnP+oqKj/kpKS/1paWv9ZWVn/ZmZm/3R0c/+ep5v/ + h6WD/2CXXP9RnE3/Poo4/yZnIf8PNwr/BA4B/wQhAf8KPAP/DlcF/wthB/8LYgz/EWcP/x90EP8hdg// + HHIQ/yJ4Ff8ofhr/LIIf/zGFIf8zhSH/NYci/zyJKf9FizD/So40/0yONv9NjTT/UI41/1iSPf9ck0D/ + X5VE/2aZT/9snVj/caFj/3upcv+Ar4H/greS/4/Dqv+03dP/yefd/9ru4f/m8eX/5/Hp/+rz6f/u9u// + 6vfy/+L19P/X8vP/x+/x/6jn8f9+2un/atPl/2LR4v9Uztz/VNHi/1nP5f9Pxtf/TsXX/z/Bzf84vsv/ + M7nH/ymzv/8nr73/JKy3/x+nq/8Zop7/FJ6S/xWahv8UlHf/EY1m/xuPXv8plFr/OZdZ/06cXP9eoVz/ + W51T/1eaTv9coFL/VZ9L/02iQ/9LrEH/TLhA/0vBQP9Iwzz/P78y/y64If9AzDP/XeVQ/2zoYv+D5Hv/ + idKE/6DPnP+kuKH/ZWNl/2BfYP9lZWX/Y2Nj/6Ojo//m5ub/4uLi/87Ozv/FxcX/ycnJ/97e3k0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExM/3h4eP+NjY3/ + nZ2c/66ur/97e3z/U1NT/2FhYf9hYGH/iIiI/5ypmP92mXP/U5FP/0WVP/83hTD/EEYL/wUXAv8JEgX/ + BDwB/wlQAv8PYQP/D2YM/xNpGv8acR//H3wU/x99Df8geg//JX0V/yqAGv8uhB//MIUh/zSIJP83iSb/ + Pokq/0eLMP9JizH/S4sw/0yLMf9QjTT/WJA7/2GVQ/9kmEr/aZpR/22eW/90pWn/fqt4/4Gyhf+At5P/ + mMm1/7zh2f/P6t//3e7i/+fx5f/q8+v/7vXu//D37//t9/T/6/j1/+P28//T8/P/t+72/5Di8/9w2Oz/ + ZNTp/1XP3v9Uz97/WM7e/17N4P9dzuP/S8jX/zvBzv82vsv/MLnG/yu0wv8osLz/Jq20/yOrrP8ep57/ + GqGO/xibff8Tk23/HZNi/zicYv9YpGr/YKNj/2WlXv9ho1r/W55U/0+WSP9Plkb/UZhH/1CeRv9MpkP/ + RrI+/0DBOv89xjb/PLsu/za5Jf9N1T3/bu5f/33mcf+E137/mtSX/6/Lrv+Ef4T/V1dY/2RkZP9YWVj/ + jIuL/9vb2//o6Oj/1tXW/8bGxv/Hx8f/2traVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/enp6/46NkP+foJ//rK2r/2praf9QUlL/YmNk/2RmZf+VmZP/ + jaKL/2mVYv9KkUH/OYsy/yhtIv8FKAL/CBgF/xIuDP8FUQH/Cl4C/xBpBf8UbhH/GXIe/xp4Hv8WfA// + Gn4L/ySCFP8mgxb/K4Mb/y+FIP8xhyL/NIgl/zeIJf87hyX/QYgo/0eKLP9LjC//UI4y/1SRN/9akz3/ + YZdF/2WaS/9pnVP/bqBf/3Snbf99rnv/gLWJ/4O8mf+GwaX/s9zR/9Hq4f/g8OT/6vLm/+zz7f/v9u// + 8vjw//H49P/x+fX/6vfw/+L49v/B8ff/muf1/3DY6/9i1uv/WNTj/1TQ2/9b0Nv/aNPl/2bU6f9Qy9z/ + O8TP/zXAzP8yvMj/L7fE/yy0v/8qsbn/KK+y/yGspf8dpZD/GJ57/xaYcf8glmb/SKJq/2uwcv9srGX/ + ZaRc/2GiWf9hpVv/T5hK/0+XR/9SmEr/UJlJ/0eaQf89oDn/Na00/zi4M/9IxTT/MLMe/znAKv9n6lv/ + dudt/4Tge/+X2JL/rdKs/5eflv9YWlb/YV1g/1ZTVv92d3f/ysvK/+3u7f/Y2dj/x8fH/8jIyP/b29tU + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1dXf96enr/ + iYiQ/6aoqP+doZf/WVtV/1BUVf9eY2b/doF5/5OnkP9ylnH/U5NJ/z+UL/8xgSr/EEIT/wMbAf8EOQT/ + BEwB/wVdAf8KZAX/Em4N/xh4Ef8YfxH/Fn8P/xN+C/8Xfg//H4AV/yKBGP8ohBz/LoYg/zKJJP81iiX/ + OIok/zuKI/8/iiT/RIsn/0qOK/9QkC//U5M1/1eXPP9emkT/Zp1N/2qgV/9vpGP/dKpy/32xgf+BuI7/ + hsCd/4fDpv+03dL/1+3j/+Pw5f/r8+j/7vXu//D38f/z+PL/9Pn1//X69P/z+vP/6vr3/831+/+K3eP/ + adbl/1nV5v9W1eP/Wdbg/2bY5f9t2er/Y9Tk/1HP3P8/ydT/NsTO/zbAyv81u8b/NLfD/zG0vf8or7L/ + Gqih/xiijP8YnXv/GJlw/yqcav9Yq3T/dLN0/3GuaP9oq2P/Y6df/16jV/9VnU//TplI/0mYRP9Fl0H/ + Qpc+/z+XPP89lTv/PJs1/0jFKf87vyf/KbIf/0rURP907mr/feZx/5Lbiv+m3KD/m7+W/2hxY/9hVV3/ + XVNd/2BjY/+stK7/7PHt/9fY1//Jycn/zc3N/97e3k8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/3t7e/+Pjpb/qKqq/5CTi/9VVlH/VVZY/19kZv95iHr/ + i6OI/2uWaf9OkUb/NYsp/yR0Hv8FOwj/AisD/wQ/Bf8LVwX/CWQG/w5qC/8UdBH/GHsT/xl/E/8WfxD/ + E38M/xd/Dv8ggRX/I4IX/yeDGv8shh7/MYgh/zKIIf80hx//O4ki/0GKJf9HjCj/TI8s/1KRMf9VlDf/ + WJc+/1+aRv9lnk//aaFY/26lZv90q3X/fbKD/4K5kf+Dv5z/i8at/6rYy//P6eD/5fHn/+zz6f/v9e// + 8ffy//T58//2+vX/+Pr0//n89f/u+/f/1fj7/5rk6/9q1+P/WNbo/1HU4P9Z1uD/Z9nl/23a6f9h1eX/ + Tc7b/zzJ0/83xc//N8HL/ze9yP84ucb/NLbB/yyxtv8fq6b/G6aR/x2hff8hn3f/O6R2/2Swe/91s3L/ + dLBq/2mrZf9lqGH/YaRa/1efUv9Qm0r/SZhE/0SXQP9Aljz/PJQ5/ziTN/8zki7/NaQh/0nAOf83uS3/ + Nbsp/336bP966Wz/j+CI/6Tfov+ozKP/eYRz/2FWXv9bUlz/WFtb/56noP/j5+T/19fX/8rKyv/Ozs7/ + 3t7eTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiYmL/ + fn19/5WYm/+prKv/f4F5/05OSv9ZWlz/YGhm/3ySfv9+nnr/YJJb/0WNPf8ogSD/EWMN/wI4Av8EQQr/ + CE0J/xJnEP8QcA7/E3UQ/xh7Ff8Zfxb/GYIV/xaBEf8Ufw3/GIAP/yCBFv8ighb/JoQY/yqFGf8vhxz/ + NIkf/zeJIP87iiL/QIsm/0WNKv9LkDD/UZM1/1aVPP9amUP/YJxM/2WgVP9po1//badq/3Wtef9+s4f/ + hLmQ/4bAn/+GxrT/k9DG/7nh2P/i8ub/6/Xn/+317f/v+PP/8Pn0//L69f/3+/b/+vr4//n8+//q/Pz/ + zPf5/4Di5/9Z2OX/WtTd/2jZ5/9j2eb/Vtbj/07V5P9F0eH/OcnY/zjF1P83wc7/N77I/za6xv8zt8D/ + KbK2/yCtq/8cqJ3/HqOI/zGjd/9br33/dbZ//3Wzdf9zsG3/b61l/2ipYP9fpVv/V6FT/1CdS/9JmUT/ + Q5Y+/z6UOv84kTX/M44x/y6LLP8tjCT/OqYy/zy0MP82uST/c/Fb/33yav+M6Ij/neKf/7Tcr/+Nmoj/ + YVhe/1tTW/9PUlH/jJSO/9nc2v/Z2Nj/zMzM/9HR0f/g4OBHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZv+AgID/mp6i/6epqf9ub2r/SklF/2BgYf9kbWj/ + fpp+/3Cbav9Wj0v/OoYy/yB5HP8DVAL/A0AD/w1SDP8MXg7/FXUX/xV7FP8WfhX/GYAX/xqCF/8Zgxb/ + F4IT/xaBD/8ZgRL/IIMW/yODF/8mhRj/KoYZ/y+HG/80iR7/OIoh/z2MJP9Bjij/Ro8s/0ySMv9SlDf/ + V5c+/1uaRf9hnU3/ZqFX/2qkYf9uqWz/dq57/3+0if+EupL/h8Cg/4XGs/+PzsX/r93V/+Hy6v/p9Or/ + 7Pbu//D48//x+fX/8vr2//f79//7+/r/+fv8/+r6/P/H8/H/jeTl/27e6P9r2eD/feHw/3Pg7/9Z1uH/ + RtHc/z7O2/85ydj/OcbV/zjD0P83vsr/N7zG/zS5wf8rtLn/JK+v/yKso/8sqpH/SK6G/2m1gv93tnv/ + drN0/3Owbf9urWb/Z6lg/1+mW/9YolT/Up9N/0qaRv9Elz//PZM5/zePM/8xjC7/L4ou/zSHNP8igB// + MKAn/0LBLf9f3ET/gfpu/4jshv+V4Zr/uOS0/5ytmf9hXl//WVRZ/0hLSf98g33/09bU/93c3f/Ozs7/ + 0tLS/+Hh4UYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + a2tr/4ODg/+doqb/n6Ki/2NhXv9KRUT/ZmVl/2h1af98nnn/YZdY/0eNOf8vgSf/GnMZ/wJNAv8FUgL/ + EWML/xBwE/8RfRf/FIIW/xWCF/8YhBj/GYQY/xmEFv8YgxT/GYMV/xyDFf8ggxf/I4QY/yaFGP8qhhr/ + Logb/zOJHv84iyH/PY0l/0KOKf9GkC3/TJMz/1OVOP9YmD//XJtG/2KeT/9nolj/aqVi/2+pbv93r3z/ + gLWK/4W6lP+HwKD/hcWx/4vNwf+j2dD/1vDr/+b17f/p9u//7/jz//L59f/z+vb/9vv3//v7+f/6+/v/ + 7fz8/8719P+p7vD/kOnw/4rk6v+T6vX/iej2/23d6v9Q1N//QtHe/zrL2v85x9b/OMTQ/zjAy/83vcf/ + NLrB/y62uv8nsrP/J66j/zStkf9MroD/aLJ5/3i1eP93s3P/cbBs/2ytZf9lqV//X6Za/1mkVf9SoE7/ + S5xH/0WYQf8+kzr/OJA1/zKNL/8wjDD/Noc6/yB2H/8fhxn/Nasl/1TMPv9/9m3/hOqB/5HilP+05rH/ + pr2j/2loZ/9YVVn/QUZE/210cP/Q0dD/5OHi/9DR0f/U1NT/4uLiQQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvb2//hoaG/5yipf+UmZn/X11a/01GR/9samn/ + a3xs/3Wfcv9VlEv/O4sr/yiAIv8TbhX/AlUC/w5kBf8Tbwz/DnsU/wmBFP8RhRX/EYQV/xSEFf8VhBX/ + F4UX/xmFF/8chhf/HoYY/yGFGf8khhr/KIcb/yuIHP8wih7/NIsg/zmMIv89jiX/Q5Aq/0iSL/9OlDX/ + VZc6/1qaQf9enEn/Y6BR/2mjW/9spmX/cKtw/3iwf/+Bto3/hbuW/4jAov+FxK//icu+/5fVzP+85+P/ + 3PXu/+f27//v+PP/8/r2//L79//1/Pf/+vz5//n7+f/y/f3/1vf1/8L09v+y8/f/p+/y/6Pv9v+V6fP/ + fuHs/13X4v9E0tz/OczY/zrJ1v85x9L/OcLM/zi/x/81vMP/MLi9/yu1tv8vsqj/PbGU/1azhf9wtn3/ + erV3/3izcv9xsGz/a61m/2WqYP9fp1r/WaRU/1KgTv9MnUj/R5tD/0CWPP86kjf/NZAz/zCNMP8wiTP/ + Koct/xl8Gf8chhX/Tbo8/3XjZf+G64L/kuST/67lrP+sx6n/dHZy/1dWWP8+REH/Y2pm/8rJyv/l4uT/ + 0tPT/9bW1v/k5OQ9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAHNzc/+IiIj/mKCj/4qQkP9fW1r/UUlK/3Fvbf9wgnH/bp5q/0yRQv8xiB//J4Mi/wlmDv8KYwr/ + GXMN/xh7Df8LgA//BIEP/w2DEf8OgxH/D4QR/xCEEv8WhRb/GYcX/x2JG/8fiBr/IYYZ/ySHGv8niBv/ + K4od/y+LHv80jCD/OI4i/z6QJ/9Dkiv/SJQw/06WNv9UmDv/WZpC/1ydSf9joVL/aKVc/2yoZv9xrHL/ + eLGA/4C3jf+Eu5f/icKm/4nGsf+Jy77/mNfW/5/c2f++6OX/5fjy//H59f/1+vf/8/z4//T99v/5/Pb/ + +/36//P9/P/i+/r/0/n4/8L18/+u8Ov/qPDx/6Lt8/+N5e//bd3n/0vW3/890dz/PMzZ/zrI0/84xM3/ + N8HI/zS+xP8wu77/Kri4/zG2qv9CtZr/WraJ/2+1e/94tHP/eLNw/3Kybf9rr2f/ZKtg/1+nWv9YpFX/ + UqJP/02fSf9HnET/Qpo//z2YO/84lTf/M5Iy/y+RK/8tji//HH0g/xd3Fv8zkij/Zs1Z/5T0jv+W6JX/ + q+Sp/7HQr/+BhH//V1dZ/ztCP/9ZX1v/w8DD/+Xi5P/V1dX/19fX/+Tk5D0AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0/4eHh/+boaX/hoyM/1pZWP9QSkv/ + b25r/3KFbv9pnGL/Qo84/y+GHf8jgR//BmUM/w9vEf8YeRL/FYAP/wmBDP8HgxD/DYMR/w2EEf8PhRL/ + EYQT/xWGF/8aiBn/HYoc/x+JG/8ghxn/I4gb/yaJHP8qix3/Lowe/zONIP84jyP/PZEn/0OSK/9IlDD/ + Tpc2/1SZO/9Zm0L/XZ5L/2OhU/9ppV3/bKho/3Gsc/94sYH/gLeO/4K7mP+IwaX/g8Op/47PxP+Y2t// + l9zh/6jh3f/d9fD/8fn0//X69//y/Pj/8/32//j99v/7/vn/9v77/+f7+P/c+fj/zPb2/7Xy7f+r8O// + qu/0/53p8/964On/T9fc/z3S2f89z9r/O8vT/zjHzv83w8n/NcDE/zC8v/8rubj/Lret/z+2nf9WtYv/ + bLR7/3ezcv93s3D/crFs/2qvZf9jq1//XadZ/1ilVP9Sok7/TJ9J/0edRP9Cm0D/P5o8/zmXOP8zljP/ + MZgp/yiOKf8ghSf/HHwh/x93Hv9StEv/nviY/5vrlv+r56j/tNWy/4aOhv9YWVr/PkNA/1dbWP+6uLv/ + 4N7h/9PT0//Z2dn36OjoMAAAAAD4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABzc3PMhISE/6iqrv+Gjo3/SFFO/0VISP9lZ2L/coNq/2KbWv80iiz/L4Qm/xhyE/8HbAn/ + BnUN/wd9Ef8HgBL/DIcW/xGLGf8Rhhj/EocY/xOIGf8UiBn/Foga/xiIGv8aiRr/HIob/x+LHP8ijB3/ + Jo0e/ymOH/8ujyD/MpAi/zeSJf89lCn/QpUt/0eXMv9NmTj/VJw9/1meRP9doE3/Y6RV/2ioX/9sq2n/ + ca91/3izgv+AuZD/gLyY/4PBov+Ixqv/ltTM/43Y3P+W4Ov/pePj/9bz7v/x+fP/9fr4//L8+P/y/ff/ + 9/32//z++P/5/vv/6/z4/+L6+v/T+Pv/ufXz/6vx8P+s7/P/qOv2/4jl7/9W297/QNTa/0DR3P89ztb/ + O8rQ/zrFy/82wsX/ML/A/yu8uv8subH/Obej/1G2j/9ntXz/c7Ry/3Wzb/9ws2z/aLBk/2GsXv9cqVr/ + VaZS/0+kTP9JoUb/RZ9C/0CdPv88mzr/Npg1/y+VL/8slSv/MZsz/ySOKf8bgSL/IH4l/yuHLf+P4Yz/ + qvOi/7HoqP+02bT/hJKI/1laWv9IREL/XFpX/7W2t//a293/zMzL/93d3Zj29vYF+Pj4Afj4+An4+PgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp6emaKior/qKis/4eNjP9IUU// + RUhI/2ZoY/9vg2n/YZpZ/zSLLf8mfR//FXEQ/wlwCv8KehH/C4QW/wuEFf8NiBb/EYsZ/xGIGP8SiBn/ + FIkZ/xWJGf8XiRr/GYka/xuKG/8dixz/IIwd/yONHf8mjh7/Ko8g/y6QIf8zkSL/N5Ml/z2UKf9Dli7/ + SJgy/06aOP9UnT7/WZ9E/1yhTf9jpVX/aKhf/2ysaf9xr3X/eLSC/4C5kP+AvJj/h8Om/4jGq/+U08v/ + jNjd/5De6P+c4OD/xu3l//H59f/3+vf/8/z4//P99//3/ff//P74//r++//u/ff/5vr6/9j5/f+99/f/ + q/Lx/6ru8f+o7PX/jujy/2Hf4/9F193/QNLe/z7P2P89y9H/OsfL/zbExf8xwb//Lb25/yq6s/80t6b/ + TLaR/2K0ff9ws3L/dLNu/2+yav9osGP/Yaxd/1ypWP9WplL/UKRL/0qhRv9Fn0L/QZ0//z2cO/83mTb/ + MZcy/zCYMf8slzD/J5Is/yePL/8fgCX/DGoN/12zW/+2/rH/s+uq/7nduf+OnJL/V1hX/z87OP9YV1T/ + wMLD/+Li5f/Nzc3/4eHhkuvr6wL4+PgB+Pj4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAhISEDY2NjvKnpan/iIyM/0pST/9GSEj/Zmhj/2yAZv9cmFb/M40v/xt3F/8QcQ7/ + C3UQ/w5/Fv8PiRr/DooZ/xCKGf8SjBr/EYoY/xKKGP8Tixn/FIsZ/xaLGf8YjBr/Gowb/xyNG/8fjhz/ + Io8d/yaPHf8pkR//LZIg/zKTIv83lSX/PZYp/0OYLP9HmTH/TZw3/1SePf9ZoEP/XKNL/2KmVP9mqF7/ + aqto/26vc/90s4D/fLiM/368lv+EwaP/hMOq/4bKvP+P19X/kN7e/5Lf2f+v6ef/4/f1//f58//4+/f/ + +f36//n9+v/5/fr/+f76//n++v/y/vn/5f35/9H69v+28/D/oe/u/5Tt8/+A6PH/Zd7i/0rW3P8/097/ + O9LY/zfNzv8zyMX/NMXB/zXCvf83wbr/Mb21/zW7rf9EuJf/U7N9/2Syb/9tsWb/bbBi/2euXf9hq1f/ + X6lU/1amTf9Nokb/R6FD/0OgQv8/nkD/Opw7/zabOf8ymTT/M5s0/yyWL/8mkiz/KZMv/ySIKv8GZQj/ + KYUp/6Txn/++9bb/ut+7/5Cflv9SUlL/Ojc1/1tbVv/Iycv/5OXn/9DQ0P/l5eWM7u7uAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjYyNmaShpP+Oj5D/ + T1VS/0RGRv9jZWH/aX5k/1iVU/8viy3/EXIQ/w5zD/8OfBT/EYYa/xGMHv8Rjxz/E44a/xOOGv8SjBr/ + E4wa/xSMG/8WjRv/F40b/xmOHP8bjhz/Ho8d/yCPHv8jkB7/JpEf/yqSIP8vkyH/M5Uj/ziWJ/89mCv/ + Q5ku/0ibM/9NnTj/VJ89/1mhRP9cpEz/YqdU/2apXf9pq2f/ba9y/3Szf/97uIv/fbyU/4LBof+Ew6r/ + hsq6/5DX0/+T393/k+Da/6vo5//b9PP/9vjz//f69//5/Pr/+fz6//j9+v/4/vr/+f75//X++P/p/ff/ + 2fr3/7308v+k8PD/jOvu/3Xk5/9k3t//VNje/0nV3v9E0tj/P87P/zrKx/86x8L/PcO//z7Bu/83vrf/ + Ob6w/0e6m/9UtYH/Xa9p/2auX/9nrFn/YKlS/1qnTf9Xpkr/UqNG/0uhQv9HoUH/RKBB/0CfQP88nj3/ + N5w5/zOaNf8znDT/Lpox/yWRKv8ikCr/K5Ix/xN7GP8Lbgz/cMRr/8f8vv+84b3/jZuR/0tLS/86NzX/ + ZmVh/8vMzv/g4OL/1dXV9evr62T19fUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACKiYozop2g/5mXmP9ZXVv/QUJD/1xgW/9mfGH/UpBO/yaFJP8KcQz/ + DnoT/xGEHP8Qix3/EI8d/xOQHf8UkRz/E5EZ/xKPG/8Tjxv/FJAc/xaQHP8XkBz/GZEd/xuRHf8dkh7/ + IJMe/yOTH/8mlCD/KpUh/y6XIv8ymCT/N5kn/z2aK/9DnC//R50z/02eOf9ToD7/WKNE/1ymS/9hqFL/ + Zqpb/2msZv9sr3H/c7J9/3q3if98vJP/gMCd/4TDqf+EyLX/jdTO/5Te3f+W4N3/qefm/9Ty8v/w+PT/ + 9Pr3//f7+f/5/Pn/+v35//n++f/5/vr/9/35//D9+f/g+vn/xvb2/6nx8/+N6+z/dOTl/2bg3/9g3OH/ + WNfe/0/T1/9K0NL/RszM/0XJx/9IxsX/SsTA/0HDu/9AwbL/Tb6e/1m4g/9WrWH/YaxY/2SrUv9dqUv/ + VqVE/1KlQv9Ooj//SaA9/0agPv9DoD7/QKA+/z2fPf83nTn/Mpo0/zGaMv8vmzL/KJcu/yWWLf8tmTb/ + Howl/wpzDf85jzX/uO6w/8Xqxf+MmZH/QUJC/zUyMP9wbmv/0NDS/9zd3//b29vi8/PzB/f39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACknaLM + pKGh/2VnZf8/Pz//VVlU/2J6X/9MjEv/G30c/wp2D/8Sghn/FIwf/w2MHP8MjRr/EZEc/xWTHP8Vkhv/ + EpIc/xOSHP8Ukh3/FZMd/xeTHv8Zkx7/G5Qf/x2UH/8glSD/IpYg/yaXIf8pmCL/LZgk/zKaJf82myj/ + PZws/0KcMP9HnzT/TaA5/1OhPv9Xo0P/XKVK/2GpUv9lq1r/aK1k/2yvb/9zsnv/ereH/3y8kv9+wZv/ + hcSn/4XHs/+H0MX/ld3d/5jg3v+p5+j/0/T0/+j39v/v+fj/9Pv4//f9+P/5/fj/+v75//j++v/5/fn/ + 9/z6/+f7+//O9/n/sPHy/5Ps7f9+5+n/b+Lk/2ne4f9i2dv/V9TU/1DR0f9Oz9D/T83M/1PKx/9XyML/ + T8W6/03EsP9XwZ7/X7qD/1KrWP9bqk//YKpL/12oR/9WpkH/UqU+/06iPP9IoDr/RJ85/z+eOP8/nzr/ + PJ85/zedNv8ymjP/L5cw/y2bMf8tnzX/LqE3/y2bN/8ajSL/FYMa/x97Hf+Tyov/yu/K/4qYjv87PDz/ + Mi4s/318eP/Y2dr/29vd/97e3aj4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyhp2atqav/bnBv/z0+PP9OU03/YHpf/0iLSP8SdBX/ + C3oT/xaLH/8XkiT/C4sb/wWIFf8PkBr/FpQc/xWTGv8Tkhv/FJIb/xWSHP8Wkxz/GJMd/xqUHf8clB7/ + HpUe/yCVH/8kliD/J5ch/yuYIv8umSL/Mpok/zebJ/88nSr/Qp4u/0efMv9LoDj/UqI9/1ajQv9bpUn/ + YKhP/2SsWP9orWL/a69t/3GyeP94toT/e72P/37Bmv+HxKf/isez/4XMv/+U2tj/oOPk/6fl5v/D7e// + 3PT0/+r5+P/z/Pn/+P35//v99//6/fj/+f36//v9+//5+/r/6vr6/9D2+P+08fL/m+3u/4jp6v955OT/ + c+Dh/3Dd3v9j2Nj/WtbV/1jT0v9b0M7/Ys/J/2XLwP9kyrn/X8Wq/2jCm/9it3f/VKlS/2GrTv9gqUf/ + WqZA/1OkOv9MojT/R580/0WfNf9BnjT/P581/z2fNv83nTP/Mpwx/y+aL/8uly3/MaAz/zCiNv8qnjP/ + K5w1/xyTJf8flCX/GngY/2+jZv/I7Mj/fIqB/zU3Nv84NTP/kZCM/+Di4//W1tj/3NzcbQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + rqKnDbKtr/J3eXj/PDk8/01PTf9bdFv/Q4dF/wtxD/8Mghf/FpAj/xaTJP8LjRv/B4oW/w2RGf8VlB3/ + FJMc/xSUHP8UlBz/FpQd/xeUHf8YlR7/GpUe/xyWH/8elh//IZcg/ySYIf8nmCH/Kpkj/y6aI/8ymyX/ + Npwn/zydKv9Cny//RqAz/0qhOP9Rozz/VqRB/1qmRf9gqE3/Y6tW/2euYP9qsWr/cLN2/3e2gf95u4z/ + fcCX/4jEpP+Lx7H/h8u8/5LX0/+k4ub/qubp/7Tp6P/O8fD/5Pn3/+769v/3/Pb/+v32//r9+P/4/Pr/ + +fz6//n7+//r+/v/0vb3/7Tw7v+d6+n/kOnp/4jn6P+J5uj/guLj/3Hb2v9n19X/Z9XR/3PV0f9zz8L/ + fc++/3nMr/9rxJf/e8SV/2W0a/9aq07/X6pI/1yoQv9Vpjz/UKQ2/0uiMf9GoDD/Q58x/0CfM/9AnzT/ + PJ40/zWcL/8wmi3/LZkr/y+bLv81pDb/L6I1/yOZLf8tnzj/JJsv/ySaLv8ZfRv/UZBL/7Xctf9wfHL/ + MS8w/0Q/P/+qqab/4+Tk/9XV1tjk5OQ6+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsrKxmY6Lj/9DN0P/U0tT/01gTf85gjz/ + Cn8R/w2RHP8Pkx3/D5Md/xCUHv8RlR//EZUf/xKVIP8Tlh//E5ge/xSYHv8VmB7/Fpgf/xeZH/8ZmSD/ + G5kg/x2aIf8gmiL/I5si/yacI/8pnST/LZ4l/zGfJv81oCj/OqAq/0GiLv9GozP/SaI3/0+jO/9UpUD/ + WKdF/16pTP9hqlP/ZK1d/2mxZ/9utHP/dbd+/3e7iP97v5X/hcKh/4vGr/+Jy7v/hdDF/5re3f+r5ur/ + quTh/7rq5f/a9vT/7/v2//T78f/5/PT/+v34//f8+v/4/Pv/9vz7/+r6+v/U9vf/u/Hw/6ft7P+Z6en/ + j+Xk/5Lk4/+W5OX/i+Dh/3va1v921M3/etDB/2zBn/+FyKf/ecWT/2O8df9qum//X69W/12sSv9cq0T/ + V6o+/0+oOf9KpjP/SKUv/0KiLf8+oS7/PaEx/z6hMv89oTX/N58x/zOdL/8wnC3/MKEy/zGhNP8xojf/ + MKI6/zSkQf8kmTP/I5g1/xWJI/8vkDX/hreG/25xaP8xIyv/UkhO/8jHxf/c3tv/2NnYafT09AH4+PgG + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAC0tbMzramu/1NHU/9FPkX/SV5J/yx4Mf8Uihz/D5Qc/w+VHP8PlBz/EJUd/xGVHv8RlR7/ + E5Yf/xSXH/8TmB7/FJge/xWYH/8WmB//GJkf/xqZIP8cmiH/Hpoh/yCbIv8jmyL/JZwj/ymdJP8sniX/ + MJ8m/zSgKP85oSz/PaEu/0KiMf9HpDb/TaU6/1KmP/9Wp0X/XKlL/2CrUv9jrVv/Z7Bl/22zcP91t3z/ + druG/3q/kf+Ewp7/icWs/4bItv+BzL7/jtfP/6Lh4f+l4+H/r+fi/87x7//q+vX/9vv0//n89P/5/Pf/ + 9vz6//X8+//y+/r/5/r6/9P29//A8fL/sO3v/6Pp6v+a5eX/nOTh/53j4P+V4N3/i9vV/4bVyP9nwZr/ + X7Z+/2S1c/9htGb/YLNd/1uuU/9hrk//YKxI/1urQ/9Wqj7/Tag5/0mmM/9IpjD/QaMu/z2iLf85nyz/ + OJ8t/zqgMf84oDH/Mp4v/zCdLP8xoTP/MqI1/zKkOP8zpDz/N6VD/yecNv8nmjf/HZAr/ymNMP9bkFz/ + UVdM/ygbIf9qYmb/3t3b/9bY1f/c3dte+fj5Afj4+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+ur7SbWNu/zczN/9EX0f/ + IHMn/xOPHP8QlR3/D5Yd/xCWHf8Qlx7/EZce/xOXH/8TmCD/E5gg/xKZH/8TmR//FJkf/xWZIP8XmiD/ + GJoh/xqaIf8cmyL/Hpsj/yGcI/8knST/Jp4l/yqeJv8unyf/MqAp/zehK/87oi7/QKQx/0WlNf9Lpjj/ + T6g+/1OpRP9Yq0r/XaxR/2GuWf9osWP/brNr/3W3df92uoD/d7yL/37Alv+ExaT/hciw/4fLuv+L0cb/ + ktbQ/5Ta2v+j4eT/wevu/+L29f/0+/b/+Pz0//j89//0+/j/1/Lt/9Ly8//Q8fL/yPD1/8Xu9v+46/H/ + r+fq/6nm5v+g49//nOHa/5rf1P+W2cb/ic+u/2q8g/9puHf/Z7Zu/2i0Zf9ns1z/Y7BV/1+vTv9brUf/ + V6tC/1KqPf9NqDj/SaY0/0WlMP9Aoy7/PaEs/zmgLf83oC3/N6Au/zegMP80oDD/MaAx/zOjN/8zozj/ + NKU7/zSmPf85p0b/LKA8/yuePP8mmTT/JIwr/zlyPP84QzX/KiEm/46Gi//u7u3/2drXpgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALq4vXmRiZP/NDQ2/zpaPv8ccyP/CowU/w+XHf8QmB7/EZkf/xGZH/8SmR// + E5kg/xSaIP8UmiD/E5sh/xSbIf8VmyH/Fpsi/xebIv8ZnCL/G5wj/xydI/8fnST/IZ4l/ySeJf8nnyb/ + KqAn/y6hKP8yoir/NqIs/zqkLv8+pDH/RKY1/0qoOP9Nqj3/UatE/1atSv9br1D/YLFY/2WzYf9rtWn/ + c7hz/3S6ff91vYj/fL+T/4HEn/+Ex6v/h8q2/4vPw/+R1M//k9jZ/5vd3v+15uX/zuzo//D59f/2+/b/ + 9vz4//H69//I7OH/tebf/6rg2P+s4d7/verv/6Te2/+Y29H/nN/V/5bbzf+D0bf/dMmj/3PEmP9vwIr/ + cbyA/3G6d/9vt3D/arRj/2eyWv9isFP/Xa9N/1qtR/9Wq0L/Uak8/0yoOP9IpzT/RKYx/z+kLv88oy3/ + OaIu/zehLv82ojD/NqMy/zajNP80ozT/N6U7/zenPf84qT//OKhD/z6rS/8ypEH/M6NC/yuhOf8kkiz/ + L200/yg3Jv9BOz3/tbC0/+7v7uLa3dsPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6ILm2vv5CSEb/ + Jkwr/xp5I/8GkBL/D5ke/xGaIP8QmR//EZsg/xKbIP8TmyD/FJwh/xScIv8TniL/E54i/xSeIv8WniP/ + F54j/xifI/8anyT/HJ8k/x6gJf8goCX/I6Em/yaiJ/8poij/LKMo/zCkKv81pS3/OaYv/z2mMf9CqDX/ + SKk4/0yqPf9QrET/Va5J/1mwUP9dslf/Y7Rf/2i2af9vuXH/cbt6/3O+hf95wI//f8Sb/4LGpv+FyrH/ + is6//5DTyv+T19P/mNrX/6zh3f++5t3/5PXy//D69f/y+vb/8fr2/9Dw6f+56ef/sOTg/6Te2P+f3NP/ + mdnO/5PYyP+K1L3/htCz/4XNrP+ByaP/esSU/3a/iP94voD/cLhx/2+3bP9qtWH/ZrNZ/2CxU/9cr03/ + Wa9H/1WtQf9Qqzz/Sqs3/0epNP9DqDH/PqQu/zqjLf83pC//OKQx/zelMv82pzT/NqY3/zWmOP86pz7/ + PKhB/z2rRf8+rEj/RLBR/zqqSP87qUn/Mag//yeeMv8uczT/HjEf/2lnZ//d2dz95+roQQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy8rQxmZsa/8fSCb/Fnsi/wuZGf8Qmx7/EZse/xGcH/8SnB// + E5wf/xSeIf8UnSD/FJ0h/xKeI/8SniP/E54j/xSeJP8WniT/F58l/xmfJf8boCX/HaAm/x+gJ/8ioSf/ + JaIo/yejKf8royr/L6Qs/zKlLf82pi//Oqcx/z+oNf9FqTj/Sas9/06sQv9Tr0j/V7FP/1uyVf9gtV3/ + Zrdm/2y6b/9vvHj/cb6C/3nCjP9+xZj/gcej/4TKrv+Jzbv/kNHH/5XW0P+c2tb/q+Db/7rm4P/S7+v/ + 5/f0//H79v/z+/f/1PPu/7rr6v+w5uL/quLc/6Le1v+e29D/ldjH/4zTvP+N0bT/h8ym/4DHnP97xJH/ + dMCD/3O+e/9vu3D/bLlq/2e2YP9ktVn/X7NT/1uxTf9XsEf/U65B/06sPP9Iqzj/RKk1/0CoMf87pC// + OKQt/zilMf82pTL/N6c0/zeoNv83qTn/N6k7/zypQv8/q0X/QK1J/0OwTf9KslX/QK5O/0KtUP81rUT/ + Kqc4/yt3Mv8nQCr/lZaV//Du8IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJyc9s + laGd/yxZNP8Teh//D6Ie/xCcH/8QnB//EZ0g/xGdIP8SnSD/E54h/xSeIf8UniL/E58l/xSgJf8UoCX/ + FqAl/xegJv8YoCb/GqEn/xuhJ/8doif/IKIo/yKjKf8loyn/KKQq/yulK/8vpiz/MaYu/zSnMP84qDP/ + Pak2/0KqOf9HrD3/TK1B/1GvR/9VsU3/WbJT/120Wv9jt2L/arlp/2u8cv9wv37/dsKI/3vFlP9+xp3/ + gcio/4bMtP+N0MD/k9XJ/5rZ0P+m3tj/s+Tf/7/o4f/i9vP/6/n0//H79f/T8uz/uezr/7Do5P+m49z/ + oN7U/5razP+S1sL/idK3/4bPrP+Dy6L/fMeX/3bDjP9ywIL/b714/2u7b/9luGf/ZLZf/2K1V/9eslH/ + WbFL/1WwRv9RrkD/Ta08/0irOP9DqjX/P6gy/zqkL/83pC3/NaUx/zanM/83qDX/N6o3/zirO/83rD3/ + P6pF/0CsSP9Cr0v/RrJQ/020WP9DsVH/Rq9U/ziwSP8qrDj/LHo1/0xnUP+/wsDR9/b3BwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xRa7w8H7SnhS/w5+HP8OoR//EqAh/xKfIf8SoCH/ + EqAh/xOhIv8ToCH/FKEi/xShI/8ToCX/FKAl/xWhJf8WoSX/F6Em/xihJv8aoib/G6En/x2iJ/8foij/ + IqMo/ySjKP8npSn/KqYq/y2nK/8wpy3/NKcv/zipMf88qTT/Qas3/0WsOv9LrUD/UK9F/1SyS/9YtFH/ + XbVY/2K4YP9oumf/a7xw/26/e/90wYT/ecWO/3vHmP9+yaP/hMyu/4zPuv+S08L/mNjK/6Hc1P+p4t3/ + sOTc/8/w6//n+fP/7vrw/9f07f+67Or/sOjh/6bj1/+e3s//l9rH/4/Wvf+G0rH/g86o/3/Lnv93xpP/ + csOI/2/Afv9svnT/aLtr/2O5Y/9itlv/YbRV/1yzT/9XsUr/VLBE/1CvP/9MrTr/R6w3/0OqNP8+qTH/ + OKYu/zamLf80pjD/N6gz/zapN/85rDv/Oq0+/zqtQP9Cq0b/QqxI/0ayT/9KtVb/ULZc/0m1WP9Ptlz/ + PrFN/yqrOv8uhDj/dpZ6/9/k4WoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAMnEyLhtmHL/CIoX/wqeHP8VpSf/FaUn/xSkJv8ToyX/E6Ml/xOiJP8SoSP/E6Ek/xSiJP8VoiT/ + FaMk/xajJP8XoyX/GKMl/xqkJf8boyX/HKMl/x6kJv8hpCb/I6Un/yamKP8ppir/LKcr/zCoLf8zqS7/ + Nqox/zurM/9ArTf/Ra06/0muPv9OsEP/U7JK/1e0T/9btlb/YLle/2a7Zf9ovW3/a792/3HCf/91xYr/ + d8eT/3rJnf+AzKr/h860/47Suv+T1sL/mtrO/5/f2f+p493/uOjd/9v07P/t+e7/2PPq/73s6P+y6N7/ + peLT/53ey/+W28H/jde3/4PTrP+Az6L/fcuZ/3bGjv9yw4P/b795/229b/9qu2f/ZLhf/2K2WP9ftVL/ + WrNN/1WyR/9SsUH/Tq88/0quOP9FrTb/QKwy/zuqL/81qiz/NKsu/zWsL/83rDT/O6w6/z2tP/9ArUL/ + Qq1F/0mwRf9FrEf/TbVX/1G3YP9Wt2j/WL1q/2bGc/9Nr1n/NaVC/ymUNP+Pv5T/8/DyQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8DCX2yYcf8IiRb/C58d/xOjJf8ToyX/ + E6Ml/xOjJf8SoyX/EqEj/xKhI/8ToST/FKIl/xSiJf8VoyX/FqMl/xejJf8Yoyb/GqMm/xqkJv8coyb/ + HaQm/yClJ/8ipij/JaYq/yioK/8qqCz/Lqkt/zGqL/81qzH/Oaw0/z2tNv9Crjr/R689/0ywQv9Qskf/ + U7RO/1e2Vf9cuVz/Y7xk/2a+bP9pwHT/cMN9/3TFh/93yZD/ecua/37Npf+F0K//i9K3/5DVvf+W2cn/ + mt3T/6Ti2f+x5tv/yO7g/+X37P/T8uj/vOvl/7Dm2/+m4s//nd/H/5jcv/+P2rX/hder/4HSof9/zpb/ + eMmM/3PFf/9wwnX/b79t/2u6Y/9muFv/YrdV/121T/9YtEr/U7JE/1CxP/9NsDv/SK44/0StNP8/rDH/ + Oqsv/zSrLf8zqy3/M6ww/zesNv87rTv/Pq5B/0KuRf9Er0f/S7NK/0evS/9QtVj/UrVh/1m4av9gwXD/ + bst6/1KyXf83p0X/LZc5/5C/lP/08fIVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADEwcMOapdw9giKFv8Knx3/EaEj/xGhI/8RoSP/EaEj/xGhI/8SoSP/EqIk/xOiJP8Toyb/ + E6Mm/xSkJv8VpCb/FqQn/xekJ/8YpCf/GaUn/xqkJ/8cpSj/HqYp/yGmKv8kpyv/J6gt/yqpLf8tqS// + MKow/zSrMv84rTT/Pa42/0GvOf9GsD3/SrFB/02zRf9QtEr/VLZP/1i5Vf9evFz/Yb1k/2bBbf9sxHb/ + ccd//3TJif97zZb/fs+f/4LQp/+J07D/jtW3/5TYvv+Z28b/nd7M/6bj1f+u5tv/vu3m/7fr5P+q5uD/ + o+PV/5/fyv+a3cH/l9u5/5HZsf+J16n/htOg/4XRlf99zov/dciA/2/Fdf9qwGv/ZL1i/1+5W/9dt1P/ + W7VN/1azSP9SskP/TbA//0mwO/9Grzj/Qq43/z6tNP85rDL/Nasv/zOsL/81rDT/Oa07/z2uQf9BsEX/ + RLBI/0izTf9PuFH/TLRS/1K2XP9VtGH/YLtt/2rHeP910IL/VbZh/zmpRv8xmj7/kL+U/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhmGmsCo4b/waaGf8QoCL/ + EaAj/xGhI/8SoiT/E6Ml/xOjJf8VpCb/FaQm/xSlKP8UpSj/FaUo/xamKP8Wpij/F6Yp/xmmKf8ZpSj/ + G6Yp/xymKf8epyr/IKgr/yOpLP8mqi3/Kasu/yyrL/8vrDD/M60x/zeuMv88rjT/QK83/0SwOv9IsT7/ + S7ND/061R/9RtUz/VbhS/1u6WP9fvWD/Yr9p/2nDcv9vxnz/ccmF/3jNkf97z5r/f9Gi/4XTq/+I1bH/ + j9a4/5PZv/+W3MT/neDN/53h0P+i5Nb/nOPU/5ji0/+W4Mv/k93A/5Hbt/+Q2bD/jNio/4fWov+G1Jr/ + hdKT/37Oiv93y4D/ccV1/2rCav9jvWH/Xbpa/1u3Uv9ZtUz/VLNH/0+yQv9LsD7/R686/0OvOP9Arjb/ + PK40/zmtMv80rTH/Na0z/zmuOf8+sED/QbFG/0SyS/9ItU//TblT/1C8V/9RuFn/WLdi/1y1Zv9qv3X/ + edCE/4HXjP9auGX/O6pK/zefQ/+Ww5v/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFyfZWIQlCH/A5cV/xChIv8SoiT/EqIk/xSkJv8VpSf/FqYo/xinKf8Xpyn/ + FKcp/xSnKP8Upyn/Fagp/xaoKf8XqCn/GKgq/xmoKf8aqCn/HKgq/x6oK/8gqSv/Iqos/yaqLf8oqi7/ + K6sv/y2sMP8xrTH/NK0z/zmvNf89rzf/QbA6/0SyPf9Is0D/S7VF/062Sv9SuFD/WLxW/1y+Xf9hwmf/ + acZw/2/Jef9zy4L/eM2N/3zPlP9/0Zv/gtOk/4HTqf+H1a//i9e1/4zZuf+S3cL/kt7D/5Lfxv+I3sD/ + h93B/4vdv/+K27X/i9mt/4zYp/+J1qD/hNSZ/4LTk/+B0Y3/e82E/3PJev9sxXD/ZsFn/1+9X/9ZuVf/ + V7dQ/1a2Sv9StEb/TbJC/0ixPv9EsTv/QrA5/z6wN/88sDX/OK81/zeuNf86sDr/PrJC/0S0Sf9HtU3/ + SbZR/0y4VP9QvVn/U79e/1a7Yf9fu2j/Z7pt/3jFgP+K3JP/jN2V/164av87q0z/PaVL/57NpegAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbLB1KBGVIv8Elxb/ + E6Ml/xSkJv8VpSf/F6cp/xmpK/8aqiz/Hast/xurLf8UqCn/Fagp/xWoKv8WqCr/F6kq/xepKv8ZqSv/ + Gakr/xqpKv8cqSv/Hakr/x+qLP8iqi3/JKst/yasLv8prC//LKwv/y+uMf8yrjP/NrA1/zmwN/88sTj/ + QLM8/0W1P/9Jt0P/TblI/1O9Tv9awVf/YcRe/2fHaP9vy3L/dM17/3fNgf96zon/fdCQ/3/Slf9/1Jz/ + fdWh/4HWqP+G167/htmx/4zcuv+M3b3/i929/3zbtf973LX/g921/4Tbrv+F2ab/iNih/4fVmv+B05P/ + f9KN/3zPh/90zH7/bch0/2fEa/9iwWL/Xr1c/1i6Vf9WuE//U7dK/061Rv9KtUL/RrQ+/0O0PP9Asjr/ + PLE3/zuwN/86sDj/PLE8/0GzRP9FtUr/SLZN/0q3Uf9NulX/T7tY/1G+XP9RwGD/Wr9m/2fBb/9xv3b/ + hs2M/5fin/+S4Jz/X7dr/zqpS/9AqU//qNmx2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB9v4UBEJId7AmbG/8VpSf/FqYo/xinKf8aqiv/G6wt/x2uL/8gsDH/ + Hq8x/xKpKf8UqSv/FKkr/xWpK/8Wqiz/F6ss/xirLP8Zqiz/Gaks/xqqLP8cqy3/Hast/yCsLv8irC7/ + JKwv/yatMP8prjH/La4y/zCvM/8zsDT/N7E2/zqxN/8+sjr/QrU9/0e3Qf9PvEn/V8BR/1/GWP9jyV7/ + Z81m/23Pbv91z3f/eNB+/3rPhP950oj/etWL/3jXkf9315f/e9ic/37Zov+B2af/hNut/4fds/+I3bb/ + ft2y/37etf9+3a3/f9qm/4DYnf+B1pf/gNWQ/33Tiv960oX/ds9//3HMd/9syHD/Z8Zn/2LCX/9cv1j/ + Vr1S/1O8Tf9Qu0j/S7pE/0e7QP9EuT7/Qbc7/z+0Of87sjf/OrE4/zuxPP8/skP/RLVJ/0i3Tv9KuVL/ + TLtW/068WP9PvVv/Tr5d/06/YP9bwWr/b8V2/3rFfv+R15X/ouqn/5fhoP9etWz/OadK/0KrU/+w47nH + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjRiz + DKMg/xaoKP8Xqiv/Gqwu/xyrMP8irTX/JK83/ya0OP8hsTT/Fqou/xeqLv8Xqi7/F6st/xarLP8Xqyz/ + F6ss/xirLP8Zqyz/Gqss/xusLf8drC3/IKwu/yKsLv8krS//Jq0v/ymtMP8srjD/Lq4y/zKvM/80sDP/ + OLE1/zyzOP9BtTz/RrhB/02+SP9WxE//XclW/1/NW/9hzl7/ZtBl/27RcP900Xj/ddJ8/3TTfv9z1X// + cdeD/3DYiP9z2Y3/d9qU/3nbmf983J//gd2m/4DcqP973Kn/geCx/3rbpP942Zr/eNiS/3rWjv951on/ + d9SF/3XSf/9z0Xn/bs9z/2nMbP9ly2T/Ysle/13GV/9Xw1H/UsFL/0zARv9JvkP/Rb5A/0K8Pf9AuTv/ + PrU5/zuyOv87sTv/PrNA/0C0Rf9Ctkr/RbhN/0i5Uf9Ku1X/Trxa/1G+Xf9Rvl//UL5j/17Ebf9yyHv/ + hMqI/53WoP+s67H/leGf/1e1Zv81pkj/SaxZ/7zsxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSLI3oKqh//D6oj/xGxKf8ZtjX/HKc3/zOrS/82qkv/ + M7hH/yi1Of8nrzz/JK87/yGvN/8drjP/Gq0v/xeuLP8Vrir/Fa4o/xatKP8XrSn/GK0r/xuuK/8drSz/ + IK0t/yKtLf8krS7/J64v/yquMP8srjD/L64x/zKuMv80rzT/OLA2/z60Ov9EukD/TL9G/1PGTP9Zy1H/ + WcxV/1bLVv9azFn/YMxg/2XNav9pzm//adBy/2fRc/9p0nb/a9R8/2/Wgv9z2Yr/ddmO/3bZkv952Zn/ + edib/3PXnP9926j/cteZ/3HVkP9v1In/cdWF/3DVgf9u1H7/b9R5/27Tc/9p0W3/ZM5n/2DMYf9dylv/ + WchV/1XFUP9QxEr/ScBD/0a9Qf9Cvj7/P7s8/z63PP87sjv/OrA6/zmwPP85sT//OrJB/zuzRf9Atkn/ + RbhP/0q7VP9TvVz/WMBi/1u/Zf9jvm7/Z8tz/3bRgv+X0Z//s8+3/7vkwv+J3Zf/QbtV/y6lRP9jq3H8 + 4PznRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Lpw9QAicGv8OqCP/Da4m/xKxLP8frjn/PrhW/z+yU/85uU3/M7xF/zG1Rf8ttUP/KrQ//ya0O/8gszf/ + HrIz/xyyMf8asS7/F64s/xitLP8ariv/G64s/x2tLP8frS3/Iq4t/ySuLv8mri//Kasw/yqmMv8roDT/ + K5o1/y2YNv8xmzn/OKU9/z+xQf9GvUX/TsZJ/1LGTf9Pwk7/SrlO/0ixTv9HrVP/TKxY/1CuXv9Tr2L/ + VLBj/1WzZ/9aumz/YcV0/2nPe/9p0X//aMuD/2bBhP9iuYT/WbWD/2e6kv9euob/YsCD/2XJfv9o0Xv/ + adR6/2fVdv9n1HP/Zs9t/17HZv9Wvl//ULVZ/0yvVP9JrlD/SbBN/0a0Rv9DuEH/QLs//z+7Pv88tT3/ + OKk9/zSfPf8xmj3/L5g9/y2ZPf8unT7/MKU//ziuQ/8/tk3/SbpV/1O/Xf9awWT/XsFo/2XAb/9szHf/ + ftSJ/53UpP+628D/uunD/4LZj/9AtVH/NaFG/4C8ie7a++EqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOsVwKC4sY+g+kI/8MrCP/C68m/x+0Of9Ix1// + S79f/0bBV/9CxFX/O71P/zq8Tf80u0r/L7pE/yu4P/8mtzr/JLc4/x+zNP8bsS//HbEw/x2xL/8dsC// + HbAv/x+wMP8hsDD/I68x/ySqMv8knzT/Io42/yB8N/8dbzj/H2o6/yJwPf8nfT//L5A//zimQf9DuUT/ + SL1H/0OvSP85lUj/MX5I/y5ySf8ucUv/MXFN/zNyUP8zc1D/N3lV/0CJW/9Po2T/XL1u/2HEc/9ctnP/ + T5pu/0OEaf86d2f/O3ls/zqEav9Dmmz/VbVx/2PJcv9p03H/ZdJu/2DMaf9Xu2H/S6Va/z6PVP81fk// + L3RM/y5ySv8vekj/M4lF/zicQP87rD7/OrM9/zaoPv8tkT//JntA/yJtQf8gaUH/IW5C/yN7Qf8okT// + MqZD/z62Tf9Jvlf/VMFf/13EZ/9gxWv/Z8Nz/3PNf/+J15X/pNqt/8Lryf+177//d9KF/0CwUP9DolH/ + oNSo2eD75wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQgR3KD50h/w+vJv8IsCL/GLY0/0jMYf9c0G//WMtp/0/JYv9Fwlj/QsFX/z7AUv84vk7/ + M7tI/y+5Q/8sukD/Jrc8/yK2Nv8jtTX/IbQ0/yG0M/8htDP/IbQy/yKzMv8jsDH/IqIy/x6INv8WZjj/ + DlxV/wpyh/8JgJ3/CoKe/w9zgP8ZYE3/JXZA/zKYQf86p0T/NZRE/xyJhP8OhKH/DYGh/w6Bov8OgaL/ + DoGj/w+Co/8PgqT/FIyn/zZ9Xv9Mp2L/Vbdo/0yhZv8klaH/FIiq/xCCqf8Pgqn/Eoir/yCVof9IoWb/ + W8Fp/2HPaf9by2X/Ubde/0CTVv8tak7/HV9j/xF0jv8NgaL/DYCh/w91j/8ZYF3/JWtA/y6MPv8xnzz/ + Lpg9/xyJav8Nip//CoCg/wqAoP8KgaH/Do2h/x+JYv8xoEb/QLdQ/0zBWv9XxWP/YMhr/2PKb/9syXn/ + gNCK/5vao/+v4Lf/xvfO/6rvtf9qynj/RKxU/16qaf++6cWvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGEL5ERmSP/ErMq/wa2Iv8Ptyv/ + PspX/2refv9s133/Xsxu/1HJZP9Ox2L/ScZd/0TDWP8/wVL/OL1N/zW7Sf8vvEb/LL1A/yu9Pv8ouzz/ + J7o6/yW5OP8kuTX/I7kz/yO0NP8emjP/FW42/wWawv8Avv3/Aqzj/weDov8JgZ//A6fb/wG59v8NfZT/ + IWlA/y2LQP8qgED/GlJG/wG7+P8Avv3/BKrf/wyBof8NgaH/DYGi/wqPuP8Bufb/JWhe/0CXV/9Msl7/ + Q51c/ytkVP8ReZr/AL79/wC+/f8Pe57/ImJP/0GeXP9Uwl//Wcxf/069W/89l1P/JmNU/wmVwf8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Ki6z/HmM+/yeIO/8ojjv/HW09/xBPVP8Avv3/AL79/wSl2f8YS0X/ + Jn5H/zWmSv9FvVX/UMVf/1vKaP9kzW//aM90/3TSgf+Q1pn/rd+0/7zpw/+++sj/lOih/1zCav9QsF7/ + h7+N/9f3220AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASqFWVhmdKv8TtCn/B7si/wi3Jf8vwEn/beGB/3vfiv9s0Xv/X9Jx/1zRb/9Xzmr/ + UMpk/0nIXf9DxVf/QMNU/zzDUP82xEr/NMNH/zDDRP8swUD/KL88/ya+Of8jvjf/I7o1/xWRL/8SXzj/ + Aqnf/waCov8NRTr/FVk9/xhWQP8SRED/B460/wC+/f8Oc4b/IWo+/yNvP/8YSUD/Abj0/wC+/f8JlcH/ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6rQKwFsRX/BLsS/xXBKP8iuTb/Ssxe/5X4pv+e4K3/ + ld+h/5DlnP+L5Zv/gd+W/3rbiv9z2Hn/addz/2PYdv9g13L/WdVt/1LUZv9K01//RdBZ/0PQVv89ylH/ + NbdL/yqTSP8ZXUT/CnqX/wKv5v8Avv3/AL79/wC+/f8Avv3/AL79/wiHpv8YZzv/HG86/xJKPP8BuPT/ + AL79/wOp3v8JgJ7/CoCe/weRuf8Gns3/IWo+/zOfPf8/wj//QslB/zuzQ/8qf0P/EWV2/wC+/f8Avv3/ + EGV1/yh+P/84sj//QchA/zy8QP8qj0H/F09B/wC+/f8Avv3/CIOj/xtpPf8qpTn/McM3/yy5Nv8gjjn/ + ElI8/wG49P8MYF7/FHU2/xN8Nf8OTjv/Abj0/wC+/f8IlcL/Emh//w2CpP8SeZT/JWJi/z58YP9ep3X/ + e8uK/5Demv+z57n/yfPO/8Pzyv+S25v/Y8hw/1K1X/94wYD81PvZSgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + acJ2KBWaH/sAugn/CMgY/yO+Nv8jsjb/cu6K/7bqyf+p6az/neaa/5vkpf+X4bH/idyg/37hgf955Hv/ + ct6E/27dfv9p2nn/Ydlz/1rXbP9V1mb/UNZj/0nOXP89slT/Kn9O/w2Anf8Avv3/AL79/wC+/f8Avv3/ + A6nf/wWXwv8Lb4X/F10//x+DOf8efTj/Ek07/wG49P8Avv3/A6ne/wiAnf8JgJ3/CIqu/wWezf8faDz/ + L5w6/zq8Ov88wjr/N689/yh9P/8QZXX/AL79/wC+/f8PZXT/J309/zavPP87wzz/NrU9/yeJPf8WTT// + AL79/wC+/f8IgJ3/Gmo6/yilN/8uxDX/Kroz/x6QNv8RUzv/Abj0/wxgXf8TdTX/Ens1/w1PO/8BuPT/ + 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 + vOvB/7nwvf+s7LT/qeuy/6Tprf+b6Kf/lOae/4zkmP+J5JX/fd6K/2rHfP9PmGz/J2ty/wO07/8DtO// + E2mB/xlGS/8WT1n/DXqZ/wG7+P8TaGv/HXFA/xdnPv8NQz3/ALv4/wC+/f8Cmcb/CEI7/wdBOv8HQTn/ + BHSM/wKPtv8FQDj/A4Kg/wN0i/8FPzj/BT83/wRjcv8Avv3/AL79/wJhbv8EPzf/BD82/wNyh/8Cgp// + BEA2/wRJRv8Avv3/AL79/wKNsv8FTzb/CYgt/wuoKP8Lnin/CG8w/wRCOP8AvPv/A2Fs/wVLN/8HUDj/ + CUI8/wC7+P8Avv3/CJfF/x1GUP8dUmT/C5fF/wC+/f8Avv3/LHua/3Kbjf+bz6n/iNuT/2LLcP9SwWD/ + d8OB/NH32EYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIHPf38bnhr/ + Cb0b/w+8Jv8GwRr/CLEN/1LOUf+09b3/3Pfr/9Dl3P/I78n/wvbC/7jwwv+28b7/sO60/6jrq/+g6qT/ + meih/5Toof+K5Jb/fdeI/2m8ff9KjGv/K2pv/w6UwP8FsOr/AL79/wC+/f8Ct/T/CKHS/x9xY/8mekf/ + F31s/weOs/8Avv3/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/Ap3L/wVAN/8CjbL/AL79/wC+/f8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/AL79/wKNsv8DX2j/AZC2/wC+/f8Avv3/AbDo/wOFmv8Igjj/ + Cp0o/wqVKf8FgmP/ApC2/wC+/f8BoM7/BGNp/wZhZf8EjbH/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/ + CK3m/yKDqf9XfXn/gLSV/4/Qm/9qynX/U75g/1u8Z/+28r+j3/7kBgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0+nTDIPDiOcdoyr/BacR/xiyJP8Ixw//B7wQ/0rKYP/G88n/ + +v3x/+H55P/G7db/xe7S/8j0zf/B77r/tuip/7DoqP+r6a3/oeaw/5nipf+T3pv/h9GU/3O5h/9Zl3X/ + Q3hn/zViXv8vWVr/KldW/yxeVf80dFj/OYxX/zaTU/8rgUv/H2VG/xhRRP8UTkL/E05B/xJOQP8PTj3/ + DU87/wtUOP8JXjX/CmYz/wtcNf8KUzb/CE02/wdMNf8GSjX/BEkz/wJJMv8DSjP/BUs1/wZLNv8GTTb/ + B1A1/wdTNf8HUDX/B001/wZMNf8HUjT/CGou/weKJv8InSL/B5kk/wd+Kf8GYTD/BVI1/wZWNf8LXzf/ + EGA7/xVXQf8bUEn/H09N/yNRUf8nVlP/LFZY/zZXYP9KZm//Y4aA/3Osif9txoH/ZNBz/1y9Y/9ns2// + pdasyOf77AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + wPDETW/KefgPnhb/B7sE/wavIP8KtDL/EKoX/1vLTv/F98D/5vvv/+Hu5f/Y69P/1/PZ/8zy0v/A78r/ + vvLH/7vyvv+w5q7/puSp/6Hmqv+b4aT/j9ma/37Ij/9utYL/Yad5/1qedP9SnW3/U6Nr/1Wta/9Stmf/ + TLZg/0CpWP84m1L/MZFO/yuNSP8pjEf/JoxD/yGLPv8dizv/GI82/xWXM/8VmjH/E5Ew/xCLL/8Ohi// + DYQu/wuEK/8Hgyn/BYIm/wWCJ/8Jgiv/CYMq/wmGKv8JiCn/CYko/wmHKP8JhSj/C4Uq/wuJKv8LkSX/ + CqAh/wmpH/8KpyD/C50l/wqRKf8KiSv/DIot/xONMv8bjjr/Jo1E/zOOUf88j1r/QpJf/0yXZv9Ql2r/ + YJ93/3Wwiv97u4v/b71+/2TEcv9ix27/Z7Rt/6Tep87P99QbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu+rBXmG/aPAIrwz/Dqkl/wumKP8JtRP/ + CaoG/02/Tv+98cP/6/bq//Hy6//n9uj/3/vm/9L43P/D7sz/v+nC/8nuyf++78D/r+u1/6vqsv+j6Kv/ + meGj/4/bmv+G1pP/gdKP/3rPhv92z4H/dNJ//2zSeP9kz3D/Wslo/1TEYv9OwV7/RbxV/0G6U/89uk7/ + NrhI/zC2Qv8puDv/Jbk4/yG4Nf8bsDD/Gq8v/xetLf8UrCn/Dqwl/wyrI/8IqR//Bqkf/wqqIf8KqiH/ + CKsf/wirHf8Iqxz/B6oc/weqGv8Lqx//Dqsi/wysH/8Lrh3/DLEd/w2zH/8QsSP/ErEm/xGuKP8VrSz/ + Hq8z/yuxPf85tUv/S7pb/1a/Z/9ewm7/bcN6/3HHfP92z4H/eNeG/3XWgv9synf/Ybxt/2W5b/+Vypm5 + yfPLFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAArOO1REe0UuYRlQv/BqQI/wi5Hf8AqxL/C6EM/03BTf+y7bn/6/n1/+r76v/q+OL/ + 5PXa/9722f/W9dv/yvDc/8Puzf++7sL/uuy+/7TruP+r57H/ouWp/5vko/+Y46D/kN+Y/4vdkv+G247/ + ftmH/3XVf/9s03f/Z9Fy/2PQbv9XyWL/U8hf/07HWf9GxVL/PsNL/zbBRP8xv0D/Lr49/yS5Nf8iuTT/ + Hrcx/xq3Lf8Vtin/EbUj/wy0If8LtB7/CbQc/wq0HP8Isxv/CLMY/weyFv8GshX/BLIT/wmzGf8Osx3/ + DrIb/w6xHP8PsRz/ErMg/xe2Jf8auSf/G7cr/yC2MP8pujn/OL5F/0jEVP9ZyWX/Y85v/2zQdv98z4P/ + etKA/3Tafv9u3nr/ZNFw/2C/a/9uvnj/gcaJmsPmww8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo86lJE+iQcwKkwj/ + AZ4O/wanG/8FqQ//BawF/yizMf+H0JT/z/fR//z+9P/89PH/9/Pw/+f97P/H+tj/yPHR/9Dt0f/K7cz/ + wuvE/7rovf+y5rf/q+Sx/6fjrf+h36X/m9yg/5fcnP+Q2ZT/h9WN/37ShP930H//c897/2fIcP9kx23/ + XMZm/1TDYP9MwFn/RL5Q/z68Sv86ukf/M7pC/zG5QP8stzv/JrY2/yC0Mf8csy3/GLIp/xSxJf8OsB// + DrAf/wyuHP8Krhj/Ca0X/werFP8HqxL/Cq4X/w2uGv8OrRv/Dqwc/xKsHf8XriL/HLIo/x+0Kv8nsjP/ + L7Q8/zi6Rf9Gv1L/VMRe/2LJa/9rzHX/cc16/33Og/94z4D/cdN5/2TOcP9VuWH/YLBq9YvKlXe37b8E + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAos+rEjiRQZsPhwv/EKAT/wSbD/8CqQX/AaoC/yKiIP94zHv/ + 0O/Y//f8/P/59v3/5PXn/9P8zP/Y99b/3vDe/9jv2f/Q7dL/yOrK/8Dpw/+55r3/teW7/7Dgs/+q3a3/ + pt2p/57aof+V15r/jNSR/4bSjP+C0Yj/eMx//3TJev9sx3X/Y8Rt/1rBZf9Rvlz/S7xW/0i6VP9Bukz/ + QLlK/zq3Rv8ztkD/LrQ5/yqxNP8msDD/Hq8r/xWtI/8VrSL/E6wg/xCpHf8OqBv/DKYX/wulFf8MqBb/ + C6kX/w6oGP8Ppxr/FKce/xupJf8hrSr/I68s/zKyPP89tkb/RrtQ/1LAW/9dxWX/aMhw/2/Jdv9yyXj/ + d8x+/3rSgf9uyHX/XLBj/2WtbeSFwo1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tNu2AE2hR2INiBXrBpUX/wufFf8Opwr/CKED/xOWF/9Mr1n/ouGy/+H96v/z/PL/7/Lj/+/z5//r9uv/ + 5fXl/97z3v/V8Nf/zu3Q/8fqyv/D68f/vuTA/7jhu/+14Lf/rd6v/6Pbpv+b2J7/lNaa/5DVlv+H0o7/ + hdCK/3zNhP9yyXv/acVy/1/Bav9awGT/Vr9g/0+8VP9MulL/SLhM/0C2R/86s0D/NLE7/zGvN/8prjL/ + HKsq/xyqKP8aqSX/F6Yi/xWlHv8Uoxv/EqIa/w2kF/8JpxX/DaQY/xCjGf8WpB7/Hacm/ySqK/8mqy7/ + OrND/0a4T/9PvVn/WsJi/2bFbf9uxnP/ccV2/3PEeP9tzHX/ZsJs/2CtZv9tq3Kyg7aIGwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKpUiYUixq8GIAV/yCMG/8NoRT/ + A5oG/wSXBv8lpyb/gdGB/9bt1v/18vX//ff7//f99v/y+fL/6fbp/+P04//a89z/0/HW/87x0f/K7Mv/ + xenF/7/mwP+45Ln/sOCx/6jdq/+i26X/n9ih/5TYmP+Q15X/iNOP/3/Qh/92zH7/bMh0/2jGcP9jwmv/ + W7xd/1i7Wv9TuVX/TbZP/0WzSf8+sUL/Oq8//zKtOf8lqzD/JKot/yKoKv8fpSb/HKMk/xigH/8Xnh3/ + EKIY/wylFP8Poxf/EqEY/xmjH/8hpSf/Kagu/y2qMv9FtEv/UbpZ/1i9X/9hwWb/acRu/27Ec/9wwnT/ + b8B1/2DBaf9Rp1jtVpxcboi5jAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAH64fQc8dTlsGnAY6gqMCv8BigL/A5kE/wSYB/8QhxD/QpxB/5zdl//o+Of/ + /f79///8/v/58/j/8fDw/+337f/l/ef/2fvc/9X81f/O+sv/xfDD/8Hqvv/C6L3/wOW7/7nbs/+u06r/ + nuCi/5rfnv+T2pf/jNOP/4TOiP9/yYP/fciB/3bEfP9nuW7/Zrls/2O5af9et2P/V7Rc/0+yVP9Lr07/ + Q61H/zesPP82qzn/Mqk1/y6mL/8ppCv/I6Ak/yCcIf8ZoB3/FaMb/xafG/8ZnB3/IZwl/yuhMP84qD3/ + Qa1F/1qzWv9kuGX/Zbtm/2S6Zv9kvGj/acBt/2a+av9btmH/WZlft22kdSgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/kD4g + D3sOowN5BPoEigf/CpsP/wSLBv8GfQb/JI4j/2qvav+v2bD/2/Ta//f+9f/1+PP/9PTx//j39f/z9PL/ + 6PDl/+Hs3f/Z6db/1evS/9Huz//J7cj/veS8/7Lbsf+32bb/tNe0/63Trv+lzqb/ncme/5XEl/+Sw5T/ + icGN/3DAd/9rvXL/ZLhp/1y0YP9YtVv/VrZa/1e7Wv9QtVT/QadF/z6mQv85pT3/NqU4/zKkMv8upC// + LaYt/yCeJf8YmCH/HZsm/yGZKv8mmS3/LZw3/zymRv9JslT/VrBZ/160Xv9jt2T/YrNk/2CvZP9lsGn/ + aLFs3lupYFyEvIoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm4TPQppCsQEgQb/CJIN/waMB/8ChQL/ + CncK/x9/H/9YqVf/qt6n/93u2//0+vH///r5//zw+P/87vr/+e33//Ls7//p7un/4fHi/9bx2P/J68z/ + wOfE/8nhyf/H38j/wNzB/7bYt/+r067/n86j/5nJnP+UyZf/idCO/4fNiv+AyoL/dMR4/2u+bP9huGL/ + WLFY/1ixWv9ds2H/VK5Y/0urT/9BpkP/N6M5/zCgNP8uozD/J5kt/yCPKP8gjSn/JpEw/zWePf9Ap0z/ + RKlR/0KlTv9NrFP/UqxV/12wX/9psmv/YaBk7VONVYFelF8SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAP5FCBAlpCk8CbQLKBX4F/wmLCP8EhQP/BYMF/w+ADv8feh3/So5H/5HBj//S7c// + 5vvj//r9+v///P//9/b3/+vu7v/j6uT/3erf/9vq3v/X6tr/w+DF/7/gwf+63r7/suC2/6ver/+i26j/ + mtmh/5fUnP+ayZr/msqZ/5bKlf+OyI7/hsKF/3y9ev92uXL/a7Jr/2GsZP9isWX/XbNh/1SvV/9CpkX/ + LJcv/x2LIP8kjSb/MZMy/zOUM/81lzj/PJw//0SiSP9OrFT/WLRd/1yzX/9crl7/V6FZ71SUVJBbjVke + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACd6JwUFYAVL + BGAEwQl5CP0IgAb/AnUB/wV1BP8GcAf/DmwO/yqGK/9es1//odaj/8DmxP/T89b/5/vo//T99P/5/Pj/ + 9/f2//Hv7//c69v/2ezY/9br1f/O6c7/xeTF/7ndvP+u2LH/rNSv/7TOsf+tyqr/pMSf/5q+k/+Quov/ + irmE/4m4g/+GvoH/esZ7/2y5bv9XqVn/RJtF/zORNP8piyr/I4gk/yuNJ/82ki3/PJY0/0aeQP9Spkz/ + WKlS/1SjUP9PnUr/UphS6FGTUodQjlEfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDNgtlCp8KZwruA2gD/wFyA/8GfQf/ + BHcE/wdmB/8WaRj/LoAw/1mhWf+FwoX/sdyv/9DozP/i793/6/Pn/+rs5P/q7uX/6/Dl/+rv5v/m7eH/ + 3eba/9fh0//Q3cz/vNu4/7nZtf+z1q//qtCk/6DNm/+ZyZP/lsaO/4PAfv9fsl7/TaFN/zaNNf8ofib/ + JH0h/yqFJv8ykC//NZEu/zaQL/9Aljj/SZhB/06WRv9Rkkn/UI1Iy0SEPGc+dzsRAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAhPCBQCTQJgBGUDvgVvBfcGdQb/DH0K/wRrA/8AZgH/BmcF/w1nDP8bahj/ + Mncs/0qKRP9kn13/k72O/5vFmP+oz6T/tdmx/77fuv/E4b3/xeC+/8Hfu/+q36n/pdqj/5nSlv+HxIP/ + cbNu/1yiWP9NlUn/MoMu/w1vDP8UchH/GncW/yF8Hf8ogiP/L4Un/zSKLP8yii7/NIw2/z6PP/9CiUHf + P309k0R3QDddiVgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CVwHHwRYBGIMYwa1BGcB7QRsAP8JcQP/CHAD/wJoAP8AYwD/A2QC/wdnBv8OZA3/D2gP/xRwFf8aeBr/ + IXoj/yd6Jv8odyf/KXgo/y19Lv8qeSn/InQj/xpxGf8VbhP/EG4O/w9uDP8PdA7/En0Q/xV7Ef8ZexP/ + HnwY/yZ+Hv8vgST/NIQo/TOGMtEofDKOJHMsPi50NggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQALAE0APQJWAngEXQS1 + AV4A4ABgAP8AZAD/AGcA/wJpAf8BZwD/AGYA/wBkAP8BZAH/AmUC/wJmAv8CZwL/AmsD/wJqAv8CaQL/ + AmsB/wZtAv8Mcgb/EHUM/w90Cf8KbwX/EXIK/xt1E/UheRvLIXUcnBlpElYOXggjAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAACFIEHgJNAEIBUQBkBFsDkAVaBasEWATC + A1YD1gJWAuUBWQHyAlsC+gNdBP4GXgL9BVwC9gVcAuwHXQTeCV4GzA5iCbcQZg2fDWEHeghTAlMNVwcw + Gl4SCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////8AAP////////////// + ///AAAAH///////////////8AAAAAH//////////////4AAAAAAP/////////////4AAAAAAAf////// + //////wAAAAAAAB////////////wAAAAAAAAH///////////4AAAAAAAAAf//////////4AAAAAAAAAB + //////////4AAAAAAAAAAP/////////8AAAAAAAAAAA/////////8AAAAAAAAAAAH////////+AAAAAA + AAAAAA/////////AAAAAAAAAAAAD////////gAAAAAAAAAAAAf///////gAAAAAAAAAAAAD///////wA + AAAAAAAAAAAAf//////4AAAAAAAAAAAAAD//////8AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD/// + ///gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAAAAAAAAAA + AAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAA////4AAAAAAAA + AAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAD///4AAA + AAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP/ + /4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAA + AAAB//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAA + AAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB/ + /AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAA + AAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAX/wAAAAAAAAAAAAAAAAAAA/8AAAA + AAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB/ + /wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAA + AAAAf/+AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAA + AAAAAAAAD///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAP///8AAA + AAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH// + //gAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAA + AAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////+AAAAAAAA + AAAAAAAA/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAB/////wAA + AAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAA/// + ///AAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAD//////gAAAAAAAAAAAA + AB//////8AAAAAAAAAAAAAAf//////AAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAA + AAAAAAD///////4AAAAAAAAAAAAB////////AAAAAAAAAAAAA////////4AAAAAAAAAAAA/////////A + AAAAAAAAAAAf////////8AAAAAAAAAAAP/////////gAAAAAAAAAAP/////////+AAAAAAAAAAH///// + /////4AAAAAAAAAH///////////AAAAAAAAAH///////////8AAAAAAAAH////////////4AAAAAAAH/ + ////////////gAAAAAAH//////////////AAAAAAP//////////////+AAAAA////////////////+AA + AD////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////ygAAABgAAAAwAAAAAEAIAAAAAAAAJAAABMLAAATCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGATc3NwsnJycfKioqRSMjI2cnJyeQKysrqSsrK74rKyvOLCws2SQkJN4kJCTd + Jycn1SsrK8kuLi63Ly8voS8vL4E0NDRaPj4+NkpKShVkZGQGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGAS8vLyEmJiZmJCQkoiQkJNUkJCT0Hx8f/yUlJf8uLi7/ + Ojo6/0VFRf9MTEz/UFBQ/11dXf9aWlr/UVFR/0NDQ/8zMzP/Kioq/yUlJf8iIiL/JSUl/isrK+krKyvF + KCgojUVFRUpWVlYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjY2AygoKCsiIiJ8Hx8fzSsrK/s7Ozv/ + SUlJ/1xcXP9tbW3/eXl5/4SEhP+Kior/kJCQ/5aWlv+ZmZn/mpqa/5qamv+dnZ3/oaGh/6Ojo/+kpKT/ + oqKi/5qamv+UlJT/g4OD/2hoaP9HR0f/NjY2/ysrK/8hISHwKysrsEBAQFxLS0sVVVVVAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCwsABsbGwwoKChW + GBgYuCIiIvJGRkb/XV1d/2hoaP90dHT/fX19/319ff99fX3/gYGB/4uLi/+Pj4//kpKS/5aWlv+ampr/ + nZ2d/6Kiov+jo6P/paWl/6enp/+pqan/qamp/6ioqP+tra3/r6+v/6urq/+hoaH/mpqa/4iIiP9mZmb/ + Nzc3/x4eHv0kJCTjLS0tlTU1NTNJSUkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAgICAMHx8faCAgINEzMzP+VlZW/25ubv91dXX/dHR0/3d3d/9/f3//h4eH/4uLi/+UlJT/ + oKCg/6enp/+rq6v/s7Oz/729vf/FxcX/y8vL/8vLy//Kysr/ysrK/8nJyf/IyMj/yMjI/8jIyP/CwsL/ + u7u7/7e3t/+4uLj/tra2/6ioqP+ysrL/rq6u/5mZmf9fX1//LCws/yAgIPYjIyOvPDw8PFtbWwEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCyEhIV4pKSnfQ0ND/2dnZ/9vb2//bW1t/3Z2dv+BgYH/ + goKC/4SEhP+UlJT/qamp/7u7u//MzMz/2tra/+bm5v/r6+v/7+/v//T09P/5+fn/+/v7//j4+P/39/f/ + 9/f3//f39//29vb/8/Pz/+rq6v/o6Oj/5eXl/9/f3//W1tb/0tLS/8rKyv++vr7/tra2/7Ozs/+tra3/ + oaGh/3p6ev8+Pj7/Ghoa/CEhIbRBQUE1VlZWAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIwMjIyM+Li4uwUJCQvtYWFj/ + Z2dn/25ubv9ubm7/fX19/4iIiP+ampr/tLS0/8zMzP/h4eH/7+/v//f39//6+vr//Pz8//7+/v/+/v7/ + /v7+//7+/v/+/v7//v7+//////////////////////////////////39/f/+/v7//v7+//z8/P/6+vr/ + +fn5/+/v7//c3Nz/1dXV/8zMzP++vr7/vLy8/7CwsP+ioqL/hISE/z4+Pv8cHBzxIyMjkjk5ORsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Hx8fECIiIok5OTn1YWFh/2VlZf9mZmb/ampq/3Fxcf+JiYn/pqam/8PDw//c3Nz/8vLy//b29v/5+fn/ + //////7+/v/7+/v//Pz8//7+/v///////v7+//7+/v/9/f3//Pz8//z8/P/8/Pz//f39//7+/v/+/v7/ + //////7+/v///////v7+//39/f/+/v7//f39//f39//6+vr/9vb2/+vr6//Z2dn/y8vL/8fHx/+6urr/ + p6en/6Ghof9xcXH/MTEx/xwcHNwrKytQS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAjIyM7NTU10VFRUf9nZ2f/aWlp/21tbf94eHj/kpKS/7Ozs//Nzc3/ + 5OTk//X19f/6+vr/+/v7//r6+v/6+vr/+Pj4//Pz8//w8PD/7u7u/+vr6//r6+v/6urq/+rq6v/q6ur/ + 6urq/+zs7P/u7u7/8fHx//X19f/5+fn/+/v7//z8/P/9/f3//f39//7+/v///////v7+//v7+//6+vr/ + +/v7//7+/v/7+/v/8fHx/+np6f/X19f/x8fH/7a2tv+xsbH/nJyc/1xcXP8jIyP6IiIimzU1NRYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJycnBy8vL2dBQUHuWVlZ/19fX/9nZ2f/ + b29v/4eHh/+np6f/ycnJ/+Xl5f/v7+//8/Pz//T09P/t7e3/5eXl/93d3f/X19f/1NTU/9HR0f/S0tL/ + 09PT/9XV1f/X19f/29vb/+Dg4P/k5OT/5+fn/+3t7f/w8PD/8vLy//b29v/5+fn/+fn5//Pz8//7+/v/ + /v7+///////8/Pz/9/f3//v7+//+/v7/+/v7//n5+f/7+/v//v7+//39/f/z8/P/4+Pj/87Ozv+9vb3/ + tra2/6urq/+EhIT/MjIy/iAgIM86OjotREREAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKioJ + LS0tkE1NTfpdXV3/WVlZ/2lpaf98fHz/np6e/8TExP/o6Oj/8/Pz//Dw8P/r6+v/4eHh/9PT0//Hx8f/ + wMDA/8TExP/Hx8f/x8fH/8jIyP/Nzc3/0NDQ/9XV1f/X19f/2tra/97e3v/i4uL/5OTk/+fn5//p6en/ + 6+vr/+/v7//y8vL/9PT0//b29v/7+/v///////7+/v/9/f3//f39//v7+//9/f3//v7+//7+/v/+/v7/ + /f39//r6+v/9/f3/+fn5/+7u7v/h4eH/0NDQ/7u7u/+tra3/mZmZ/0pKSv8eHh7lJycnTwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACoqKhE2Nja1UFBQ/mNjY/9iYmL/c3Nz/5CQkP+2trb/3t7e/+rq6v/m5ub/ + 3t7e/83Nzf+/v7//ubm5/7W1tf+5ubn/wMDA/8PDw//Gxsb/z8/P/9XV1f/X19f/1NTU/9jY2P/c3Nz/ + 3Nzc/97e3v/f39//4ODg/9ra2v/a2tr/29vb/9vb2//c3Nz/3d3d/+Li4v/h4eH/4uLi/+bm5v/v7+// + 9vb2//r6+v/+/v7//f39//39/f/9/f3/+fn5//b29v/6+vr//Pz8//z8/P/6+vr/7+/v/9ra2v/Dw8P/ + uLi4/6+vr/9dXV3/HBwc9ioqKm1LS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExGzw8PLtYWFj/XFxc/2lpaf92dnb/ + np6e/8zMzP/j4+P/4eHh/9DQ0P+8vLz/tLS0/7CwsP+xsbH/tbW1/7u7u//FxcX/zs7O/9XV1f/c3Nz/ + 4eHh/+Pj4//e3t7/19fX/8nJyf/Dw8P/vLy8/7S0tP+srKz/p6en/6SkpP+mpqb/qqqq/7CwsP+1tbX/ + urq6/8nJyf/Pzs//1dXV/9nZ2f/b29v/29vb/+Pj4//v7+//+fn5//z8/P/9/f3//f39//7+/v/9/f3/ + /Pz8//v7+//6+vr/+/v7//Dw8P/k5OT/z8/P/7y8vP+rq6v/dHR0/yAgIPohISF2Q0NDBgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8W + Ozs7vlJSUv9YWFj/ZmZm/35+fv+ysrL/3Nzc/+Hh4f/Nzc3/u7u7/66trf+kpKT/qamp/7Kysv+5ubn/ + ysrK/9jY2P/d3d3/3Nzc/9fX1//Kysv/tra2/5ydnf+Fh4j/eHt8/2Zpa/9dYmT/V11f/1BVWP9HTE// + REhM/0ZLTv9HTVH/TFNW/1ZbXf9eYWL/Y2Vl/2xsbP90dXX/g4WF/5qcnP+ztbX/wsTE/9bY2P/X2Nn/ + 3d7e/+Tk5P/r6+z/8/Pz//z8/P/+/v7///////39/f/5+fn/9/f3//j4+P/s7Oz/7Ozs/9fX1/+8vLz/ + s7Oy/29vb/8kJCT5KioqeGJiYgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAADs7Ow5BQUHBUVFR/19fX/9paWn/hYWF/8XFxf/e3t7/y8vL/7e3t/+oqKj/ + paSk/6moqP+oqKj/v76+/9bV1f/j4+P/5OTk/9bW1v+9vb3/mpub/3p8fP9kZ2j/U1RX/0NESf87PEL/ + ODlB/y4xN/8nLTP/Iyox/yEoMP8gKS//Iysz/yQqMf8dJy3/ICkv/ykvNP80Njr/PDw+/0VDRf9IR0n/ + REZK/0RJUP9JT1f/UVdf/3h+gP+Wm5z/tLe2/9LU0v/i4+H/3t/d/+Lj4//x8fH//f39//39/f/4+Pj/ + +Pj4//T09P/4+Pj/9vb2//X19f/a2tr/vr6+/729vf98fHz/ISAg+jQ0NHQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzDD09PahTU1P/W1tb/2pqav+UlJT/ + yMjI/9XV1f+6urr/pqam/52dnf+goKD/qqqp/8TDw//T09P/4ODf/9jY2P/BwMD/l5eX/3R0dP9YWVn/ + P0FC/zU4OP8wNDT/KSwt/yosLv80Njr/QEFH/1RbXf9faWr/bHZ5/3qDh/+GkJL/jJWY/46Ulf+Gjo// + foeI/3V9fv9tcnP/Z2ts/0lMTf9AREX/MTo9/yIwNv8eMDf/IDM5/yw4Pf84Qkf/TlVY/3Z7e/+ipaT/ + vb+9/9na2v/h4eH/4+Pi//Ly8v/6+vr/+/v7//X19f/y8vL/9PT0//Dw8P/s7Oz/3t7e/8LCwv+tra3/ + cXFx/y4uLvk6OjpZWFhYAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjID + NjY2hklJSf1ZWVn/bW1t/5mZmf/FxcX/xcXF/66urv+YmJj/mJiY/6CgoP+4uLj/0M/P/+Li4v/S0dH/ + ra2s/4WEhP9fXl3/QUA//zMzMv8iIyP/Jykq/z9AQP9aW1j/fn98/6Chnv+5urf/ycvI/9DZ1P/P2tX/ + zdjU/8vX0v/M2NT/zdrV/87X1v/N1tb/zNbV/83X1f/Q2dj/1Nza/8rS0f+/x8X/qbWy/4WVkv9XbWn/ + OE5N/yEwOf8YJy//Iy82/zE4Pv9NT1P/b3By/5GRkf/BwcH/4ODg/+Hg4P/l5eX/8/Pz//z8/P/9/f3/ + 8/Pz/+/v7//09PT/9PT0/97e3v/Dw8P/sbGx/2hoaP8qKirrS0tLOwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDBgRkZG+l5eXv9nZ2f/lZWV/8DAwP+1tbX/mJiY/42Njf+VlZX/ + srKy/9TU1P/k5OT/1NPT/66trf95eHj/V1ZW/0FAP/8jJSD/HB0a/zs+Ov9qbWv/l52Z/8TExv/U0Nb/ + 1tXY/9bX2f/R1NX/y9HR/8/U1f/R1tf/0djY/9LZ2P/T29n/1NzY/9bb3f/U2t3/0tjc/9DX2//P1tr/ + z9bZ/8rP0//Q09f/19na/9XY2P/T09P/zM3M/5+qrP9ygIT/RVRZ/yw3Pv8vMzj/OTk+/0ZFRv9kY2P/ + ioqJ/8DAwP/c3Nz/4eDg/+/v7//4+Pj/+fn5//f39//z8/P/7e3t/+3t7f/g4OD/vr6+/7Gxsf9VVVX/ + NjY221hYWB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMCpDQ0PrWVlZ/2xsbP+Tk5P/ + uLi4/7CwsP+ZmZn/kZGR/5ubm//BwcH/29vb/9PT0/+qqan/g4KC/1NSUv89PDz/LCoq/ywtKv9UWVL/ + k5iS/8TJxP/S2NP/z9XQ/9HT1P/Oz9X/ys/R/87Y1v/V4t3/1eXd/9Xj2v/V49r/1uXa/9Xl2P/S5dX/ + 0OTS/9Di1//Q49r/0OXa/9Lm2//S5tv/0uXc/93q5P/d5+H/1t3a/87T0v/Q0dH/09PS/8TQyv/V39r/ + ztfV/6y0tv92fH//SUxO/zQ0M/8+PTz/R0ZF/2FhYP+YmJj/ysnJ/97e3v/q6ur/9vb2//r6+v/39/f/ + 7+/v/+/v7//q6ur/3t7e/8LCwv+hoaH/RERE/kZGRrFycnIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MjIyCzk5Ob5RUVH/aGho/4eHh/+urq7/qamp/5eWl/+Tk5P/oaGi/8bFxv/e3t7/wMDA/5OTk/9mZmT/ + Pz8+/ygnJ/8mJST/WVdX/6qtqv/K0cr/0NfR/8bNx/+/xsD/ztXQ/9Xd0//S3c//0uLR/8vgzf+92ML/ + sNC3/6bPsf+iz67/m8uo/5XIov+Rx5//ksmf/5HJpP+LyKP/h8ii/4vKpf+Tz6r/mNOu/57Ss/+o17n/ + t9zE/8Xizv/M4tT/zeDT/87az//M2M7/xtHL/8nT0P/P1tb/w8bH/4qIif9FREP/MTAv/zk5OP9NTEz/ + d3V2/66trv/V1NT/4+Li//Ly8v/6+vv/+/v7/+zs7P/p6en/4+Pj/9DQ0P/AwMD/iIiI/0FBQf9oaGhq + oKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj4AODg4fEpKSv9aWlr/enp6/56env+enp7/jY2N/5GRkf+qrKj/ + 1NXS/9PT0f+pqKb/cW9u/1VSVv8qJzL/Kyks/19eW/+0s67/zs7O/8nLx/+9wrf/vsa7/8bRx//D08r/ + u8zF/67Js/+iyKP/mMKZ/4y+iv+GwIT/h8WG/32/hP95voX/d8CG/3S/hP9uvoD/a71//2W5g/9duoT/ + Wr6F/17Aif9hwor/YsOJ/23Jj/9nwoj/asCJ/3bFk/+Cy53/i82f/6zQsv+21rz/wdrI/8fXz//EzMz/ + xs3M/9Tc1P/Nzcz/l5OU/0VBQv8tLiv/PkE8/1RXU/+TlJP/wL/A/93b3P/x7uz/9/X1//b29v/s7Oz/ + 6Ojo/97e3v/R0dH/urq6/3V1df9SUlLtfX19LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0vQkJC7FlZWf9ubm7/ + jo6O/56env+Hh4f/j4+P/7Gysf/Z3dj/xcfE/5OTkf9raWf/SEVE/yUiI/9JRk3/pqal/8bIwf/AxL3/ + wsfG/8TMyv+8zMP/sMay/6LBnv+TvY3/ibqD/4G2e/9+tnr/e7R8/3Ovev9op3X/XJ5v/02OY/9Hi2H/ + RYxk/0SOZv9Ej2n/RJFr/zuSbP8pkWn/HpJn/yGWav8gmmn/Ipxo/zWnbP9Cr3D/T7x2/1/Ig/9iy4b/ + ZsmE/3XGiv+Ay5H/kc+g/6HRsP+z1b//u9fD/7/Uwf/J0cj/0M7N/8XAwv9wcG//MDMv/zg8N/9HSEn/ + e3h9/7iztP/q5uH/8/Du//j4+P/39/f/7Ozs/+Tk5P/Z2dn/xsbG/6Wlpf9XV1f/dHR0tK+vrwgAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABAQECxUVFR/2ZmZv+AgID/jY2N/4+Pj/+Tk5P/srOy/9fW1/+ysbT/hYSG/2VkZv86Ojv/ + JyYn/3Jzb//Ex7n/w8nA/7S9uP+wwbX/rcKv/5u8of+HtZD/eKp6/3mucP93s2j/a6xY/2WaV/9ciVf/ + R3hP/0BsUf9Db1f/RHVf/0GDYf9AiWT/QY9p/0OUb/9GmnP/R5x3/0Widv8xoHP/IZ1v/x6db/8VnWz/ + Epxp/xWaZf8Tk1//Do9V/x+aXf8vqWX/PLNo/0fBa/9KwGb/Xch2/3PQif9+0JH/is2Y/63Ws/+71bz/ + w87B/83QzP/Ny8z/oJ2e/0lFRv81LjP/SUJI/3Brbf+zsaz/1dPR/+rq6v/6+vr/8/Pz/+jo6P/e3t7/ + 0NDQ/7q6uv+IiIj/Z2dn+qKiolYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7O0tISEj/Xl5e/3V1df+Tk5P/j4+P/4WFhf+5ubn/ + 1dXV/6+usP+Cf4X/XVxg/zAyNP9BRUX/mZ+e/8PIw/+7vbX/qbau/562pv+St5P/iLJ8/3qvaf9zrmT/ + a6Jh/1eIUf9HaUP/OVw7/zhXPv8+X0j/QnJP/0iFV/9TlF7/WJ1k/1Wmaf9Vq2//Va5z/1Wydf9Xt3j/ + WLl8/1S2gv8/s4D/LbF+/yexf/8jsX//H7B8/yKweP8grW7/F6Zf/x6nZP8RnVb/CplO/xamTv8gqlD/ + NbRZ/03Ba/9izXr/ctCE/4zSl/+i2KT/rtOt/7TLtP+9x73/yszH/7i1tP9lYWP/Lysv/z05O/9zcW3/ + o6Kg/87Ozv/w8PD/9fX1//Dw8P/q6ur/2tra/8vLy/+wsLD/cXFx/5GRkd7R0dEMAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09Cz4+PsNUVFT/ + a2tr/4uLi/+RkZH/jY2N/7W1tf/Ly8v/qqqq/3d2d/9YVFj/NjM3/1BUUf+qsq3/uMW8/6i1q/+jsKf/ + kK6U/4KwhP9zqWz/bKFZ/2aTVv9Lbkb/OE0y/y9HK/81VDH/PV47/0FzQ/9Kh03/UpRY/1igYP9cp2T/ + XKpr/16ydf9gtn3/YLmC/2C8hf9jwIf/ZcGK/13Ajv9Fv43/Mb6M/yW8iP8ivIX/Hrp+/yS9gP8iu3j/ + Irpz/ym8d/8ftWz/F69h/yKwYf8bplb/HaFR/yelVv86s1//T8Bp/2fNeP+B1IT/j9OM/53Qmv+r0Kn/ + tcyy/8DMu//Gz8X/gISD/y4uLv9APT3/aGdn/5ubm//S0tL/7+7u//X19f/t7e3/4uLi/9TU1P/BwcH/ + nJyc/3t7e//FxcVu2traAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAQEBAUEtLS/tmZmb/e3t7/5KSkv+Hh4f/np6e/9fX1/+lpaX/dnZ2/2JhYf83MzT/ + XV1b/7S7tP+4xbn/rb2t/5erlf+Jq4X/dqtu/12gU/9ZllH/SHFA/ytCJf8lOSL/KUgj/zNeK/9AdjL/ + SYM7/02SRP9SnlD/V6Vb/1usZf9fsmz/YrV1/2a6gP9lvoj/ZcCN/2jFkv9uyZb/csub/2rMnv9Qy53/ + NcmY/yXGkv8exIv/G8OF/yPFh/8jxIL/LMaI/zDHh/8nw3z/Ib9z/yK6cP8ftWf/JLNk/yiyYP8krFb/ + JatQ/0C9Wf9t13H/edZ1/4PRf/+S0JD/os+f/7HPr/+yybP/wc7F/46PkP8uKS7/Qj9B/21tbP+hoaH/ + 0NDQ/+3t7f/z8/P/6urq/93d3f/Jycn/ubm5/39/f/+qqqrZ1tbWEwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAHSEhIxFpaWv9ycnL/hYWF/4uLi/+TlZP/ + 1dbT/6mppv93d3X/aGVn/zs4Ov9lZ2H/trir/7nCq/+jt5v/jK6R/3Siev9qo1r/YZlU/0Z4Pf8hQBv/ + HCsZ/yREH/8tXyL/OG4p/0KAMv9JjTf/SZI7/06aRv9VpVX/Wa5g/2C4a/9iv3T/ZsSA/27Fi/9wx5P/ + b8mX/3HMnf90zp7/edCj/3PUrP9Z0q7/M8qe/yvKnv8ry57/KMuY/yrPlv8w0Jj/NtGZ/zfRlP8w0Ir/ + Ks6B/yHGeP8pyHf/MMZ1/y/Abv8tuWb/LLde/y6yUf9GtU//Y8Vb/3TRav951XL/gdJ5/5TRkP+gyqP/ + ssu2/8rTx/+TkYz/RENC/0ZHRv9tcG7/nZ+e/9PT0//08fP/7u3u/+bm5v/R0dH/xsbG/5iYmP+VlZX/ + 2traawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBB + T09P+GBgYP9/f3//i4uL/46Ojv/BxcD/u725/4GBfv9oZ2X/RkJE/2RgZP+6w7n/sbqq/6Gwlv+HqX7/ + Z59l/1aXU/9QiEP/LFIn/xksFv8bMxj/Jksj/ytlJv8udiT/N38r/z+KMv9HlTf/TZw+/1SjSf9cqln/ + Y7Bo/2q2dv9suYH/b7yN/3C8lf9wvp3/cMCi/3TEqf93x6v/eMiv/2vHsf9QxLH/NsCt/zDBrv8yxK// + MMSp/y7Kov890Kv/RNKp/0fUpP9A05n/ONOQ/zPUiP8y0oP/NdCA/zjMe/85yXP/NsZq/za7XP9HtVP/ + U7NL/1/BUv9n013/b9tl/3/YeP+Lzo//nsme/7TMqv/AyLb/jpGN/zM1NP9JTUr/dXl3/6inqP/f2tz/ + 9PPz/+np6f/Z2dn/0NDQ/6+vr/+RkZH/09PTzvLy8ggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABAQECjWlpa/21tbf+NjY3/jo6O/7Gxsf/DxMT/fn5//2ppa/9NTU// + Wltb/6yurf+st6//kKeZ/3mgg/9pnmj/YJ1N/0Z9L/8ePRr/EigQ/xg4Ff8hWBz/KWsh/yp4Iv8rgiX/ + N4st/0OTOP9Klz7/TplD/1OZTf9dmlv/Y5pn/2uhev9zpYr/eqiW/3axnf90t6X/dLus/3e/s/93w7j/ + d8W7/3DFvP9gw77/Sr67/z6+vP8/wL//Pb+6/zK+rf88wbH/Ssa3/07GsP9Jxab/Rcif/0DXmf861Y// + OtOG/z7Uf/881HX/OdJq/0DMX/9Xyl3/XsRU/1S2R/9NtET/WsZS/2nTY/9503X/idGB/5jHjf+vxLD/ + v8XC/319fP81NTT/WFdX/4GBgf+3t7f/7e3t//Dw7//m5ub/1dXV/8TExP+UlJT/wMDA8uzs7CYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxVERETzYmJi/3l5ef+IiIj/ + mZmZ/8/Pz/+Oi4//bGtw/1FRVv9QVFX/oqqk/7K+sf+QppX/daR3/2CkX/9Pkkn/NGQr/xUrDP8PIA3/ + GEAW/yJZG/8iaxn/JXgc/y6DI/84iCz/QIoz/0aJOv9Jhj//SoNC/1GFSv9dilf/Y5Jj/2ujef95spD/ + hbyf/4rHqv+LzLT/i8+8/4rSwf+J1MX/iNbI/4LUyP920sr/Ys/L/0rKx/9Bx8T/PcXA/z3EvP9Bxbv/ + S8i8/1TKvP9QxrH/S8Sq/0PCo/8/w5f/PsWH/0/Qiv9T1IL/R9Nt/0nSYv9d1GD/Y9BY/17FUP9Tu0z/ + SbhB/0zERP9k1Vv/c9pk/4jWev+Zyp7/q8Gv/8HJvf9sb2r/Q0FB/2RkZP+Kj4z/wsTD//Ly8v/w8PD/ + 3t7e/8rKyv+kpKT/rq6u99/f3zMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRWVISEj/bm5u/4GBgf+QkJD/urq6/62trf93dXX/ZmVo/0lKT/+IkYv/qLil/5euj/9unnL/ + XZpU/0qQN/8hWxb/DCEM/wwYEP8RPA7/HFYW/yNrGP8ufyD/L4Ah/zJ7Jv88ei7/O3Yv/z92NP9Kfz3/ + VIhI/2GWVP9xpWL/erNx/4HFhf+L0Z3/kNap/5nat/+d3cH/mt7G/5nfyf+W4Mz/leDO/47ezv+E3tL/ + ctzV/1rXz/9N08v/StPK/0jQyf9FzcP/R8vA/0nJvP9Jx7X/SMWw/1jFtv9IvaD/QruP/0W8hf9HvHf/ + Qr9o/0zPaP9n2m3/Z9Rc/2POVP9fy1T/U8FG/0W7Of9JxEH/WtRN/27YYf+B04D/lMqU/6/RrP+quqf/ + U1ZQ/0VFRf9rcG3/lJaV/9nZ2f/x8fH/5ubm/8vLy/+6urr/qqqq+tfX11v39/cAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVBD4+PrVWVlb/eXl5/42Njf+fn5//vb29/3x7e/9raWT/ + WllZ/21xcv+qt6v/lKeJ/4and/9UnlX/UoxM/yNKGf8JHQX/DxwK/xg8Fv8SWgz/Hm4T/yV6Fv8odxr/ + LW8g/zJuJv83cyr/PHox/0iIOv9YnEj/Z6xW/3G2X/96u2j/f71z/4fFiv+Oy6P/k86w/5fQuv+a08H/ + mdXH/5jWy/+V1s3/k9fO/5LX0v+H1tf/btDV/1LIzv89wsr/OcHL/zvEyv89xcj/RcfH/0jIwf9Qy8H/ + S8q7/zbAqv8xu53/M7mR/zG0f/88tnv/PLVx/z62aP9YyGf/a9Zi/23ZWf9l1VT/X8xM/1TAQv9Aujz/ + PsE6/1bUSv9s2mD/gdZ9/5LMkf+qyaf/kpqP/z09Pv9eYmH/eXt6/6ioqP/s7Oz/6enp/9XV1f/IyMj/ + qqqq/9TU1OPy8vIPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGHEBAQO5nZ2f/ + f39//5KSkv+2trb/mJiY/2ZmZf9hYFz/ZWRk/6Knpf+VqJT/gqR2/2ieV/9Glj7/KFEp/wgOBv8MIAf/ + E0QK/xtgEP8ichP/HHAP/x1uEf8eZRT/JmQc/zd3K/9Fjjb/UJlB/1ulS/9irFL/Yq5R/2SrU/9qp1j/ + baVi/3mufP+LvaH/k8Sy/53Nv/+h0sf/otXM/6TY0f+m29b/pdzY/6Xc2/+Z2t//gNTe/1/I1P9EwNH/ + PL7T/znAz/83vsz/Or3L/z27xv85ucD/K7Wy/x+5qP8ftqD/HK+M/x+sff8prnX/K61r/zSvZf9DtF3/ + W79g/2XJWv9n0Vf/X9FM/1fPRf9MwkP/PLU0/0fGPf9Z203/bNtj/4PVff+bz5j/scaw/3d7d/9FQ0T/ + cG9w/39/f//R0dH/7u7u/93d3f/Ly8v/s7Oz/83Nzf/w8PAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGVEVFRf9ubm7/g4OD/5qamv+6urr/d3d3/2JhYf9aWVj/g4aE/6Oupf+HpoT/ + aZ5g/0+TQf8taCD/CR4G/wkUBP8TOgb/EVkJ/xVrE/8eaQ//HGYP/x9oEv8qchz/NX0o/0GNM/9KmTr/ + TZk+/1KaRP9anUv/Xp9P/1+cT/9onFX/bp9f/3Kocv+Eu5n/i8Or/6LTxP+n18v/rt3U/7Xi3P+55uL/ + ueXj/7Lj4v+k4OX/j93o/2zR3P9Nx9f/PsTV/zW/z/8yvc3/MrrK/ze5yv86t8b/K6+4/yCtsf8bqKL/ + GqOQ/x2ggf8innL/I6Fo/yOiW/8wpVv/SrFh/1e6X/9jwlr/X89O/1XWRf9X0Ej/Sb06/z22MP9Eyzr/ + XdlR/3Paav+I04T/qtOr/5yomv9TTE//YmBh/21ubv+oqKj/6+vr/+Dg4P/Nzc3/vb29/8vLy//w8PAZ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHfkpKSv9zc3P/h4eH/7Kysv+VlZX/ + YWFh/2FhYP9lZWL/naid/46rj/9uoGz/TY5H/zV4K/8OJAb/BRYD/wswB/8ZVQz/GGQL/xdlD/8VYQ3/ + H2sS/yt3HP83gyf/Qo4y/0aTNv9EkTX/Ro83/0uOPP9Sk0H/XJpJ/2CaS/9nm1L/bqBd/3KlaP92qnr/ + jr6j/6nWyf+03c7/x+XV/9Xq4f/a7eP/1O3n/8Po6P+x5ej/l9/n/3HU4v9bzt3/ScnX/zPB0P8tu8v/ + L7nK/zW9zv81t8j/L7HC/x6otP8VoaT/FJ2W/xWYhf8Wk3L/GJNh/xmVVf8WklH/JppV/0muXP9iuVr/ + W7lM/1fCSf9Xzkn/S8w9/z/ALv8/uyv/TMs9/2PdWf9z1G7/mNaX/6/JrP96fXb/V1ZW/2JiYv+Dg4P/ + 09PT/+np6f/T09P/v7+//8rKyv/s7OwfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + RkZGf1RUVP99fX3/kpKS/7a2tv9xcXH/WVlZ/2JiYv+LjYf/mbKX/2uea/9NkEv/OH80/xRIDv8JDQP/ + CCkF/wpNCf8NXQb/EV8G/xlkC/8ebRb/Jncc/y9/If80hSP/OIgk/zqJKf9AjDH/S5I6/1KVPv9Tkz3/ + VpI+/1mSQf9kmU3/bJ9b/3WmaP98rHv/g7eV/6zXzP/A49X/1+zc/+Xv5f/p8uj/5fTt/9Tw8P+/6u7/ + nODl/3LU4/9m0+P/Vs/c/0DI2P89w9j/O7/S/ze+zv8xt8b/LbHB/ySqt/8epaz/GZ+e/xaZjf8Vk3n/ + GZBo/xqQWv8Yj1T/H4xO/zyWTv9cqFT/Yq9V/1yyUP9RwUX/S8w9/0fJNv9Dui3/OL0p/07aRv9p4mL/ + ht2B/6jZpP+crpj/WVtY/15dXv9qamr/sLCw/+zs7P/X19f/w8PD/8nJyf/m5uYrAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHf2JiYv+Hh4f/n5+f/6Ghof9cXFz/Xl5e/2tra/+cppn/ + faN5/1ibVf89iDn/JGAe/wYdA/8HHAL/DUMG/wtdB/8KXwj/FGcK/yBxDv8ecxT/JnsZ/y2BH/8xhCD/ + M4Qf/ziGJv9EizH/TJE4/1CSOf9SkDj/V5E8/1uSQf9mmU7/bJ5b/3embP+Ar4L/gbiW/67Zzv/J59z/ + 3+/h/+fx6P/r8+r/6/fw/+H18//P8PL/r+ju/3/a6P9p0+X/W9Dg/1PQ4/9TzOP/SsTW/z/Az/80u8j/ + LbTC/yeuvP8jqbP/HaOk/xadk/8VlYD/E49r/xWLW/8jkVb/OphX/1CaVv9Xm1D/XqJU/1umUv9NrEP/ + Sro//0rEPv9Gvzb/Mrkk/z7NM/9j6Fn/euVx/5DXiv+myqL/dXp0/19eX/9kZGT/ioqK/+Li4v/c3Nz/ + x8fH/8jIyP/g4OA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUlJf21tbf+Pj4// + p6en/4qKiv9XVlb/YWFh/3x8fP+Xp5P/ZpVi/0mVRP8xeyv/CzMH/wcQBP8EOwH/DFYC/w5lCf8SaRj/ + HHQY/yB8Dv8geRD/J30X/y2DHv8xhiL/NYgl/zyJKf9HizD/Sosx/0yLMf9RjTX/XJM//2OXSP9pm1P/ + cKFh/3updP+Asob/ib6g/7Tc0v/Q6t//4u/i/+ny6v/u9e3/7vfy/+r39f/e9fP/w+/z/5Tj8v9t1ur/ + W9Hi/1PP3f9Zzd//W8zf/0zH2P85v83/MrrH/yuzwf8nrrn/I6qt/xymnv8Zn4n/FJVz/xuSY/87nGL/ + V6Fk/2OkX/9goVj/VZpN/0+XR/9Pmkb/TaRE/0izP/9Bwzr/PMAx/ze7KP9W3Uf/depp/4TZfv+h1J3/ + maGY/15cXv9iYmL/bm5u/9DQ0P/k5OT/y8vL/8fHx//b29s+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAUFBQf3Jycv+QkJP/qKmn/3R2cv9UVlf/Y2Zm/4uSiv+AnX3/VZNL/zqLMv8cVRj/ + BB8C/w4wCf8FVgH/DWUE/xRvD/8Zdhv/F3sU/xh9DP8jghX/J4MZ/y6FH/8yhyP/Nogl/zqIJP9CiCj/ + SIss/06OMf9Ukjj/XZZB/2WaSv9qnlb/caRn/3utev+Bt43/hb+f/6rWyf/V7OL/5vHk/+zz7P/w9u// + 8fjy//L59f/r+PL/1PX3/5/o8/9s1+r/XNXn/1XR3f9g0t//adXo/1XO3v86xM//NL/K/zG5xf8utL7/ + KrC2/yGsp/8bo4v/Fpp1/x+Xaf9Tpm7/bq9s/2enX/9io1v/WZ9T/06XR/9PmEn/SphE/z+dO/82qDX/ + Q740/ze6I/8+xjH/a+hh/4Hjd/+a2JX/qcOm/2VqYv9gWl//X11g/7O1tP/q7Ov/zM3M/8nJyf/b29s+ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbf3R1df+RkZj/o6eh/2NlX/9VV1n/ + anJv/4ygif9olWb/RZI4/y1/Jv8INgr/Ay4D/wdNA/8IYgP/D2wL/xd4Ev8YfxH/FH8N/xZ+Df8ggBb/ + JYIZ/yyFHv8yiSP/NIgi/zqJIv9BiiX/SI0p/1CQL/9VlDf/W5hB/2SdTP9qoVr/cahs/3uwf/+CupL/ + hcKi/6fWx//X7OP/6fLn/+707f/x9/L/9Pn0//b69P/2+/T/3/n5/53l6/9l1uX/VdXk/1jV4P9p2eb/ + adfn/1PP3f88yNL/NsLM/za8yP82uMT/LrO6/x6rpv8bo4v/Gpx3/y2fcf9jr3j/dLFt/2usZf9jp1// + W6FU/1CbSv9ImEP/QpY+/z6VO/86kjn/OqUp/0PALv8wtib/XuFS/33rcP+U3Y3/qNaj/3mJdP9hVV7/ + WVZb/5Sclv/m6eb/zc3N/83Nzf/e3t48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X19ff3d3d/+Zm5//mZyX/1hYU/9ZW13/bXtx/4Gdfv9dklj/OYkw/xhsE/8COQT/BUMI/w9fDP8Pbw3/ + FXYS/xl9Ff8YgRT/FIAO/xd/Dv8ggRb/JIMX/ymFGv8xhx3/NYgf/zqKIf9Biyb/SI4t/1CSM/9Wljz/ + XJpG/2SeUf9po1//capw/3yxhP+DupL/hsOo/5TPw//G5tz/6PPm/+317P/w+PP/8fn0//b69f/6+/j/ + 7/v7/8n1+P9z3eb/WNbi/2HW4/9i2OX/V9bl/0jR4f85yNb/N8PQ/ze+yf82ucX/L7S8/yKurf8cp5f/ + JKJ+/02rev9ytXz/dLFw/2+tZ/9mqF//W6NX/1GdTP9ImEP/QZU9/zqSN/8zjzH/LYwm/zqmMf83syr/ + VdhB/33yav+P5Iz/qt+p/5Oljv9hWF7/U1FV/4CIgv/c3t3/z8/P/9DQ0P/g4OA3AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWVlf3t7e/+eoqb/jI2K/05MSP9hYmL/cYVz/3Kcbf9NjUP/ + LIAn/whZBv8GRwT/DlsN/xNyFv8VfRX/F4AW/xmCF/8YgxX/FoER/xmBEv8ggxb/JIQX/ymGGf8wiBz/ + Noof/zyMI/9Cjin/SZAv/1GUNv9Yl0D/XptJ/2WgVf9qpWP/cqt0/32zhv+Fu5T/hsOp/4zMwf+44dn/ + 5fTq/+v27f/w+PT/8fr2//b79v/7+/r/8/v8/8/19P+K5ej/ct7l/33h7f9z4O7/UdTf/0DP3P85ydj/ + OMXS/zi/y/82u8X/MLa9/yWwsf8krJ//OqyK/2Ozgf93tXn/dLFx/2+tZ/9lqF//XKRX/1OgT/9JmkX/ + QZU8/ziQNP8wjC3/NIo0/yV+I/8xoyb/S8kz/3z1Z/+I6Yj/puKm/6a+o/9iXmD/Tk5P/2xzbv/Y2dj/ + 09PT/9LS0v/h4eE0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2trf4CAgP+eo6b/ + f4B+/01IR/9oamf/co1x/2KZWf88iS7/IXof/wVWBf8LXgT/EXAQ/w19Ff8ShBX/FYMW/xeEF/8YhBb/ + GoQW/x2EF/8hhBj/JYUZ/yqHG/8wiR3/Nosg/zyNJP9Djyr/SpIx/1OVOP9amUH/YJ1M/2eiWP9spmX/ + c6x2/3+0if+Fu5f/hsKp/4nKvP+n3NT/2PLr/+f27//w+PP/8vr2//X79//6+/n/9fz7/9f39v+x8PP/ + nu3x/5rr8/+L5/T/Ztrl/0fS3v86y9n/OcfT/zjCzP83vcb/Mrm//yq0tv8tr6H/RK+J/2aze/95tXb/ + dLFv/2ytZv9kqV7/XKVX/1OgT/9LnEf/Qpc+/zqRN/8yjjD/Mos1/yiAKv8dhRn/Oasp/3XnY/+G6YT/ + oOKf/67Nq/9qamn/S0xN/11kYP/V1NX/2NfX/9XV1f/j4+MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcHBwf4ODg/+Xn6L/dnd2/1FJSv9wcW3/cJBu/1WVTP8xiCH/GXUa/wdhCP8XcQz/ + EnwP/wWAEP8OhBH/D4QR/xGEEv8WhRb/G4cY/x6IGv8hhhn/JYcb/yqJHP8wix7/Nowh/zyPJf9Dkiv/ + S5Qz/1OXOv9am0P/YJ9N/2ejWv9tqGj/dK54/3+1i/+FvJn/icSr/4jKu/+Z2NX/suPg/9/28P/y+fX/ + 8/v3//P89//5/Pf/9/37/+T7+v/N+Pf/tvLw/6jv8f+b6/L/e9/q/0/W3/88z9r/O8rV/zjFzv83wMf/ + MrzB/yu4uf80taf/TbWR/2y1fv94tHP/dbJv/2yvaP9jql//W6VX/1OiT/9Mnkj/RJpB/z2XO/82lDb/ + MJAu/y2OL/8aex3/I4Yc/2DHU/+S8I3/nuSd/7HVr/92eHX/SU1N/1FYVP/Py87/2tnZ/9fX1//k5OQu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0e4GBgf+boaT/bXJw/01KSv9tcGr/ + bpJo/0eRPv8thR//EnET/wptDv8TexH/DYEP/wmFEf8OhBL/D4UT/xGFFP8Whhj/G4ka/x6JG/8giBr/ + JIkc/ymLHf8vjB//NY4i/zyRJv9Dkyz/SpYz/1OZO/9ZnET/YKBP/2ilXP9tqWr/dK96/3+2jP+CvJr/ + hsKn/4zNv/+W2+D/nd7g/9Hx7P/y+fX/8/v3//L99//4/fb/+f76/+v8+f/b+fn/wfTy/6zx7/+p7vT/ + j+Xw/1ja3/890dr/PM7X/znIz/83w8j/Mr7C/yy6uv8wt6v/SbaV/2e0fv92s3L/dLJu/2uvZv9iql7/ + WqZW/1KjTv9Kn0f/RJxB/z+aPP83lzb/MJYt/yyTK/8ghib/Gncd/0GgPv+c85f/o+ie/7Tbsv97gnz/ + TU9O/1FTUP/DwsX/1tXW/9jY2Ojp6ekc+Pj4Afj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + eHh4N4KCgvukpqn/Zm5s/0JHR/9nbGT/a5Fj/zyONf8nfSD/Dm4M/wd1Df8IgBP/CoQV/xCKGf8Rhxj/ + E4gZ/xSIGf8XiBr/GYga/xyKG/8gix3/JI0d/ymOH/8vkCH/NZIj/zyTKP9Dli7/Spk1/1OcPf9Zn0b/ + YKJR/2inXf9trGv/dLF7/3+4jf+BvZr/hsSn/5PRxf+N2d//meDn/8Xt5//z+fX/9Pv4//L99//4/fb/ + /P75/+/9+P/i+vv/yPf5/63y8f+r7vP/nOnz/2Xf5P9C1dz/P9Da/z3L0v85xcr/M8HD/y29u/8subD/ + Qrab/2G0gP9zs3H/crNt/2mxZf9gq13/WKdW/1CkTP9JoUX/Q55A/z2cO/81mDX/L5Yv/y6YMf8kjir/ + IIQn/xt4Hv+G14P/sPCo/7fftf99iYH/TkxL/1NQTf/Fxsj/0tLT/9nZ2a/z8/MD+Pj4Bfj4+AIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAB4yMjMajo6b/aG9t/0RHRv9obGT/Z45g/zyQN/8bdhb/ + DXIO/wx8FP8OiBn/DokY/xGLGf8RiRj/EooZ/xSKGf8Xixn/GYsa/xyMG/8gjRz/JI4d/ymQHv8ukiD/ + NJQj/zyVKP9DmC3/Spo0/1KdPP9ZoEX/X6RQ/2aoXP9rrGr/cbF5/3y3i/+AvZn/hsOn/4jKu/+P2dr/ + kN7d/63n4//q+PT/9/r2//j8+f/4/fr/+f36//f++f/t/fn/2Pv4/7j08f+h7vD/juvz/2rg5f9G1d3/ + PdLb/znO0P80yMX/NcO//zXAuv8vvLP/Pbmh/1O0gv9osm7/b7Fm/2ivX/9hq1j/WqhR/0+jSP9HoEP/ + Qp9B/zucPP81mTf/Mpo0/y2XMP8nky3/JYws/w1sEP9MpUv/tvau/7vjuf+Cjob/R0VE/1FPS//Q0tT/ + 1tbX/97e3qrs7OwB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjWSin6L/ + cXNy/0NGRv9kaWH/YYpc/zaNM/8Pcg//DnkT/xCFGv8Rjh3/Eo8b/xOOGv8SjBr/E4wa/xWNG/8Xjhv/ + Go4c/x2PHf8hkB7/JZEf/ymSIP8vlCL/NZYl/zyYKv9Dmi//Spw1/1OfPP9ZokX/X6ZP/2WpW/9prGj/ + cLF4/3m3iP9+vZb/g8Kl/4XItf+R2Nb/kd7a/6bm5P/g9PL/9vn1//j7+f/5/Pr/+P36//n++f/z/fj/ + 4/z3/8T29P+g7/D/f+fq/2ff4P9T2N//SdPb/0LP0f88ysb/PcXB/z/CvP84v7f/Qb2m/1K2hv9ermX/ + Zqxa/2CpUv9Ypkr/U6RG/0uhQf9GoEH/QqBA/z2ePf82mzj/Mps0/zCbMv8kkiv/JZEt/xyFIv8Xehf/ + nuKX/8Dovv98h4D/QUA//1tZVv/S09X/19fY++Tk5HL29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIqJiw6knqLxgYGA/0NFRP9bYlr/XIZY/ymEKf8LdQ//EYQa/w+LHf8Pjxv/ + E5Ic/xSRGv8SkBv/E5Ac/xWRHP8Xkh3/GpIe/x2THv8glB//JJUg/ymWIf8umCP/NJkm/zubKv9DnDD/ + Sp42/1KgPf9Yo0X/XqdO/2SqWf9prWf/b7B2/3m2hf98vZT/gsKi/4TGsf+N1M7/lN7d/6Xm5f/Z9PP/ + 7/j2//T7+P/4/Pn/+v75//j++f/3/fn/7Pz6/8/3+P+n8PH/hOjq/2zi4v9k3OH/WNXZ/07R0v9Kzc3/ + TMnI/1DGwv9HxLn/S8Go/1q6if9WrFv/YatR/16pSv9VpUL/UaQ//0qgPP9Enzv/QJ87/z2fO/82nDf/ + MZky/y6aMf8qmzL/K5s0/yGQKf8OdxH/bLJl/8Tswv95hH3/NzY1/2VjYP/X2Nn/2dna8efn5y739/cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtpKqaj4+P/0RFRP9UW1L/ + WIVW/x16H/8NfBT/F44i/w2NHf8Iihf/E5Ib/xWTGv8Tkhv/FJIc/xaTHP8Ykx3/GpQd/x2UHv8hlR// + JZcg/ymXIf8umSP/NJsm/zucKv9Cni//SZ81/1GhPP9XpEP/XqdM/2SrVv9orWT/brBz/3e2gv97vpH/ + gsKg/4nHsf+Iz8X/mt/f/6bl5v/M8PD/5ff2//H7+f/4/fj/+v34//n9+v/7/Pr/8fv6/9X3+P+u8PH/ + j+vs/3nl5f9w3+H/Z9na/1nV1P9W0dD/XM/L/2HLwv9eyLb/YMOj/2O6gf9WqlL/YKpK/1ynQv9SpDr/ + SqE1/0afNf9BnjX/Pp83/zmdNf8ynDL/L5gu/zCdMf8voTb/K500/yCUKf8Zix7/Qog7/7zkuv9ueXL/ + NDMy/3l3c//d3+H/19fYyuvr6woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACzrK44m5qa+EdDSP9RVVH/T31Q/xV4Gf8OiBr/FZIj/w6PHf8KjRn/EZMc/xSUHf8TlBz/ + FJQc/xaVHf8YlR7/GpYe/x2XH/8hmCD/JZgh/ymaIv8umyT/NJwm/zqeKv9DoC//SKE1/0+iO/9WpEH/ + XadJ/2KqU/9nrmH/bLJv/3W2fv95vI3/gsKd/4rGrv+JzcD/mdzb/6nl6f+26ef/1/Xz/+z69v/3/PX/ + +v33//j8+f/5/Pr/8vv7/9f3+P+x7+3/mOrp/4vn6P+K5eb/f9/f/23Z1v9s1dD/ddHG/3/OvP93yaX/ + csOQ/2m3cP9bq0z/XalF/1WnPP9OpDT/R6Ev/0KgMP9AnzP/Pp80/zedMP8wmi3/Lpot/zOiNP8toTT/ + KZ00/yecM/8ili3/Jnwl/53MnP9iaWL/NzAz/5qXlf/e39/42dnacfDw8AYAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrq6cEq6qryFpQW/9NSU3/QG9C/xWEHP8OlBz/ + D5Qc/xCVHf8RlR7/EpUf/xOWH/8TmB7/FJge/xaYH/8YmR//Gpkg/x2aIf8gmyL/JJwi/yidJP8tniX/ + M58n/zihKv8/oi7/RqM0/02kOv9UpUD/WqhI/2CqUf9krV3/arJr/3O2e/93vIn/gMCZ/4rFq/+Gyrr/ + idPK/6Ti4/+p5OD/w+3q/+n59v/2+/L/+fz2//f8+f/2/Pv/7/v6/9j3+P+68PH/pOvr/5bm5f+Y4+L/ + luLi/4Xb2P9808b/Zr+Z/267if9ounX/X7Ri/2CvVP9frEn/WatB/0+oOv9KpjL/RaQu/z6hLf86oC7/ + PKAy/zmfMf8ynS7/MZ4w/zGhNP8xozj/M6M+/yqdOf8jlzT/G4gl/2WiZv9WVlD/OSwz/768u//Y2dfn + 39/eI/j4+AX4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + vry/a3tyfP88PT3/NWs6/xWJHf8PlR3/D5Ud/xCWHv8Rlh7/Epcf/xOYIP8SmR//E5kf/xWZIP8XmiD/ + GZoh/xybIv8fmyL/Ipwj/yadJP8rnib/MKAn/zahK/88oi7/Q6Qz/0qmOP9QqD//VqlH/12sUP9jrlv/ + a7Jn/3S2df92uoP/fL+S/4TEo/+FyLL/iM/B/5PX0v+a3d3/tOfp/9319P/1+/X/+Pz1//X7+P/d9PH/ + 2fT1/83x9f/B7vX/sent/6fm5/+f497/m+DZ/5XazP+DzKv/Zrl+/2e2cf9mtGP/ZLFY/1+uT/9brEb/ + VqpA/06oOf9IpjP/Q6Qv/z2hLP84nyz/N58t/zegL/8zny//MqEz/zOjN/80pTv/NaVA/y+hPv8qnTr/ + IpEt/zp8Pf84PTT/S0JH/97c3P/Y2daW4+TjCPj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAubi9HZ+aovA2PDn/K2gx/wyIFf8Plx7/EJge/xGZH/8SmR// + E5og/xSaIf8TmyH/FJsh/xWbIf8XnCL/Gpwj/xydI/8fnST/Ip4l/yafJv8qoCf/L6Ip/zWjLP86pC7/ + QKYz/0ioN/9Nqj7/VKxH/1quT/9gsVn/Z7Rk/3C4cf9zu37/eL6M/4DDnP+Ex6z/iMy7/4/TzP+T2Nj/ + p+Hh/8bp5P/v+fX/9vv3//L69//E6+L/suTe/6ng2v+y5eb/mdrR/5fbz/+P18T/fMyr/3XFmf9xv4f/ + cbt7/3C4cP9qtGD/ZLFW/16vTv9ZrUb/U6s//0ypOP9HpzP/QaUv/zyjLf84oi//NqIw/zakMv81ozT/ + NqU4/zimPf85qUH/O6pH/zenRf80pEL/Jp0y/y12M/8pMyf/gHt+/+fo59Pa3dsIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6A8PByLNIU0z/ + HGAk/wyQGP8Qmh7/EZof/xGbH/8SnCD/FJwg/xScIf8TniL/E54i/xWeI/8WniP/GJ8k/xufJf8eoCX/ + IaEm/yWiJ/8poyj/LaMq/zOlLf84pi//Pqcz/0WpOP9Lqz7/Ua1G/1ewTv9dslf/ZLVj/2y5bv9wvHv/ + db+I/33Dl/+Cx6b/h8u2/4/Rxv+U19L/ot3a/7jl3f/f8/D/7/n1//L69v/M8Oz/tOfk/6nh2/+g3NP/ + mdnM/43Vv/+L0LL/g8qk/3vElf92wIX/crt3/224bP9otV//YrNW/1ywTf9Xr0b/Uaw+/0qrOf9FqTT/ + P6Yw/zmkLf83pDD/N6Uy/zenNf82pzj/Oag9/z2pQv8/rEf/Q69O/0CtTv8+q0z/K6c5/y2ANP8uPy// + ure58ejo6TsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAMvK0F54h3//GWIj/xCbH/8QnB7/EZwf/xGdH/8SnSD/E54h/xSeIv8TnyT/ + E58k/xWfJf8XnyX/GaAm/xugJv8eoSf/IaIo/ySjKf8opCr/LaUr/zCmLf81pzD/O6g0/0KpOP9IrD3/ + T61E/1WwTP9as1X/YLVe/2m5af9svXb/c8CE/3vEkv9/x6H/hMqv/4zQv/+V1sv/odzV/7Lj3v/J7Of/ + 6fj0//H69f/N8e3/tern/6nk3v+f3dP/l9nI/4vTuf+Gzqv/gMmd/3nEj/9yv4D/brx0/2i5af9ktl3/ + YbRU/1uxTf9Vr0X/T60+/0mrOf9DqjT/PaYw/zekLf82pTH/N6c0/zeqN/83qzr/O6pA/0CrR/9Dr0z/ + SLJT/0axU/9Er1L/La48/y2FN/9ccF//zc7NfO3t7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xQ2qta/0KHoz/wybHP8ToSL/ + EqEi/xKhIv8ToSL/E6Ai/xShI/8ToCX/FKEl/xWhJf8XoSb/GaIm/xuiJv8doif/IKMn/yOkKP8npSn/ + K6Yq/zCnLP81qC//Oaky/0CrNv9GrDv/Ta5C/1OxSf9ZtFL/X7db/2a6Zf9qvXH/cMB+/3fEi/97x5n/ + gMqn/4nOt/+S1MH/m9rO/6bg2v+z5d7/2fTu/+358P/Q8uz/terl/6fj2P+c3c3/k9nB/4fTsv+BzqX/ + e8mY/3PEif9uv3v/a7xu/2S5Y/9htln/XrNR/1ixSv9TsEL/Ta48/0isN/9BqjP/Oqgv/zWnLf81pzD/ + N6k1/zmsO/87rT//QK1E/0OsR/9Is1L/TrZb/063Xv9Rt17/Na5E/yyPOP+RrpXw4ubkGQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACyt7KpNI4+/weaGf8UpCb/FKQm/xOjJf8SoyX/EqEj/xKhI/8UoiT/FaMk/xajJP8XoyX/ + GaMl/xqjJf8doyX/H6Qm/yKlJ/8mpin/Kqcr/y6oLf8zqS//N6sy/z2sNv9Erjv/Sq9A/1CxR/9WtFD/ + W7dZ/2O7ZP9ovm7/bcF5/3PEhv93yJP/fMuh/4TOsP+N07n/lNfF/5vd1P+o49v/wevf/+b37P/Q8ej/ + uOri/6jj0/+c3sf/ktq7/4XWrf+A0J//esqS/3PFg/9vwHX/bbxp/2e4Xv9htlX/XLRO/1WyRv9QsD// + S686/0WtNf8/rDH/OKst/zOrLf80rDD/Oaw3/z2tP/9BrUT/R7BH/0euSP9PtVn/VLZl/1u9bf9lw3H/ + RKtQ/yuYN/+axZ7U9PHzCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcq55SMow8/QibGf8RoSP/EaEj/xGhI/8RoSP/ + EqEj/xKiJP8Toyb/FKMm/xWkJv8WpCb/GKQn/xmkJ/8bpCf/HaUo/yGmKf8lpyv/KKgt/yypLv8xqjD/ + Nqsz/zyuNv9Crzr/SLA//02yRf9RtEz/VrhT/127XP9jvmf/asJz/3HGf/92yo3/fM2c/4LQp/+K07P/ + kda8/5jbx/+g4NH/rubZ/8Lu5f+67OX/quXc/6Hgzf+a3cH/lNq2/4rXq/+F0p7/gM6R/3bJgv9uw3P/ + aL5n/2G5XP9dtlL/WbRL/1KyRP9NsD7/SK85/0OuNv89rDP/N6sw/zOrLv81rDT/Oq09/z+vQ/9Er0j/ + S7VO/0u0Uf9StVz/WLZm/2bDdf9uynr/Rq9T/zCcPf+Qv5TB8u/xAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXrJoR + L5E85QSYF/8QoCL/EaEj/xKiJP8ToyX/FaQm/xWkJv8UpSj/FKUo/xWmKP8Wpij/GKYp/xmmKP8bpin/ + Hacp/yCoKv8jqSz/KKot/yurL/8vrDD/NK0y/zquNP9Arzf/RbE8/0qzQv9OtUj/UrdO/1m6Vv9fvWH/ + ZcFt/27Gef9zyof/es6V/37Rn/+F06v/itWz/5HYvP+V3MP/m+DM/53j0f+X4tD/leDM/5LdwP+P2rT/ + jdiq/4fWof+F05f/gtCN/3jLgf9uxHL/Zr9l/126W/9atlH/VrRJ/1CyQ/9JsD3/Ra85/0CuN/88rjT/ + Nq0y/zatNP87rzz/QLFF/0SzS/9JtlH/T7xX/1K5Wv9at2T/ZLpu/3nOhP970ob/S7FY/zaiRP+XxZy9 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALps8tAKWFf8SoiT/E6Ml/xWlJ/8Xpyn/Gagq/xmpK/8UqCn/ + Fagp/xWoKf8WqSn/GKkq/xmoKv8aqCr/Hakr/x+pLP8iqi3/Jqsu/ymrL/8trDD/Ma0y/zavNP88sDf/ + QLE7/0a0P/9KtkX/T7hM/1e9Vf9fwV//aMdr/3DKeP91zIP/e86P/37Rl/+A06H/gdSo/4fXsP+L2rf/ + kN3A/4/ewv+B3Lv/hN27/4fbs/+I2Kj/ideg/4TUl/+A0o//e86F/3HJef9ow2v/Yb9g/1m6V/9Wt07/ + UrVI/0y0Qv9Gsj7/QrI6/z6xN/87sDX/Oa83/z2xPv9DtEf/R7ZN/0u4Uv9Ou1f/Ub9d/1e9Yv9lvWz/ + dcF7/47blv+F1o//TLFb/zumSv+j06unAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHpgsegaXFv8VpSf/ + FqYo/xmpK/8brC3/Hq4v/x+vMP8TqCn/FKkq/xWpK/8Wqiv/F6or/xiqLP8ZqSv/G6os/x2qLP8gqy7/ + I6su/yasL/8qrTH/Lq4z/zOwNP84sTb/PLI5/0K0Pf9JuEP/Ur1M/13EVv9jyWD/a81r/3TPdv94z4D/ + etCH/3vUjP951pT/eteb/3/YpP+C2ar/htyy/4jdtv983bP/ft2y/3/aqP+B2J7/gtaV/3/Tjf960YX/ + dM58/23Jcv9mxGb/X8Bc/1e9U/9Tu0z/TrlH/0i5Qf9Etz3/QLU6/zyyN/86sDj/PbE+/0O0R/9It07/ + S7lT/027V/9PvVv/Tr9f/1jAZ/9wxHb/g8yH/53lo/+L15X/TK9b/z2oTf+v4biYAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF5EkPwqdHP8UqSf/GK4t/xurMf8mrDn/KbI7/ySzNv8aqzD/Gasw/xirLv8Xqyz/ + Fqwr/xerK/8Yqyv/Gqwr/xysLP8grC3/Iqwu/yWtL/8prTD/La4x/zCvMv80sDP/ObI2/z+0Ov9HuUL/ + UcFL/1vIVP9ezVr/Yc9f/2rQa/9y0Xb/c9J7/3HVff9v14H/cNiJ/3bakf9425j/fdyg/3/cpv993ar/ + e92o/3jZmv9315D/d9aK/3XUhP900n3/b9B1/2nNbP9ky2L/X8ha/1jEUv9QwUn/Sr9E/0W+QP9Buzz/ + P7c6/zuzOv87sjz/PrRC/0G1SP9EuE3/SbpT/068Wf9Svl7/U75j/13EbP92yoD/lM+Y/67ls/+F1pD/ + RLFW/0SmVf/B7shqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5EuGA2gIO0OqiP/ErMs/xysNv85r1D/ + ObNN/y+5Qf8rsUH/J7E9/yKxN/8crzL/GbAu/xevK/8WrSr/GK0q/xuuK/8drSz/IK0t/yOtLf8nri// + Kqww/y2oMv8vpTP/M6Y2/zutO/9DuEH/TcNI/1XIT/9TxlL/UcFS/1O/WP9Zv2L/XsFo/17Ca/9gxXD/ + Zst4/23Tgf9v1Yf/cNCN/27LkP9nyZH/csya/2nMiv9r0IL/bNR//2vVev9r1HX/Z9Bt/1/JZP9Ywlz/ + U75V/1G9T/9KvUf/Rb1B/0G9Pv89tzz/Oa08/zanO/80pjz/NKc+/zWsQf89s0f/RblR/1G9W/9awWP/ + Yb5r/2jJdP+A04v/qdKv/7zjw/9204T/OLFN/16qa/jg/OYpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKlPBQ2QG8cOpiP/C64k/xuyNf9Hwl3/Rr1Y/0DCUv85u03/NbpJ/y65Q/8otzz/I7Y3/x+zNP8asS7/ + HLAv/x2wLv8dry7/IK8v/yOvMP8lqTH/JZo0/yKGNv8gdzj/I3Y6/ymDPv8zm0D/QLRD/0m/SP9Er0n/ + OZFJ/zOASv80fU7/OH5R/zl/VP8+h1n/S55i/1y8bv9ixXb/Wa50/0uSb/8/g2z/Rot1/0Wdbv9bvXP/ + Z89z/2bTcP9gy2n/VbZg/0WcV/85h1D/NH5M/zSDSf83lUT/O6g//zu0Pf82pz7/LIw//yV4QP8jc0H/ + JHtA/yiRP/81qkT/Q7pS/1LAXf9dxGf/Y8Nu/2/Ke/+M1pf/suC5/7ruw/9uzXz/O6ZL/4PDjebb++IO + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOBIJAQoSP/C7Ek/xO1Lv9MzWT/XtBw/1TKZv9Hw1r/ + QsFW/zu/UP80u0n/L7pD/ym4Pv8ktzf/I7Y2/yK1NP8itDT/IrQy/yOxMf8gnDP/GHU//wxydv8Hh6j/ + B5C1/wqJpf8Wcmv/KH9C/zafQv8vikr/EYmc/wqQuP8KkLj/CpC5/wuRuf8Mkrv/H4eP/0aaXv9Ssmb/ + OZJ3/xWGpP8Mkb7/DY65/x2Gkf9KpmT/Xcln/1rKZP9Kqlr/MHdV/xh0gf8Mia3/CpC5/wuJrv8VdHr/ + JnVC/y6XPP8qkD3/E4B+/wiMsP8Hj7f/DIKc/x2EZv81pkj/R75W/1bFYv9hyWz/aMt1/37Pif+h26n/ + ve3E/67xuP9gxG//TqZb/6rdsbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGPP1cUoCf/ + Dbcm/wq3Jv9Cy1r/ct+E/2jQeP9XzWr/Uspm/0vHX/9DxFb/O8BQ/za/TP8xwUT/Lr9B/yq9Pv8mvDn/ + JLs2/yO4NP8YjDH/C4CF/wKs4v8JbX3/EVtY/w1pev8DrOL/DYWa/yR0QP8jbkD/DH+Z/wC+/f8LiK3/ + FlVb/xhZXP8SbYT/EY+t/zmMUv9JsVr/N4VV/xdqfv8Avv3/BqLV/x5eTf9EqVr/Vchb/0u6V/8ve1D/ + C5W8/wC9+/8Dq+H/C4Wo/wuDpf8Epdn/C4yn/yF1Pv8kiDr/Flc+/wSezP8Avv3/EWl8/yZ6SP87sk// + TMRb/1vLaP9mz3L/cNR9/5DZmv+3477/v/TH/5Hmn/9TvWP/drp+/8fqym8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG+8eR4bpS3/C7cl/wW7I/8xwUv/euKL/3vZif9q233/Zdh3/13Tb/9Tzmb/ + S8te/0XJWf88yFD/OMhM/zHHRf8qxD//JsM6/yC+M/8YjTT/EHyA/wlwfv8UZDv/H3dA/xZRQP8JfZv/ + Abby/xRhWf8cYD7/C32X/wC+/f8LgaD/IF1C/yh0Q/8hYUr/G4iH/zuZTP9Iu1H/OZRP/xhmcf8Avv3/ + B5vK/yNpSf9EtFH/TshR/z+pTv8cbWb/Abn2/wK07/8VT07/H2ZB/yJpQ/8WT0v/BZ7O/xRrWv8ghTj/ + FmI6/wSaxv8Avv3/E2h2/y+NTf9Dv1X/T8pg/1/QbP9q1Hb/dt2E/6Djqv/I587/vPPF/3PUgv9JuFr/ + m9Of6dfw1xYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpji5BK8X/wzEJ/8kuDz/ + atx8/4zkmf994oz/eN+O/2zbgv9k2nD/YNdv/1XNaf9IzV3/Q85X/zzMUP8zykj/LclB/ybCOv8npj// + HX9W/xNpUP8YZz//G2NC/xJOSv8Gkrv/AL79/w9obv8ZWjz/CnyW/wC+/f8KgKD/G1c//yNqQP8fd13/ + L4RD/0CxRv9Hw0r/OZtK/xhnbP8Avv3/B5rH/yZwRv9CuUj/SMdI/zadRv8Va27/AL37/wadzP8dY0D/ + LqQ9/zCqPf8gbz//CYWl/wxze/8afjf/E2g4/wSaxv8Avv3/EmV2/yp5T/8+qlf/UL5k/2XPdP9y1X7/ + hOCQ/63mtf/S7tf/re23/2DKb/9PuF//pt+shAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA8pUo8C6sX9grBG/8aui3/P8lS/5Dwn/+T3p7/i96g/4Lhl/933oT/ddt+/2fQdf9d1XD/ + V9Nq/03RYv9E0Fj/Ps1R/zrJTf8vsEb/IH9D/xFbVf8Ke5X/BprH/wKy6v8Avv3/Abbx/xJnW/8ZYjv/ + Cn2W/wC+/f8IiKv/EVJW/xFdZv8NkKr/LIc//z+7Qf9DxUT/NJtF/xZnav8Avv3/B5rG/yRwQf88uEH/ + QcVC/y+ZQv8Sa3D/AL79/waVwP8ecj3/L7Q5/y68N/8egTr/CH+W/wl4hf8VeTb/EGc3/wOaxv8Avv3/ + EWV7/xhbYf8mcGH/QIhh/2Kzdv9+0Yr/nOGl/7/qxf/H8s3/htiQ/1nBZv91w3/wxPLKKQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4y4YCKKY2rACzCf8QxiL/JLQ3/2jmfv+v6L// + n+ag/5jloP+R36r/gNyN/3fief9u3YD/aNt5/1/Ycv9V1Wj/UNVh/0jPW/85q1H/HXJe/wOt5P8Avv3/ + AL79/wGy7P8EnMn/DW95/x13O/8bcjn/CX2V/wC+/f8Dp9n/Bo+1/waVv/8LjKn/KIM7/zm4O/89wTz/ + MZk//xVnaP8Avv3/BpnG/yJvPf84tT3/OsA9/yuUPv8Qam//AL79/waQtf8ddjr/LLY2/yu9NP8chDf/ + CICV/wl4hf8TeDX/EGY4/wOaxv8Avv3/DniY/wmWxP8Dsuv/E4qt/0N7a/99xI7/rOWy/8b0y/+k563/ + aMh0/1SvYP+n266o4P/lBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKNKLg6uGPQHxBT/G7Yu/ynHPv+s67T/tPG6/6fdsP+o5bb/memj/4vokv+D4ZH/fN+L/3Pcg/9o23n/ + Y9lz/1nSav8/nlv/FYCS/wC+/f8HmMT/E1pj/xdRRf8VUkL/GWhB/yCPO/8aejj/CH6V/wC+/f8GgJ7/ + DkU7/xBNPf8Kg43/HHo3/ySbNP8opzT/Iow3/w9lZP8Avv3/BJnF/xhoOf8moDX/JqM4/x1/Ov8MZm3/ + AL79/wSPtP8Wdjb/IbUw/yG8L/8VgzT/BoCU/wZ3hP8PeDP/DmY4/wOaxv8Avv3/E2N4/xxGTv8Sepz/ + AL38/x9/oP90rI3/tOW9/7fvvv971ob/W75o/3/DiPLh9ucUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcsV5AjOuO5sEpxD/Ebok/w/AI/9gzmL/rfjA/7zsyv+26rP/ + ruyx/6Dnsf+W46D/kOOc/4fgk/983or/ddyD/2nUef9Ko2X/G32Q/wC+/f8QaH7/GlJI/x5oSf8UYVr/ + DIqW/xmBPf8Scjn/BX2V/wC+/f8Df53/B1A3/wheNf8HWUD/B1o4/wZ0WP8Hdkb/B2My/wRcYP8Avv3/ + AZjE/wVQNP8HbC//BYVs/wVUNf8DYGr/AL79/wKPtP8IbDH/DK0n/wy0Jv8Jei//A32T/wN0hP8IbTP/ + CV43/wOaxv8Avv3/E2N5/x1GUP8YaYT/AL79/xKRwf9vnIv/ruO4/5fkof9WvmT/bcF4+Lzpwnfw+/MA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHzCfCAtpzb3 + BbQS/xTFJv8Wuh//bt58/8P7zv/H7sr/uea+/7fuvv+p6rH/pOmt/5rnpf+P5Jr/iOKU/33eiv9iu3f/ + Nnps/weq3/8ImMb/GFJc/xhPUv8MfJz/CZO4/xtuQf8UYD3/B32Y/wC+/f8EgqL/B0M6/wdFOf8Dg6H/ + BFpi/wNxhf8EZHH/BUA3/wRaYv8Avv3/AZjE/wQ/N/8EQjj/ApG4/wRBOP8DZHH/AL79/wGYwv8GWzT/ + C5wp/wukKP8HZzL/An2X/wJ2jf8GUTb/CEo5/wOcyP8Avv3/FGR7/x1NW/8MlsT/AL79/x2Nt/95o5L/ + mNqk/2/RfP9SvGD/ldSeu+P86AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABnvmWMGawi/wy4If8JvBn/IL4g/43nl//b9Oj/0+3W/8T0x/+68MX/ + t/C7/63rq/+h6KP/muik/4/lnP9+1Ir/YKt5/zl4bv8Xiqv/Cp/P/wig0v8LmsX/GYSN/yh7Sv8Xe2z/ + CJG2/wSfzv8En87/A5/N/wKfzf8CoMz/BWFl/wRvfP8Cn8z/Ap7M/wGey/8Bnsv/AJ7L/wGezP8Bnsz/ + ApW+/wNXW/8ChKP/AZ7M/wKXv/8Ee2//CZEr/wmXKP8FfWD/ApO2/wKPsf8GWlT/B298/wWYxf8Gn9D/ + CKDR/wmg0/8Mn9P/IIuz/1SDgf+AvpP/d82C/1e8Y/92yYHpxPbMOAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC73b0bb8V33g+iGP8OtxP/ + Brsb/x+2Mf+n56D/6fzo/9bv4f/O7tP/y/LM/73su/+37rj/r+qz/6Dip/+Z4aL/itKW/3G2hf9WlHP/ + SIBp/z96Yv9AhGD/RZlg/0KlWv8zkVD/J3hK/yBtRf8dbEP/GWw//xVsO/8QdDb/D38y/w96Mv8NbjL/ + Cmgy/whnMP8FZS7/A2Us/wZmMP8IZzD/CGsw/whvLv8IbC//CGgv/wltL/8Jgij/CJ0h/wihIf8Iiij/ + CHMu/whwMP8QdzX/GnU+/yVvS/8ublT/NnRa/z12YP9QfnD/apeE/3Oyhf9nyXf/XsFp/3vCgPS04LpT + 5/vsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAsOy2PV29ZOIIsA7/DKcr/wqxGP8isx3/meGd/+b15//r8eX/3/jk/9H32//B7sn/ + wevC/7ztvf+s6rL/pOes/5ffof+H05T/fcuM/3THg/9wyH3/as14/2HMbv9TwmT/TLtd/0G1VP88slD/ + NrFJ/y2vQf8lsTn/IbQ2/xqtMP8XqS7/FKYs/w+lJ/8KpCP/BqMg/wmjI/8JpCL/CKUg/wilHv8HpB7/ + CKQe/w2lI/8LqB//C64e/wyxH/8PrSP/EKon/xKnK/8dqjT/LqxD/0OyVv9St2X/YLtx/2u+ef9zyYH/ + eNKH/2/Kev9hvm3/dL177KrerVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzjtSZDrUjODZkJ/waxF/8BqBH/ + H60g/4Tbiv/c9eb/7Pro/+v13//i9t7/0vXe/8Tv0f/B7cT/uuu9/6/otP+k5av/nOOk/5XgnP+N3JT/ + hdqN/3rWg/9u0nj/aNBy/1zKZ/9Vx2D/TMZY/0LCT/83wEX/Mr1B/yi6Of8kuDX/HrYw/xi2K/8StCT/ + DbMh/wqzHf8Ksxz/CLIZ/wexFv8FsBT/BrEV/w2yHP8OsRv/D7Ac/xKyH/8Ytib/HLcp/yG1Mf8uuj3/ + QsFP/1jIY/9mznH/dc99/3vRgf9y2nz/ZtVz/16+af9zwX7aks+YOQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACGvH8YOpw4pgaNCvwLpRf/AqUI/wutD/9gwGX/zfHO//r5+P/19PX/2Pvd/8320f/W7tb/ + zezP/8Lpxf+357v/sOS1/6ngrv+i3Kb/m9uf/5DWlP+E0on/fdGE/3LLef9qx3L/YMVq/1TAYP9JvlT/ + QrpP/zu6SP84uET/MLY+/yi0Nv8isjD/HLAr/xKvIv8RriD/Dqwc/wyqGf8JqBT/CqkU/wysGP8Oqhr/ + Eakc/xerIv8fsCn/JrEw/zS0QP9Bu0z/UsJc/2PIa/9ty3b/dsx9/3rQgf9ty3X/W7dl/Wi0cbuQzZkg + t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcK56CDiXM3ALjhT0B5wV/wqnCf8Onwv/ + RKxN/6bftP/p/PD/7Pfm/+r04f/o9Of/3/Pf/9Tv1v/K7Mz/wunG/7zlv/+14Lf/rt+x/6Lapf+X15v/ + kNWV/4fRjf+Azob/dMp9/2fFcf9bwGb/Vb5g/068VP9JuU//QrZI/zm0QP8ysDn/LK80/x2sKv8aqib/ + F6gj/xSlHv8Soxr/D6MY/wqnFv8NpBj/EqQb/xymJP8kqyv/Lq82/0O3TP9Qvln/XsNm/2vGcf9xxXb/ + ccl3/2vHcv9ksWn3baxziIjAjw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjmzgzGoQbwh2AGf0MnRD/ApcE/xegGf95x3n/0ejQ//n3+P/4/Pj/8Pfw/+bz5//c9N// + 0/TW/8zxzv/F7MX/vOe9/7Titf+s3q3/pdil/5janP+Q2ZX/hdOM/3rOgf9vyHb/acVx/1+9Y/9bu13/ + VLhX/0u0T/9BsEX/Oq0//yusNP8oqi//I6Yq/x+jJv8anx//Fp4b/w6lFv8QoRf/F6Ac/yGkKP8sqDH/ + O65A/1S4Wv9dvWH/ZcFq/2zDcP9twXL/ZLtr/lWqXdJYnV5AiLmMAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATIVKDyd3JXQHgAbpAosD/weaC/8Igwn/ + O5w5/5/Snf/j8+P/+Pv3//T08v/w9u7/6/rr/9/33v/V8tH/zOvI/8nrxv/D58D/tdqy/6vbq/+l2qf/ + nNOe/5LMlP+Kxoz/hcSJ/2+8df9nuW3/YLZl/1i0XP9TtFf/T7RT/z2pQf85qDz/NKY2/y+kL/8ooin/ + IqAk/xeeHv8anSH/IJom/ymcMP89qUT/ULJU/2K2Yv9kuGX/YbVk/2i6bP9kuGjuWqhgh2edbhYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAcgRwoCG0IoAaCCfgHkAv/BIUF/xSAFf9Dl0P/mdGX/97w2//3+vT//fT4//nu9v/z7PD/ + 6ezn/9/w4P/R79P/wOfE/8TgxP/D3cT/uNi5/6vRrf+dyp//lsaZ/4fMi/+AyYP/dMN3/2i9av9dtl7/ + VrNY/1exW/9OrFL/Q6dG/zijOf8vojL/K6Eu/x+SKP8gkCr/K5c0/zqjRf9CqE//SKlR/1OtVv9gsmL/ + Zaxo/FmZXLFlpGcxZ6xrAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5FCAQpqCy4DcAOqBn0G9AaEBf8Hgwb/ + EXoQ/zOCMf+Atn7/v+S9/+f55//3+/j/8fXy/+nv6v/i7eT/3+vh/8vkzf/C4sT/uuG+/7DgtP+k26n/ + mteh/57Ln/+dyZv/lMeT/4nBh/99unr/dbZy/2iyav9js2b/WK9b/0OkRv8pkiv/H4oh/zCSL/81lTT/ + PJs+/0ejSf9RrFX/WbBc/1mqW/hWnle0VZFVPmqXaQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQZxAECV8JMQZqBpUHcAXoBnAF/gNyBP8Hcwj/HH8d/06YT/98uH7/qtmr/9Xx1f/v+O3/ + 9fbz/+rv5v/l7uH/4e7e/9jp1f/J38n/wNjA/7nUtv+xz63/p8mh/5vElv+Uwo3/kMKJ/3bCdv9brFz/ + PpM+/yyGK/8piCj/Lo4r/zWRLP8/lzf/TZ5G/1agTv9QlknsSY9FpFKSUztQjlEGAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZxwbA1YEaANkAsEFdAb7 + B3YG/wVqBP8HaQf/GnMZ/zN+MP9WkVD/dahu/5/Dmv+v0Kv/vtu5/8jjw//M48b/y+HF/7Tgsf+p2qb/ + mc+V/4C9fP9nqWL/U5lO/yJ+If8fehz/IHsc/yZ/If8vhij/NIwu/zSNM/9AkD/8Q4hBzUaBQXVVikwg + Wo9TAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUgCF8GagZlAq4EaADiB2sC/AJoAP8AZAD/BGgD/wpmCf8MaQz/ + EXER/xh1Gf8edR7/H3Me/yJ4I/8fdR//F3EX/xJvEP8QcA3/D3MN/xF7Dv8WexH/HHwW/yN8HP4sfSHl + M4Mrtit/M3Ukcy0mLnQ2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJAAIATwAS + CF0INgJcAWMBWwCbAFsAvgFgAd4BXwHrAV0B8gFcAfgBXwH8AmIC/gNlAv8DZAH8AmMB+QVlAvMMagbs + D20K4QhjA8MQaQmfHXMWaiR3Hz0YZxETDF0GBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVeFAcRWxAYClcJJgVVBTICVQI6 + A1cEPwZYAz8HVwM7ClkGMxBcCygZYhUaHmcaCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////// + ////////////////////////////////+AAAP///////////wAAAB//////////+AAAAAH/////////w + AAAAAB/////////gAAAAAAf///////+AAAAAAAH///////4AAAAAAAD///////wAAAAAAAA///////gA + AAAAAAAf/////+AAAAAAAAAH/////8AAAAAAAAAH/////4AAAAAAAAAB/////wAAAAAAAAAA/////gAA + AAAAAAAAf////AAAAAAAAAAAf///+AAAAAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAD///4AAA + AAAAAAAAB///wAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAAAAAAAAAAAf//gAAAAAAAAAAAAf//AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAH/+AAAAAAAAAAAAAH/8AAAAAAAAAAAAAH/8AAAAAAAAAAAAAD/8AAAA + AAAAAAAAAD/4AAAAAAAAAAAAAD/4AAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAAAAAAAAA/4AAAAAAAAAAAAAB/4AAAA + AAAAAAAAAB/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAB/+AAAAAAAAAAAAAD/+AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAf//AAAAAAAAAAAAAf//AAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAA + AAAAAAAAA///gAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAA + AAAAAAAAB///wAAAAAAAAAAAB///4AAAAAAAAAAAD///4AAAAAAAAAAAD///4AAAAAAAAAAAD///8AAA + AAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAH///+AAAAAAAAAAAP///+AAAAAAAAAAAP////AAA + AAAAAAAAf////gAAAAAAAAAA/////gAAAAAAAAAA/////wAAAAAAAAAD/////4AAAAAAAAAH/////8AA + AAAAAAAH/////+AAAAAAAAAf//////gAAAAAAAA///////wAAAAAAAD///////8AAAAAAAH///////+A + AAAAAAf////////gAAAAAB/////////8AAAAAH//////////gAAAA///////////4AAAH/////////// + /4AH//////////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAA + AAAAAABAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkpKED09PSY1NTU2 + LS0tPi0tLT06OjozS0tLIVhYWAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAPJSUlTiQkJIwjIyPA + IyMj6SwsLP84ODj/QEBA/0dHR/9FRUX/Ojo6/ywsLP8nJyf8Jycn4SwsLLMqKip9Ojo6PVZWVgYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpChkZGVksLCy1 + Nzc39lBQUP9jY2P/c3Nz/4KCgv+Li4v/k5OT/5iYmP+ZmZn/nZ2d/6Kiov+jo6P/np6e/5qamv+Dg4P/ + Xl5e/0VFRf8pKSntJSUlnzY2NkFXV1cDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4U + ICAggjQ0NOpTU1P/b29v/3Z2dv9/f3//h4eH/5CQkP+dnZ3/paWl/7CwsP+6urr/wMDA/8DAwP/AwMD/ + wMDA/8DAwP+6urr/tLS0/7W1tf+qqqr/oqKi/3p6ev9AQED/JSUl1ScnJ2RPT08HAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACYmJgooKCh7PDw88WRkZP9ubm7/d3d3/4eHh/+RkZH/q6ur/8nJyf/e3t7/7Ozs//Ly8v/39/f/ + +/v7//v7+//6+vr/+fn5//n5+f/x8fH/7+/v/+np6f/g4OD/1dXV/8PDw/+6urr/r6+v/5SUlP9OTk7/ + IyMj3CwsLFhEREQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACIiIkU9PT3bXV1d/2VlZf9tbW3/h4eH/62trf/R0dH/7+/v//v7+//+/v7/ + +/v7//39/f/+/v7//v7+//39/f/9/f3//f39//7+/v///////v7+///////+/v7//v7+//n5+f/y8vL/ + 5ubm/9DQ0P/BwcH/tLS0/5OTk/9ISEj/IiIivCwsLCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjBzMzM49RUVH8ZmZm/29vb/+Hh4f/ubm5/9zc3P/z8/P/ + +Pj4//b29v/y8vL/7Ozs/+fn5//k5OT/5OTk/+bm5v/n5+f/6+vr/+7u7v/09PT/+fn5//n5+f/9/f3/ + /v7+//7+/v/7+/v/+/v7//z8/P/5+fn/8fHx/9vb2/+/v7//sbGx/4GBgf8xMTHyIiIiYAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpGUBAQMRZWVn/YWFh/3t7e/+srKz/ + 39/f/+7u7v/s7Oz/4ODg/87Ozv/Hx8f/yMjI/8jIyP/Ozs7/1NTU/9jY2P/e3t7/5OTk/+np6f/t7e3/ + 8fHx//X19f/29vb//Pz8//7+/v/8/Pz/+/v7//39/f/8/Pz//v7+//z8/P/6+vr/6urq/9XV1f+6urr/ + oaGh/0tLS/8jIyOXNTU1BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExJ0ZGRt5iYmL/ + aWlp/5aWlv/MzMz/5ubm/9ra2v/IyMj/ubm5/7a2tv+9vb3/xcXF/83Nzf/b29v/3Nzc/9ra2v/c3Nz/ + 29vb/9ra2v/W1tb/1NTU/9bW1v/Y2Nj/39/f/9/f3//h4eH/6urq//Pz8//8/Pz//v7+//39/f/4+Pj/ + +/v7//z8/P/6+vr/5eXl/8jIyP+2trb/YmJi/yEhIbgxMTENAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MTExKklJSeZcXFz/cnJy/62trf/d3d3/0dHR/7m4uP+pqaj/r6+v/7q6uv/Ozs7/2NjY/9ra2v/P0ND/ + t7e3/5ydnv+Fh4j/dXh6/2lsbv9cX2H/WVxf/11hY/9obG3/c3V2/4GBgf+RkpL/q6ys/8HDw//V1tb/ + 39/g/+np6v/y8vL//Pz8//7+/v/8/Pz/+fn5//b29v/p6en/1tbW/7i4uP9tbW3/IyMjwkRERA4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAOzs7IEtLS+NdXV3/eHh4/8DAwP/S0tL/tLS0/6Wlpf+rqqr/t7e3/9jY2P/g39// + xcXF/5ydnf9tb3D/UlRW/zo7QP8yMzr/MDM6/y00Of8vNj3/MztC/zc9RP8vOD7/Mzo//zw+Qf8/P0H/ + Pz9C/zg+RP88RU7/WmJn/4OJiv+1uLf/2NrX/+Dg4P/w8PD/+vr6//r6+v/19fX/9fX1//X19f/Y2Nj/ + vb29/3Nzc/8nJye8TU1NBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyEEJCQtNbW1v/goKC/8DAwP+/v7//nJyc/52dnf+1tLT/ + 19bW/9HR0f+kpKP/bGxr/0NDQ/8pKiv/MzU1/09RT/91d3X/l5mX/6+1sv+3w7//vsrH/8bRzv/J0tD/ + xs/O/7/Ix/+8xMP/rLOz/5afnf9tfXv/PFRS/yQ0Ov8gLTT/OEBF/2Zoa/+en5//0dHR/+Tj4//v7u7/ + +vr6//n5+f/u7u7/8vLy/97e3v+6urr/bGxs/zExMaFsbGwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAjw8PK1dXV3/fHx8/7m5uf+np6f/ + j4+P/6Wlpf/T09P/0tLS/6Cgn/9iYWH/OTg3/ycpJf9UWFT/mJyZ/8XHx//RztT/0dPW/9HX1//R2Nj/ + 1tzc/9jf3P/X4dv/2N/d/9ff4P/W3t//1N3e/9PZ2//W2Nv/0tTV/9HQ0f+6wsH/j5ud/09bYP84PEL/ + PDs8/2FgYP+bmpr/0tLS/+np6f/29vb/+Pj4//Ly8v/s7Oz/3Nzc/7q6uv9WVlb/REREbwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3N2pUVFT/ + eXl5/62trf+hoaH/lZWV/7Kxsv/Z2dn/ra2t/2xsa/83Nzb/Li0t/3Z3df+4vrj/z9XQ/8PKxP/P1s// + 0tzS/8/g0v/D3Mn/tda+/6/Uuf+n0LH/os+s/6LQsP+cz7H/nNGy/6XWuP+u2sD/u97I/8jg0P/Q4Nb/ + x9PJ/8vWz//P2NT/usDB/3x7fP88Ojr/PDw7/2ZmZv+zsrP/3t7e//Hy8f/5+fr/8fHx/+np6f/S0tL/ + rq6u/0pKSvhpaWkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADg4OCRJSUnzZmZm/5iYmP+Tk5P/k5OT/8HEv//Ky8j/jYuK/09MTv8uKzb/cnFt/7/Au//KzMv/ + v8a7/77Mvv+1y7r/pcSq/5bDmP+Kv4r/gL+B/3a5ff9ss3z/aLR8/2Kzef9csHv/TrB8/061gP9SuoL/ + XcCF/2HAgv9vx43/ec2V/5bNpP+s1bX/vtfH/8POy//K1sz/ycjG/3hzdf80NjP/RkpF/42Ojv/Mysv/ + 8u7s//j4+P/t7e3/4uLi/87Ozv+Wlpb/WFhY0Z6engYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0OzXl5e/4GBgf+Tk5P/k5OT/8bGx/+2t7j/dnZ3/zw8PP9JSEb/ + sLOq/8DHwf+0wrf/q8Kx/5K5m/+Csn3/ebRq/22nXf9hk17/T4Bc/0p6YP9BfmH/PoVi/z+Mav9Dk3D/ + QJly/yeYbf8al2v/EZdn/xeYZP8dmWD/LKRk/0C0b/9QwXL/W8Rz/3jOjf+N0p7/rda0/77Qvv/Q0s// + rq2u/09NTP88Njz/dXBz/8vIxP/p6en/+Pj4/+np6f/Z2dn/u7u7/3Fxcf+KiopzAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDxGUFBQ/3R0dP+Tk5P/jo6O/8fHx/+sq6z/ + cGxy/zg5O/9vdXT/u8K9/6+2rv+btaL/iLOD/3msZ/9qnl3/UHtK/z1bO/84XD7/Qm5M/0uIV/9Xm2D/ + WKdq/1ivdP9YtHj/Wrp8/1i6g/87tYL/KLSB/yKzf/8js3v/H7Bt/yCtZ/8RoVj/FqVS/x+nUP8+t2H/ + Xcl1/33Qi/+d1p7/rc6s/7vJuv/Cw73/bmxt/zY0Nv9wbmv/uLi4/+7u7v/z8/P/6Ojo/9DQ0P+np6f/ + f39/8M7OzhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKSkoBRkZGyGZmZv+Li4v/ + iIiI/8TExP+kpKT/bWxt/z46O/+IjYj/uca7/56vnv+Nrov/aqVk/12VU/9BYjj/KUAn/y9PKP9BczX/ + SodB/1KcUf9aqGL/X7Bs/2K2e/9kvIf/ZcGO/23HlP9qyZn/R8iZ/yjEkf8dwof/IcKE/yLCf/8txIP/ + I792/yK5bv8hsmP/JKxc/yirVf9DvV7/ddZ2/4bSgv+c0Zn/sMyt/77Pv/+EiIf/NTA0/2xsbP+5uLj/ + 6+vr/+/v7//e3t7/xsbG/4qKiv+ysrKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBAQ1dXV/94eHj/i4uL/7GzsP+trqr/cW9u/0hER/+PlIr/t7+o/5aykP9vonb/YpxU/0BrOP8dNBn/ + JEUh/zBoJP9AfzD/SZE3/06bQ/9YqVj/YLZr/2TAev9txIv/ccaX/3LKn/92zaL/dNCs/03Nqv8uyKL/ + Lcqh/yvNmv820p3/OtOY/zLSi/8ny33/Lcp5/zLEdP8wvGj/MLZY/0u1UP9rymD/dddt/4rTg/+fyqP/ + wNC9/5GRif88Pz3/b3Nw/7u8vP/x7vD/6Ojo/9DQ0P+rq6v/pqam8fPz8xEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEhISLJmZmb/jo6O/52dnf+5urn/dXV1/05OT/+Hh4f/rbmw/4ekjf9sn2b/ + UY09/yRGHv8WLxP/IlYd/ytwJP8ugSb/P480/0qYPv9SnEr/Xp9e/2qkdv90qov/dbGZ/3K4pf90vq7/ + d8S2/3DEuP9UwLn/O724/zvAu/8zwK3/Qcay/0zJr/9HyKL/P9SX/zjUiv870oD/O9Jy/zvKYv9Vw1j/ + V7pL/1W/Tf9t1Gb/gtF//5rJkP+3xbf/f4B//0FBQP+AgID/0M/Q//Dw7//f39//xMTE/5ycnP/i4uJe + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKShlOTk76dXV1/4uLi//CwsL/f32A/1ZWW/9yeHb/ + rbqr/4Gjhf9go1r/PXs2/xYsEP8RLg//IFga/yZ0G/8tgCL/PIUv/0KEN/9Jgj//UYVJ/2OSW/9up3b/ + gb6X/47Lq/+R07r/j9bC/43ZyP+I2cr/d9bO/1XQy/9Fy8X/QcnB/0LHvP9Oyb3/Tsew/0zEq/8/wJT/ + SMeI/1DPe/9J0mX/YtVh/2DKU/9UvUz/SL4//2HUVv992G7/lsmb/7nJtv9rbmj/VVRU/4yRjv/i4uL/ + 7u7u/8/Pz/+lpaX/x8fHdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBvXV1d/4WFhf+np6f/ + mpqZ/2tpZ/9dX2L/orCh/42ogP9Zm1n/OWss/wwlB/8TKxL/FVgO/yN0Fv8seR7/MXEk/zh0LP9Cfzb/ + WJdI/2utW/98uWv/hcSE/4/Ppf+X07b/m9fD/5nZyv+V2c3/kdnQ/4HX1v9aztD/QMfL/z/Hyv9Cycf/ + SMnB/0zJvf9BwrD/Obyb/zi4hv89tXb/Prpo/2LQaf9r1ln/YtFS/1PBQf9Cvjz/VdFK/3XYbf+Vz5P/ + p76k/0pLSv9na2n/p6en/+7u7v/X19f/vLy8/8TExNPy8vIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCvm9vb/+Ojo7/tLS0/2trav9cXFn/mJya/42nif9onln/OX0y/wwXCv8OLwf/F14P/yFwEf8caxD/ + ImgX/zV3Kf9JlDr/WKJI/2GoUf9hp1H/a6NZ/3Wqc/+Lv6T/nMy9/6PUyf+n2dL/q97a/6je3P+X2+H/ + as7Z/0TC1P85wND/N77N/zu7yP83t7//IbSs/x2wnP8dqYH/KKpy/y+sZP9HtGD/X8Fd/2fPV/9W0kX/ + S8FA/0K8N/9X2k3/e9dz/5/RnP+Rm5H/UU1Q/3d3d//U1NT/4uLi/8XFxf/ExMT/8fHxEAAAAAAAAAAA + AAAAAAAAAAAAAAAAampqAUhISPd2dnb/oqKi/46Ojv9hYWH/cHFu/5itmf9un2r/QIM2/xArCf8JIgX/ + GFQK/xdmD/8XYw3/JnEX/zeCJ/9FkTb/RpM3/0qQO/9WlkX/YJxN/2mcVf9wpGf/ebCG/6XSxP+03s// + yufe/9Ds5P/C6Of/qOPn/3rX5P9Ty9r/N8LR/y67zP8zusz/NrbH/yKrtv8WoaD/F5uI/xmVbv8bmFn/ + IJhU/0WuXP9hu1b/V8VJ/1XOR/9BwDH/QsEx/2LbWP+B1H3/qcio/2VkYv9lZWX/oKCg/+jo6P/Nzc3/ + xcXF/+3t7RMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/hYWF/6mpqf9iYmL/ZGRk/5agk/9woG7/ + RYtC/xhME/8JFwT/CkoI/w1eBv8ZZQr/IHEY/y1+IP80hSH/OIcm/0SOM/9RlT7/U5I9/1iRP/9mmlD/ + c6Rl/36ugv+gzrz/yOfY/+Pv5P/q8+r/3PPw/7zp7f9/2OT/ZNLj/0nM3P9CxNn/Or/P/zG3xf8nrbv/ + HqWr/xibk/8Wknb/GI5d/xyPU/85lE7/XKZT/1+vVP9Ov0P/Sck6/0G5LP9C0Dj/beNm/5zbl/+OoIv/ + Wlla/3Nzc//d3d3/0tLS/8bGxv/k5OQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/5OTk/+ZmZn/ + Wlpa/3Fxcf+Oo4r/UpZN/ytvJf8IGwX/BzoC/w1gB/8SaBX/H3gQ/yF4Ev8rgRz/MoYi/zqIJ/9HjDH/ + TIwz/1SPOP9glUT/aptV/3enbf+BtIv/ptLD/9Tr4P/n8ef/7fXt/+n39P/V8vL/m+Tx/2jU5/9Uz9// + V8ze/03H2P83vcr/K7TB/ySstf8cpJ//F5qC/xeQZf88m2D/XKFe/1yeVP9Tmkv/TqFE/0q0QP9Bwjf/ + OL4q/2HkVP+D3Xz/o8qg/2hmaP9hYWH/vLy8/9vb2//Gxsb/3NzcKAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGlpaf+Xl5r/g4WA/1hbXP+BioD/b5hp/z2MM/8QPA7/CTMG/wdcAv8Tbw3/GHoX/xZ9Df8jgRb/ + LIUe/zOIJP85iCT/Q4oo/02OL/9Wkzn/Y5pI/2ygW/94rHf/g7qT/53PvP/b7uP/7PPq//H38f/z+fT/ + 6vn0/6zq8v9l1uj/V9Pg/2bV5P9b0OH/OcTP/zO7x/8vtL7/I62q/xmhhP8emWz/X6xx/2qqY/9hpFv/ + UJlK/0yYRv9Bmj3/OaU2/z+/KP9FzDr/e+dw/5/Ymv98inn/XVZc/5OWlP/i5OL/ycnJ/9zc3CkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABubm7/nZ+h/2xuaP9bX2D/f5d+/1iRUv8keR3/AzgF/wpTCf8ObQz/ + F3oU/xeAEv8Vfw3/IYEW/ymEGv8yiB//OIkh/0OMJ/9OkTH/V5Y9/2KdTf9rpGL/ea9+/4S8l/+Tzbz/ + 1Ovh/+316//x+PP/9vr1//f7+P/J9Pf/Z9rm/1vV4f9j2eb/UNLh/znH1P83v8r/NbjD/yWvr/8cpI3/ + OqV4/3CzeP9vrmj/Y6de/1OeTv9Gl0L/PJQ5/zOPMP85pSz/N7gq/3rxZ/+X4pT/mLKT/15VXf90enf/ + 293b/83Nzf/f398mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1/5+jpf9ZV1T/ZGpm/3Kabv9BiTf/ + EGMO/wlSB/8RcBT/FX8W/xmCF/8YgxX/GYIT/yGDF/8ohRn/MYgd/zuLI/9Ejyr/T5M1/1qZQv9kn1P/ + bKdn/3uxgv+GvZn/icm7/8Lm3v/p9e3/8Pj0//T79v/6+/r/2/f3/43m6/+B4uz/cN/s/0XR3f85yNf/ + OMHN/zW7xP8ps7X/Kqya/1mxgP93tHb/cK5p/2OnXf9VoVH/SJlD/zqRN/8wjC//K4Er/zGlJP9t5lf/ + jOaN/6zNqP9fXF7/XGJf/9nZ2f/R0dH/4eHhIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fP+Um5z/ + V1JR/252bf9hmFr/L4Uj/wpjDP8VcAv/Cn8R/w+EE/8ShBP/GIUX/x2HGf8ihhn/KYgc/zKLH/87jiT/ + RZIt/1GWOP9bm0X/ZqJW/26pa/98s4b/hr6d/4jIt/+j3Nj/2fPt//L59f/z/Pf/+fz4/+f7+v/C9fb/ + qO/x/5Dn8P9X1+H/O83Z/znFz/82vsX/Lbi6/zizoP9ktYH/eLRz/26vaf9iqV3/VaJR/0qdRv8+ljv/ + NJEz/y2MLv8afRn/Vr9J/5Hrjv+t2Kv/aWpp/01TUP/W09X/1dXV/+Tk5B8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAB9fX3ylJmb/05PTv9ud2n/UJRI/yZ/Hf8JbQ3/D30R/wuGE/8PhRT/EoYW/xeHGf8ciRv/ + IYkb/yiLHf8wjiD/OpEm/0WVLv9RmTn/W55H/2alWf9uq27/fLWI/4O+nv+My7n/ldzi/8Dr5//z+fb/ + 8vz3//n99//w/fn/1/j5/7Hy8P+m7PT/ad7k/z7S2v87ytL/N8LH/y68vP80t6j/X7WE/3Wzcf9tsWj/ + X6pc/1OkUP9In0X/P5s9/zSWNP8tlSz/H4Ql/y+ML/+c7Zf/sd+u/291cP9OT0z/ysrM/9TU1OPq6uoO + +Pj4AgAAAAAAAAAAAAAAAAAAAAAAAAAAiIiImZiam/9HTUv/aXRl/0mTQ/8adRX/C3gQ/w2HGP8Qihj/ + EYkY/xSKGf8Xihr/G4sb/yGNHP8ojx7/MJEh/zqUJ/9FmC//UJw6/1uhSP9lp1n/ba1u/3q2h/+Cv57/ + icm3/4/b3v+p5eH/8Pj1//b8+P/5/fn/9v75/+X8+v+89fP/ou3y/3Xj6v9D1N3/O87U/zbGxf8zwLz/ + Mbqv/1G1if9tsm3/a7Bj/1+qWP9SpEz/RqBD/z6dPf80mTX/L5gx/yeRLf8Vdhn/eMp1/7nntf9xeXT/ + S0lG/9PU1v/W1tbH7+/vAfj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjDObmZv/S05O/2NwYP9AjTz/ + DnQQ/xCEGv8Rjx3/E48a/xKNGv8Vjhv/GI8c/xyQHf8hkR7/KJMg/zCVI/86mCn/RZsx/1CfO/9ao0f/ + ZKlY/2qtbP93tYT/f76Z/4TGsP+R2tf/n+Th/+X28//3+vj/+f35//n++f/x/fj/z/j2/5nu7/9s4eL/ + Vdjf/0fR1P9Aycf/Q8O//zzAtf9QuY//X61g/2KqUv9Wpkf/TaJB/0WgP/8+nz7/NZs3/zCbMv8llCz/ + Io0p/zCNLv/A7bz/aXBs/1JPTP/W1tj/3Nzbkfb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + qKKlzFRVVP9ZaFj/MIIx/w9/Fv8RjR//DI0Z/xWTG/8Tkhz/FZId/xiTHf8clB7/IZUg/yiXIf8wmST/ + Opwp/0SeMf9PoDv/WaRG/2OqVf9qrmj/dbR//32/lf+Gxq3/jdTO/6Lk5P/W8/P/8Pr4//n9+P/5/vn/ + +fz6/9z4+f+l7/D/e+Xn/2vd3/9Z1dX/VNDP/1zLxP9YxrP/YL2M/1mqUv9eqEb/UqQ7/0igN/9Bnzf/ + PJ43/zKbMv8vmjD/LaA1/ySWLf8bgh3/pdKg/11lYP9eXFn/2tvd/93d3UUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALKvr2ZhXWH/UltS/yR+KP8Pjh3/EJIf/w2RG/8TlB7/FJYd/xaWHv8Zlx7/ + HZgg/yKZIf8omiP/L5wk/zieKf9DoTH/TaI5/1elQ/9hqVD/aK9j/3K1ev96vZD/icWp/4rPxP+l4+X/ + uern/+f59v/4/PX/+Pz5//j8+//e+Pn/re7t/5Do5/+N5OX/d9vZ/3LTzP94yrH/cMST/2q4cf9dq0n/ + Vqg9/0ukMv9CoS//P6Ay/zmeMv8wmy3/MaAz/y2gNP8qnTf/HY4o/2+tb/9QUE3/gn5+/9zd3NDm5uYQ + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0tbMNiIGJ9EJMQ/8dgST/D5Uc/xCVHf8Rlh7/ + E5cf/xOZH/8VmR//GJog/xyaIf8gmyL/Jp0k/y2eJv82oSr/PqIv/0mlN/9Tp0H/XKtO/2WvX/9xtXP/ + d7yI/4TDof+Fyrf/k9fS/6Ph4P/X8/L/9/v0//f8+P/k9/X/1fT2/7vu8v+l5+j/nePf/5Tc0/94yKX/ + ZbZ1/2SzYf9fr1H/W6xF/1CpO/9HpjH/P6It/zifLf84oDD/Mp8v/zKiNv8zpTv/MaI//yWYNP84hzz/ + NzUy/7Gtrv/Y2deB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqlraY2SDn/ + EoIb/xCYHv8RmR//Epog/xSbIf8TnCH/FZwi/xidIv8bnSP/H54k/yWgJv8roSj/M6Mr/zulMP9GqDb/ + TqtA/1iuTf9hslz/bbdt/3O8gf99wpf/hMiu/43Rx/+W2dj/u+bi/+/59f/z+vb/wevk/6rh2/+m39v/ + lNnL/4nSuf94x5z/c76E/3C4cf9os17/X7BQ/1etRP9Nqjr/Racy/z2kLv83oi//NqQy/zWkNf85pz7/ + O6pE/zuqSf8zpUH/KoQy/zxCOv/W1NXI2t3bBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADLydBMUWtY/xGMHv8QnB7/EZwf/xOdIP8UniH/E54k/xSfJP8XnyX/GqAm/x6hJ/8joij/ + KaQq/zClLf83pzD/Qak3/0qsP/9UsEr/XLNY/2i4aP9vvXr/esOQ/4HIpv+Lz73/mNfQ/6/i3P/W8e3/ + 8Pr1/8bv7P+s5d//ntzS/4/Vv/+Hzqr/e8WU/3K/fv9quWz/ZLVb/1yyT/9Ur0P/S6w6/0KpM/85pC7/ + NqUx/zeoNf83qjv/PqpF/0OvTP9GsVP/Pa5M/yuRNv9ufHD08e7wJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7/FBoqjj+wMkhv/E6Ik/xOiI/8ToSP/E6Ej/xShJf8VoiX/ + F6Im/xqiJv8eoyb/IqQn/yilKf8upyz/Nakw/z6rNf9HrTz/UbFH/1q1VP9kuWP/a75z/3XDh/97yJv/ + hc2x/5PVwv+h3tb/uOfg/+f47//J8Or/q+Xa/5rcyP+J1bT/gM2g/3TFi/9uvnb/Zrll/2G1Vv9Zskv/ + UbBA/0itOP8/qjH/Nqgt/zWpMf86rDv/Pa1B/0StRv9LtVf/Ubhh/1C3Xf8tmjr/m7qfqgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7n3+ZCZQZ/xKiJP8SoiT/ + EqEj/xKhI/8UoyX/FaQl/xekJv8ZpCb/HKQn/yCmKP8mpyv/K6kt/zKqMP87rTX/RK87/02xRP9TtU// + Xbpc/2W/bP9wxX7/eMqS/4HPpv+N1Lf/l9rI/6bi1f/G7uP/vOzk/6bi0v+Z3cD/i9iu/4PRm/93yYb/ + bsFx/2W6X/9dtlH/VbNG/02wPf9Frjf/PKwx/zSrLv82rDX/Pa5A/0SwSP9Ls07/UrVd/2C+cP9iwW7/ + M6BA/5PBl4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X5tnRAmVGv8QoSL/EqIk/xSkJv8WpSf/FKYo/xWmKP8Xpyj/Gacp/xunKf8fqCr/JKos/yqrLv8wrDH/ + OK40/0CwOP9IskD/TrVI/1a6VP9gv2P/bMZ1/3XMif990Jv/hNOq/43Xt/+U3MP/meHM/5Hgyv+P3cD/ + jtmv/4jWof+D0pP/ecyC/2vDbf9eu1z/WLZO/1CzRP9HsDz/Qa83/zquNP83rjX/PrFB/0W0TP9MuVT/ + U7xc/164Z/95zIP/ccl8/zqmSf+ayJ96AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG2wdQoLlhz6FKUm/xenKf8aqyz/Ha0v/xSoKv8VqSv/F6or/xipK/8aqSv/ + Haos/yKrLf8mrC//LK0x/zKvNP85sTf/QbQ8/0u5Rf9YwVP/ZMhi/3HNdP94zoP/fNKO/3vWmf+A16X/ + htqw/4nduf993bT/gdut/4PYnv+B1JH/etGG/2/Kdv9kw2X/Wr1X/1O5S/9LuEP/RLY9/z6yOP86sDj/ + QLND/0i3Tv9MulX/T71b/1W/ZP9wwnb/lNya/3nLhf89qU7/rN61aAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZwfyxOrKP8brTL/LKxA/ym0O/8erDT/ + G6wx/xesLf8WrCr/GKwq/xusLP8frC3/JK0u/ymuMP8vrjH/NK80/z2zOf9JvET/V8dR/1zNWf9jzmT/ + bs9z/27Sef9t1X//c9iL/3jalv992qH/e9yn/3XYmv901ov/c9WD/3HSef9pzm3/Ycpf/1jGU/9OwUf/ + Rb5A/0C6PP87sjr/O7E9/z60Rf9EuE7/TbxY/1W/Yf9ew2z/gc2J/67ds/9uy3z/RKhV/sfwzzoAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+VHpENqST/ + F7Ax/0S8Wf89v0//NbhJ/y23Qv8ktTn/HrMz/xqvLf8cry3/Hq4u/yKvL/8mqDH/JpQ1/yWDN/8tizz/ + O6lB/0vASP9FsEv/PJNN/z+PU/9DkVn/SZth/129cP9kxXr/VqZ4/02Yev9Ppnj/YcZ3/2fTdP9hymr/ + T65c/0CVUv88kkz/PaRD/z21Pv82pj7/K4g//yeCP/8qkz//OrBI/06+Wv9dw2f/a8d2/5LWm/+76MP/ + XsRt/2OzcPHc++IOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAXgiVXEKYl/w20Kf9T0Wn/XM5t/0rFXf9BwlX/NrxK/y26Q/8nuTr/JLc3/yO2NP8itDL/ + HYw0/wqGk/8HiKr/CYem/xODhf8ujUH/JXtT/wegzv8Li7H/DoGi/wyWvv86iV3/TKli/x1+jv8IoNP/ + GX6O/06wY/9ZyWL/PZFX/xWHnP8InMr/B5zL/xKFkf8phT3/I4dH/wmFpP8Gmcb/G3hk/zuvTf9TxWH/ + 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 + z/fUBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs47URO6U5tQajD/8FpxL/S8NP/8vv0f/y+Oj/ + 5Pfk/8fy1P/F7cf/tum7/6blrf+c4aL/kdyX/4LXiv9y0Xv/Zcxv/1jHYv9JwlX/Or5I/y+6P/8nuDj/ + HbUv/xSzJv8Nsh//C7Ec/wiwF/8GrhP/C7Aa/w6vG/8SsB//G7Un/yS1Mv84vEX/Vsdh/2vOdf97z4L/ + btZ4/16+afx6xISFw+bDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKLPqwQnjyd/ + CpYU+gemCf8tqS3/rd64/+z58P/i9tv/4fLi/9Pu1P/D6cb/ueW9/6/fsv+h2qT/kNWV/4TRi/94y3// + ZsVw/1W/YP9LvFX/Q7hL/ze0QP8tsDb/Hq0q/xerJP8Tpx7/D6QY/wunFv8OpRj/GKci/yOsLP88tUX/ + UL5Z/2bGbf9xx3f/cct4/2W1a+xvs3ZSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAByRJzoffhzVB5QJ/wycDv9quGr/3e/b//n8+f/t8+3/4Pbi/9H10//G7sX/ + u+a5/7Der/+g2aH/kdmW/4HQh/90x3r/Z79s/126Yf9StVb/RbBJ/zSsO/8sqTH/JKQp/xyeIP8Sohn/ + FKAa/yGhJ/8zqjj/VbZZ/2G9ZP9pwW3/aL1t/1qsYbNYnl8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5A+CAl5CXcHhQrwBokI/yeOJv+AvYD/ + 3fHa//j49P/18fL/6ezm/9zu2//J68r/vN+9/7rZu/+p0Kr/mMea/4bGiv92w3r/Zbto/1m2W/9RsFX/ + RqlJ/zikOf8uozD/H5gn/yGUKv8ynjv/Q6pO/1WvWP9is2T/YKZj22StaFOEvIoBAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + C2sMFQR0BIYGfAbvB34G/x17HP9nqGb/uOC4/+Lz5P/q9Ov/6vLr/9rp2v/K5cv/vOO+/6narf+k0KX/ + oMme/5DAjP+Bun3/c7lz/2CxY/9DoEX/JY0n/y2PK/86mDj/SqNJ/1KoU/9XplnbVZtXZ1uNWQcAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDDgtlCmgCZwPHBXYF/QtuC/8jeyT/V5xW/4y2hv+zz67/ + xt3B/9DlzP/P4sr/vt66/6rXp/+QxYz/drFw/0iZRf8shir/JX4h/zCJKv80jjD/QpI+90uNRbJMikRN + Pnc7BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVZBCAHZANr + BWcBrQNmAeUBYwD/BmcF/wlpCf8Pbg//FW8U/xdyF/8UcBT/Dm4M/w9xC/8OdQv/FncQ/CF7G9ksfSGd + L4IyWCVzLRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAABE8BGANWAj0FWQVbAlYCbwJaAnsEXgN/BVwCeQhdBWsPZAtW + C1wFMxBYCQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////////wD////////gAAf/// + ///wAAAP/////8AAAAP/////AAAAAP////4AAAAAf///+AAAAAA////wAAAAAA///+AAAAAAB///wAAA + AAAD//+AAAAAAAH//wAAAAAAAP/+AAAAAAAA//4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gAAAAAAAAf + 8AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAP4AAAAAAAAA/gAAAAAAAAB+AAAAAAAAAHwAAAAAAAAAfgAAAA + AAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAA+AAAAAAAAAD + 4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAH8AAAAAAAAA/4AAAAAAAAH/gAAAAAAAA/+AAAAAAAAH/8AAAA + AAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAP/+AAAAAAAA//8AAAAAAAD/ + /wAAAAAAAf//gAAAAAAB//+AAAAAAAP//8AAAAAAA///wAAAAAAH///gAAAAAA////AAAAAAP////AAA + AAB////+AAAAAP////+AAAAD/////+AAAA///////AAAf///////gAf///////////////////////// + KAAAADAAAABgAAAAAQAgAAAAAAAAJAAAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAMDAwCCQkJEIkJCR9IyMjqjAwMM48PDziQUFB7UBAQOw1NTXfKioqyCgoKKMtLS1y + MjIyNlZWVgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAGxsbAx4eHkQwMDCmRkZG8l1dXf9xcXH/goKC/4+Pj/+YmJj/nZ2d/6Kiov+mpqb/ + pKSk/52dnf9/f3//YWFh/zw8POgnJyeULy8vMklJSQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACsrKwMmJiZSQUFBzllZWf93d3f/fHx8/5GRkf+qqqr/wsLC/87Ozv/c3Nz/ + 4uLi/+Dg4P/f39//29vb/9PT0//Jycn/vr6+/7W1tf+Wlpb/W1tb/SsrK7opKSk7VlZWAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiJ0JCQr1ZWVn+bGxs/4eHh/+wsLD/2tra//Ly8v/6+vr/ + /f39//7+/v/+/v7//f39//7+/v///////v7+//7+/v/8/Pz/9/f3/+jo6P/T09P/wMDA/6Kiov9cXFz7 + JycnoiwsLBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwI4ODhkUFBQ82pqav+FhYX/vb29/+Xl5f/09PT/ + 7u7u/+fn5//h4eH/4ODg/+Li4v/m5ub/6+vr//Dw8P/39/f/+fn5//39/f/+/v7/+/v7//v7+//7+/v/ + 9fX1/93d3f+8vLz/lpaW/0JCQuUmJiZFREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqBD8/P5NcXFz+cXFx/6ysrP/f39// + 5OTk/9HR0f/CwsL/wsLC/8nJyf/Q0ND/1NTU/9ra2v/f39//4eHh/+Li4v/m5ub/6urq/+/v7//09PT/ + +vr6//7+/v/+/v7/+vr6//v7+//x8fH/1dXV/7CwsP9fX1/4ISEhbEtLSwEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8GREREpVxcXP+EhIT/ + ysrK/9PT0/+4t7f/sLCw/7q6uv/Nzc3/1dXV/8/P0P+4ubn/n6Gi/42Pkf9+gIL/dXh5/3l8fv+GiIn/ + lJWV/6enp//AwcH/1tbW/+fo6P/y8vL/+/v7//39/f/7+/v/9vb2/+Pj4/++vr7/bm5u/iUlJXtiYmIB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwNHR0ed + XV1d/5OTk//Nzc3/sbGx/6alpf+6urn/09PT/8jHyP+YmJj/YmRk/0RHSP83OTz/PkFH/0VNUv9QWV7/ + WF9k/1BZXf9QVVj/TE1P/z9DRf8zPkX/RVBV/3R6fP+ztrT/1tfW/+zt7P/5+fn/9/f3//X19f/r6+v/ + x8fH/29vb/4xMTFxWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAD09PXlaWlr+l5eX/7a2tv+ampr/r6+v/9DQ0P+3trb/cnJx/zg4Nv8+QD//cHJy/6Cgof/AwsH/ + zdLQ/8/Y1v/P2db/0drY/9DY2f/P2Nn/ztXW/8TKyv+hq6n/cX1//z1KUP82PEL/YGBi/6SkpP/Y2Nj/ + 8PDw//j4+P/z8/P/6+vr/8XFxf9nZ2f6PT09TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAANzc3PVZWVvqNjY3/qqqq/5iXmP/AwMD/wMDA/3R0c/84Nzb/V1dV/6CmoP/Hzcj/ + 0dfS/8/X0f/L3dD/wNrI/7rYw/+z1rz/sda7/63Wvv+w2cH/ud3I/8Tezv/M2tH/zdfQ/83Y0v+vtrf/ + c3R0/z89Pf9gX1//s7Kz/+bm5v/39/f/8fHx/+Xl5f+9vb3/VlZW62lpaRwAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0MSkpK2nR0dP+YmJj/mJiX/8fJxv+enpz/TUpL/1FPVP+mp6L/ + x8vJ/7rHuv+vyK//nMGd/429jP97tX//a6x3/1+ldP9ap3X/VKZ2/0Cndv9ArXn/SbR7/1m7fv9uyY7/ + hcuY/6LTrf+408L/xdXJ/8DAvf9qaGj/PkI9/4WFhv/c2Nf/9vX0/+7u7v/b29v/p6en/19fX7Svr68C + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQ0N/Y2Nj/4yMjP+YmJj/w8PE/4aEiP9ERUb/ + fYB+/7vBt/+lu6r/kriN/3esdP9jlVv/UH5K/0h1T/9IfVf/TY9j/0ucbP9NpnT/Tqt7/y+oeP8fp3b/ + GqVw/xadYP8gol//Ka1c/z+6Yf9oy4D/jdGa/7TUs//Dy8L/m5mY/0U/Q/91cnD/zMvL//X19f/o6Oj/ + zMzM/4SEhP6YmJhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQBdSUlLvgYGB/5GRkf+/v7// + fn5+/0lGSP+Zopv/qbiq/4ytjP9rpGX/UXpF/zRPL/82Wy7/RXo//1GYVP9bqWX/YLN1/2O7hf9mw43/ + aMaU/z/ElP8jwYr/IMCC/yTAff8ov3r/H7Zp/x+sXf8rrVv/Rr1j/37Vff+Y0JX/ss6v/666sP9LSUr/ + bGts/83MzP/w8fD/39/f/7i4uP+SkpLR1tbWBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSoFra2v/ + ioqL/7m7uP+CgoD/U1BS/6KnnP+htJf/b6Jw/1KGRv8nRSL/JEgg/zJxJv9EizT/TptC/1urXf9muXb/ + bcCL/3DDmv90yaT/dM2s/0TIqv8uxqf/LMqe/zrRof870pf/Ls+E/zDMfP8zw3D/Mrpe/1C4Uv9tzmP/ + gdV5/5/Lof+0vq3/U1RS/3J1c//U0dL/7Ozs/9DQ0P+bm5v/1tbWUAAAAAAAAAAAAAAAAAAAAAAAAAAA + T09PBVJSUuV/f3//qqqq/4+OkP9WV1n/l5yX/5Cqlf9knWT/PGot/xUxE/8fVRn/Kngh/zeILP9Hjjz/ + T49H/2CUX/9xp4P/gLef/4DDsP+Ayrz/fM3C/2HJw/9CxMH/OsG5/0TFuP9Px7H/Rcmh/zzMjf9H04D/ + QtFm/13MWv9Uu0r/VsVP/3bVbf+ay5X/qrOq/09PTv+Ji4r/5OXk/+Li4v+xsbH/vr6+kQAAAAAAAAAA + AAAAAAAAAAAAAAAAQUFBR2FhYf+Pj4//qKio/2lnZ/96gX7/lq2N/1yZWf8mVRv/ECQP/xdXEf8odxr/ + MHYj/zp3Lv9Khj3/Y6BU/3m0bP+IypT/ldSy/5rZxP+X28v/ktvP/3vY1f9Nzcz/QsrK/0PJxP9Kyb3/ + SMWz/zy7l/8+uX3/Qr5q/2TTZf9l0lX/U8JD/0jFQf9s1mP/lc+T/46di/9TVVT/o6Sk/+vr6//IyMj/ + u7u7zvLy8gQAAAAAAAAAAAAAAAAAAAAAREREl3Z2dv+np6f/dnZ2/2lpZ/+YqZn/aJ1b/ylbI/8MHwb/ + FVoO/x5sEP8haxX/NXkp/0uWPP9aokv/YaVR/2uiW/9+tIr/l8q4/6bXzP+u3tn/reDe/5Pb4v9XyNb/ + OsDS/zW8zP86ucb/JbKx/xysmP8ipnn/Kahl/0ayXv9ixlv/WtFJ/0rBPv9IyD3/cNln/5/Pnv9rbGn/ + b29v/9TU1P/V1dX/wsLC//Dw8AwAAAAAAAAAAAAAAAAAAAAATExMv4KCgv+bm5v/X19f/4mTh/9tnmz/ + M3Mt/wkcBP8PTAn/FmML/x5sFP8xgCL/Powt/0WQNv9Rkj7/W5ZF/2mdVv92qHH/msiz/8Xk1f/f7uT/ + 1O7r/6nj6P9p0uH/RMjX/zW90P81usr/J627/xigof8Wln//GZJe/x2SUv9RqVb/XLdP/1DKQv9Cvy// + TdBB/3/aev+btJj/XFxb/5ycnP/g4OD/xcXF/+jo6BIAAAAAAAAAAAAAAAAAAAAAXV1dv5eXl/93d3f/ + amlp/4Whgv9EjT//DzAL/wk8A/8NYgz/HHIQ/yN5Ff8vgyD/N4cl/0iNM/9Qjzb/XJNB/2ucV/98rHr/ + m8u2/9bs4P/q8+r/6fby/8jv8f962er/V9Dh/1TK3v8+wM//LLTB/yKpr/8YnY//FpBn/zyZXf9anlf/ + V55O/02pQ/9Gvjv/OcAs/2rlX/+X1JL/cnVy/29vb//c3Nz/yMjI/93d3R0AAAAAAAAAAAAAAAAAAAAA + ampqv5ucnf9gYmD/eYN6/2GWWv8jZR7/BzME/wpiBf8XdxP/Fn0P/ySCF/8vhyH/OIgj/0WLKf9SkTT/ + YJlG/26jYP9+s4b/l8u0/9/v5P/v9e//8/n0/+X49f+D3uv/V9Ti/2fW5f9Hytf/NL7J/y+0vf8dp5j/ + H5tx/2atcP9mp2D/VJxO/0mYQ/87mzn/Prcr/03RQ/+L4YL/jKOI/15ZXv/Gysf/zMzM/93d3R4AAAAA + AAAAAAAAAAAAAAAAcnFxv5eamv9YWFb/dI50/0SKPP8KUQj/DVwO/xR4Ev8ZgRb/FoAQ/yKCF/8thhv/ + OIoh/0WOK/9UlTn/YZ1N/26nav+Atoz/i8i1/9Lr4v/u9/D/9Pr1//b7+v+l6+7/atvm/1/Y5v8+zNv/ + OMHO/zO4wf8irKX/Q6uB/3Szdf9qq2P/V6FS/0SXQP81jzL/MI8r/0K+Mf+E7Xn/osmg/1lVWf+oran/ + 0dHR/+Dg4BsAAAAAAAAAAAAAAAAAAAAAe3t7v4qPj/9dW1n/ZpNh/yqAIv8MYQf/DXsR/xGEFP8WhBX/ + HIYY/yOGGf8tiRz/OY0j/0eSLv9WmD7/Y6BT/3Cqb/+CuJH/iMez/7Li3f/q9/L/8/v3//j8+f/O9vf/ + pu7x/4Lj7f9D0Nz/OcbQ/zS8w/8utK7/WbOF/3azcv9orGP/V6NT/0ebRP84kjb/Loov/yWMH/974nL/ + p9qm/11fXv+Vl5b/19fX/+Pj4xcAAAAAAAAAAAAAAAAAAAAAfn5+q4WKiv9ZW1j/V5FQ/x14GP8LdxD/ + DIUT/xCGFv8Uhxj/G4kb/yKKHP8sjR//OJEl/0eWMf9WnED/ZKRW/3Ctc/+AupT/i8m0/5bd4v/f9O// + 8/z3//n9+P/l+/n/ufTz/6Dr8/9P2N7/PMzU/zXCxv8turT/VbWM/3Szb/9lrWH/VaVS/0aeQ/86mTn/ + LpYu/yCEJf9guF3/sOSr/2VpZv+Li4v/1tbW5ezs7An4+PgBAAAAAAAAAAAAAAAAjIuMTIiJiv9UWFT/ + To1K/xF1Ef8Phhn/EYwZ/xKLGf8WjBr/G40b/yKPHf8skiD/OJYm/0eaMf9WoEH/YqdV/22ucf99upD/ + hcav/5Db2v/H7uv/9/v3//n9+v/0/fn/zvj1/5Ts7/9b2+D/QNDW/zjGw/83v7j/SbiU/2evZf9hqlX/ + UqRI/0SgQf85nDr/MJoy/yWQLP8jhCX/tOmv/2FmYv+Uk5P/2trbxvHx8QEAAAAAAAAAAAAAAAAAAAAA + iomLBJaTlOJNUk3/P4I+/xCBGP8NjBv/FJIb/xORHP8Wkh3/G5Me/yKVIP8smCL/OJso/0aeMv9UokD/ + YalS/2uvbf96uov/hMSp/5HY1P+87Oz/7vn3//n9+P/5/fn/4Pn5/5rt7v9u4OL/WtXW/1LOzP9Vx73/ + Wr6V/1uqUv9YpkL/S6E6/0GfOf84nTb/L5ox/yudNP8aiiD/jMKH/1VZVf+lpKP/2trafff39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAKSio39QTFD/Lnoy/xCQHf8Okhz/EpQe/xSWHf8Xlx7/HJgg/yKaIf8rnCT/ + Np4o/0ShMv9RpD7/XqlN/2iwZv92uYT/hcOk/4zSyP+r5eX/3PXy//j89f/4/Pr/5Pn5/6rt7P+R5eX/ + gt3c/3HOvf9zw5j/Z7du/1yrRv9Ppjf/Q6Iv/z2gMv80nS//MZ8x/y6hN/8mmjP/UZxT/0pHRv/DwsH3 + 3NzdKPj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAL27viJiYGT7IHkn/xCXHf8Rlx7/E5gg/xOaIP8WmiH/ + Gpsi/yGdJP8onyb/M6Eq/z6kMf9MqDv/WKxL/2WxYP9zuXr/fsGX/4bLt/+U2NX/v+no//X79v/i9fH/ + wOrp/6/m5v+b39b/iNO6/3PAi/9qtWn/YbBT/1erQ/9Kpzb/P6Mu/zehLv81oTH/NKQ4/zenQf8xokD/ + LIg0/0tLSP/f396c5ebkAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa1ugGDi4nEFHsg/xCbH/8SnCD/ + FJ0h/xOeI/8WnyT/GqAl/x+hJ/8moyj/L6Us/zmnMf9Gqjv/U69J/1+0W/9sunL/eMKN/4PJq/+R08n/ + q+Da/+D08P/f9fH/r+Xh/5zbz/+K0rX/fseZ/3K+fP9ot2T/XrJR/1OuQv9Hqjb/O6Uu/zalMv83qTf/ + PKpC/0OvTf9CrlD/LJY4/3iDedvo6OkPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACutrFq + HI8q/xOiJP8ToiP/E6Ej/xShJP8WoiX/GqIm/x6jJv8lpSj/Lacr/zapMf9CrDn/T7BF/1q2Vf9nvGr/ + csKC/3vJnf+L0bj/nNzQ/73q4v/d9ez/r+bc/5fbxP+D0an/d8eN/22+cv9jt1z/WrNM/0+vPv9DrDT/ + N6kt/zaqM/88rT//RK5G/061W/9YvGb/NKBB/5u8n3oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACbq50ZG5Qq+BGhI/8SoiT/E6Ml/xSkJ/8WpSf/GKUo/xymKP8ipyv/Kqku/zOrMf8+rjf/ + SbFA/1K2Tf9evF//a8R2/3jMkf+E0qn/kdi8/5/gzv+s59v/nODN/5Patf+H1aD/fMyI/2vBbP9duFb/ + VLNH/0mwO/8/rjX/Nawx/zuuPP9Eskr/TrhU/1q3Zf9yy37/PqdL/5TCmGAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZciyxSkJv8YqCr/HKst/xSoKv8WqSr/GKkr/xupK/8gqi3/ + Jqsv/y6tMf83sDX/QbM8/025SP9dw1r/bstx/3jOhv9805b/gNam/4nbtf+F3bn/gtyy/4XXn/9/047/ + c8x7/2PCZP9WulH/TbdF/0O0PP88sTf/PbE+/0e2Tf9Nu1f/VL9h/3PDef+P25f/RKtT/6nasVAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ0fkROtKf8mrDz/LbRA/yGuN/8brjH/ + F60s/xisK/8drCz/I60u/yqtMP8wqzP/Oa44/0q9Rf9YyVT/XMhd/2fJb/9ozXb/btSF/3XXk/9005z/ + c9Oa/3HUh/9w1Hz/aM1t/1zFW/9RwEz/Rb5B/z22PP84rDv/Oq9C/0S3Tv9Tvl3/XsJr/43PlP+Z3KP/ + R61Z/cny0SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIoeVw2pJP8wvkn/ + TsZg/z6+Uv8xukb/Jrc7/x+zM/8fsjH/IrEx/yCVNv8VfmP/F4R1/yyQTP89pkj/Iop6/yCHhP8kioj/ + Q59v/1Gucv8ri4//Lo+L/1q/bf9axWb/OY9j/yGHgf8jhW3/M5o//yiRTv8WgXr/HYVg/z2yTf9ZxWX/ + bsp5/6fgr/+O3Jr/abh06Nv74gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QZpNHRKtKP8gvzv/dNuE/17Tcf9Py2P/QMVV/zTESP8rwT//I702/xKFW/8Ke4b/FWNU/waZwv8eaUX/ + Bp7L/xNvev8dZ1v/KI90/0ChVP8Mk7r/FIGN/0u7Vv82k1f/BLDn/xB5hv8SeIP/EYKD/xxxO/8CreP/ + HnZi/0bAWP9i0G//hduR/77sxv9ozHj/ls6bmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABOrI7sVviv/cd6C/4Xflv9y3YP/ZNRz/1DRY/9AzlT/M8hG/yWVR/8Sal7/ + DX+P/wKx6f8VY1D/BZ3J/xBseP8Yc2v/N55C/z6wR/8Mk7T/FoWF/0K/Rf8jg1r/A6vh/yaLPf8nlTv/ + CnyP/xVyN/8CrOH/GWdo/z2YX/9tynz/o+Ss/7Ppu/9fwm37reOzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6mOzcJuxb8NMZI/6zrs/+e4az/h+SP/3Xehf9k2XX/ + VdNm/yqPZ/8CsOn/C4ek/xBxcf8cfTr/BJ7J/wd/mv8LfIz/KJQ4/y6jOf8JkrH/EYKA/y+uOv8ZeVX/ + A6fZ/yCWNv8foDP/B3yN/xBvNv8CrOH/Em6J/wqdzP9Vmon/t+u+/3jRhP97w4Wr4P/lAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHLFeQEjqiysDr0g/2TXb/+/8MX/ + sOq4/53mp/+L4pf/edyG/z+Vdv8Imsj/GldQ/w1+kf8XcD3/A57K/wVlbP8GYFT/BWZe/wZfSP8Cja// + A3B8/wRxY/8EVlL/Aanc/wmELf8Kjiz/A3mP/whaNv8BreL/GFZo/wmf0P9Gl6X/k9ye/2fDdOy+6sQf + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0w3Mq + JrIy9w+7Gv+M3pT/1vPa/8PwyP+w67D/nuan/4DMj/9Gk4T/Jo6b/yqPhf8ti1j/FYWF/w+Fh/8KiIL/ + CnJR/waFf/8Egn3/A4J9/wWBev8FbVf/BYJ6/wiLOf8IkDT/BYFx/w5tUf8YhY3/IYuX/zqQnv9rr4T/ + acNz/JDVmV0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdsp9URenIfMNrxf/iNiM/+X25v/Y9Nj/xe/L/7LquP+c4KX/iNWU/3vThv9nzXP/ + VMJj/0W8VP8zuUT/JbY4/xuvMP8RrSb/Cqsg/wmrHv8Hqxn/Cqsd/w2uHf8RsSL/GK8r/y+0Qf9VwGT/ + b8Z6/3HTfv9owXP2hceLXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWgRDIPlRbYCKUN/2C/Y//g8uT/3/fd/9rw2//G68n/ + tuS6/6jdq/+T1pf/gdCI/3DJeP9YwWP/SLxT/zy3Rv8tsjj/Hq4r/xSrIf8Ppxn/DKgW/w+nGv8dqyf/ + M7M9/1C/Wv9rx3L/c8t6/2W5bd9vuHg6t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjmzgNH4AdkQWQB/kooSn/ + qdOn//H48f/q9Or/2vXb/8nsx/+75Lr/p9qo/5XWmf+Byob/b8F0/125Yv9Os1L/PK5C/y6oM/8koif/ + F6Ad/xieH/8tpDP/ULRU/2K7Zf9pvW37XbBkm1ieXxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAxxDTIGgQi0CYIJ/D2ZPP+iyZ//5/Dl//Hy8f/f7+D/y+XN/77ewP+n1qr/lc2Z/4nHiv9zu3L/ + Y7Nk/1OtVv81nzf/JpQp/y+WNP9Fp03/U6xX/V6oYLtcm185Z6xrAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQZxABB2cGMQdrBpoFcAXvHX4e/1KbU/+TvpD/vdS4/83iyf/N48r/ + vtu7/6fQov+Fu4D/X6db/zaNNP8rhSf/M44u/0SUP/JRlkqgTJBJOFCOUQEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUIB2MDRgZnAokBYgC/ + BGMD5ghmCPcOag79EWwR/w9rDv0NbAn3DnAK6Bh3EsImex6NL4EtTCVzLQoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFV4UAgxYDBADVQMbBVgEHwhYBBsUXg8QHmcaAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD//4AB//8AAP/8AAA//wAA//AAAA//AAD/4AAA + B/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPAAAAAADwAA + 8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAAHAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAA + AAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAQAAwAAAAAADAADAAAAAAAMAAOAAAAAAAwAA + 4AAAAAAHAADgAAAAAA8AAPAAAAAAHwAA8AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAA + AD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/wAAAAH/AAD/gAAAAf8AAP/AAAAH/wAA + //AAAA//AAD/+AAAP/8AAP//AAH//wAA///wH///AAD///////8AACgAAAAoAAAAUAAAAAEAIAAAAAAA + ABkAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRQQxMTEfMDAwOSkpKUYoKChENzc3NkBAQBpYWFgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwAjIyMhKysrdUBAQLxLS0vwV1dX/mlpaf9zc3P/ + dXV1/2lpaf9eXl79U1NT6jk5ObIoKChoPDw8F1dXVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + KSkpACUlJTw/Pz+0V1dX/HNzc/+Ghob/mJiY/62trf+8vLz/yMjI/8nJyf/Jycn/xMTE/7u7u/+wsLD/ + kJCQ/11dXfcyMjKjKioqKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiG0RERKtaWlr9dXV1/5ycnP/Jycn/ + 6Ojo//f39//9/f3//v7+//39/f/+/v7//v7+//z8/P/6+vr/8vLy/+Hh4f/IyMj/q6ur/2ZmZvktLS2U + LCwsDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjIyMAOzs7T1FRUexvb2//oKCg/9nZ2f/v7+//6Ojo/+Hh4f/e3t7/39/f/+Xl5f/q6ur/ + 8vLy//n5+f/6+vr//v7+//v7+//8/Pz/+/v7/+7u7v/Ly8v/oqKi/0xMTN0oKCg2AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjIBQ0NDc1xcXPuEhIT/ + ysrK/9vb2//IyMj/vb29/8TExP/S0tL/2NjY/9XV1f/T09P/0NDQ/9HR0f/W1tb/4uLi/+np6f/w8PD/ + /Pz8//39/f/6+vr/+fn5/+bm5v++vr7/Z2dn9CQkJFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcARUVFeF1dXf6dnZ3/zMzM/7a1tf+ura3/ycnJ/9DQ0P+xsrL/ + iouM/2Rmaf9MUFT/P0RJ/zpARP87Qkb/TlBS/19fYP9xdHf/kpaZ/7/Bwv/l5eT/8/Pz//z8/P/39/f/ + 7+/v/8vLy/9zc3P5KCgoVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/XV1dXf2jo6P/srKy/6Ojo//FxcX/v7+//4CAf/9DQ0P/R0pK/3R2df+Ulpb/qbKx/7W/vv++yMf/ + ucHC/7G5uv+co6P/e4eH/0pZXP8vO0H/YWRn/6enqP/e3t7/8/Pz//b29v/w8PD/zs7O/25ubvY5OTk8 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3KlhYWPSYmJj/oaGh/6qqq//ExMT/ + e3t6/z8+Pf9ucWz/r7Ww/9DV0f/O1tL/ydvQ/8Hayf+82cT/uNjB/7XYxf+528j/w93P/8rZ0P/O19H/ + wMvH/42SlP9QT0//XVxc/7SztP/r6+v/9vb2/+vr6//IyMj/X19f42lpaRMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPj4+BUtLS8h9fX3/lJSU/7W2tP+oqaf/T01N/2tqa/+3urX/vMe//6vEqf+YwJX/ + g7WD/2+od/9dn3H/V6Jz/1Gjdf86pHX/Oap2/0iyd/9ev4P/esqS/5nRp/+00r7/x9PH/5SRkv9GSET/ + g4KD/+Pg3v/09PT/4+Pj/7Gxsf9lZWWkv7+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCQmJnZ2f/ + jo6O/7S0tP+TkZT/TU5P/5OZlf+tuq3/j7SN/3Ojaf9TfU3/RG1D/0Z5T/9RkV7/VKVu/1WveP9XtoH/ + M7KA/yCwfP8erXH/G6dj/xyoWP8xsVv/XMV2/5LTmf+yzrD/tLmx/1xaW/9xb23/1tbW//Dw8P/W1tb/ + kJCQ/aSkpD0AAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAZWVlbeg4OD/6mqqP+QkI//VlVU/6Wsnv+TsJX/ + bqBl/z5oN/8rTSX/OWwt/0uOPv9Xp1r/Ybhy/2rAiv9tx5f/cc2g/0DKn/8lx5T/KMqO/zHMjP8lxHj/ + KL1t/yq0Xv9Kv13/etBz/5bRkf+xyLP/aWhm/3Fycf/X19f/6ejo/7+/v/+enp679PT0AQAAAAAAAAAA + AAAAAAAAAABERERVbGxs/5ybnP+am5v/XFxd/5+moP+CpoP/UYhF/yBAHP8gUhv/LXol/0GONf9PlkX/ + YZ5j/3Otif94uqH/ecOy/3bIuv9Pw7v/OcG5/znFsP9My6//P8ya/zvRiP8/0Xb/Scdc/1m+Tv9hy1n/ + htGA/63Dqv9hYmD/hISE/+bm5v/Z2dn/q6ur/eTk5BsAAAAAAAAAAAAAAAAAAAAATU1NtIKCgv+oqKj/ + Z2Zn/4iSif99pnr/P3c1/xIqEP8ZVRL/Kncc/zZ4Kf9EgDf/XZlQ/3awbf+Ky53/mNa7/5fayf+R287/ + ddfT/0fMy/9Bycb/Scm+/0vGtP88u5P/Q714/1PLaP9m0lf/U8NF/1DKR/9903j/osCf/1dZV/+ho6L/ + 5+fn/7m5uf/Q0NBSAAAAAAAAAAAAAAAAT09PDVlZWfaampr/fX19/3R2c/+IpoX/RIE5/w4iCv8VVw3/ + HWsQ/yhwHP9CizT/VJxF/2CjUP9sol7/hLmX/6PTxv+x3tf/suHf/5Da4/9MxtX/Nb7O/zi6yP8psrX/ + G6mV/yKjcv8vqF3/Wb5d/1zOTP9JwT3/T85E/4TVfv+KmIn/aGdn/9PT0//Kysr/y8vLigAAAAAAAAAA + AAAAAEdHRyBqamr/m5ub/19fX/+KnYf/To5L/xExC/8LRgf/FmQK/yJzGP80hCP/P4wu/0+SO/9Yk0D/ + ap1X/3yuf/+23c//4e/j/9/y7f+p5Or/Y9Lh/0LG2f84vc3/KrC//xqhov8VlHj/Go9X/0CbU/9drlH/ + TcNA/0G+L/9b21L/m9KX/2ZpZf+bm5v/1tbW/8vLy5IAAAAAAAAAAAAAAABKSkogfn5//4KDgv9ucW// + bJlm/yJeHv8HNgP/EWcM/xp4Ev8lfxf/Moci/z+JKf9NjTH/XpVC/2+hYP+BtYz/v+HV/+rz6f/v+PL/ + 0PP0/27X6f9Z0N//Ucra/zG6x/8nrrT/GJ+I/zObaP9jpWD/VZtO/0yeRP8/tDf/RMk0/4Lgev+HmIX/ + b25v/9na2f/Ly8uZAAAAAAAAAAAAAAAAXFxcIIeIiv9tbmr/c4V0/0WLPf8JRgn/DmQM/xd8E/8WgA// + I4IX/zGHHv8+iyT/T5Ey/1+bSf9vqGv/g7uV/7Hc0P/s9ez/9Pn0/+z6+f963uf/ZNnl/0vQ3v83wc3/ + MLa9/yCmk/9arnr/bq1n/1ihU/9Dlj//NZEx/zarKv926Gf/m8WY/1tYXP/Iy8n/0dHRlwAAAAAAAAAA + AAAAAGtrayCMj5D/Yl9e/2iNZf8nfCD/DmUJ/w6AE/8VhBX/G4UX/ySGGf8wih7/QI8o/1GWOP9in1D/ + cqty/4W9mv+Y08n/3/Tu//P79v/1/Pr/ufLz/5Tp8f9Q1N//OcbS/zO7wf80sqH/b7R5/22uaP9ZpFX/ + RZlC/zSQM/8lhiT/Ys1V/6Pbov9YWln/u7u7/9fX15MAAAAAAAAAAAAAAAB3d3cQj5GS9lhaWf9bjFT/ + GHYV/wx+Ev8OhxX/E4cX/xuJGv8jixz/L48g/z+UKv9Smjv/YqNU/3Kvdv+Dvpz/j9TP/8Ls6f/0+/f/ + +P34/9v5+P+s8PL/ad7l/z3O1v80wsT/NLir/2m0ef9rsGb/V6ZT/0WeQv82mDX/KJAr/zmWOv+u56n/ + X2Je/7Gxsv/Y2Nht+Pj4AgAAAAAAAAAAAAAAAJyZnKZXWlj/T4ZL/w95E/8QjBv/Eo4a/xWOG/8ajxz/ + I5Ee/y+VIv9AmSz/UZ88/2GnU/9ur3P/f72Y/4rQxP+r5+X/9fr2//n9+v/x/fn/tPPz/2zh5P9J0tf/ + P8fE/z/AtP9Ys3b/YapT/1GkRf9CoD//Nps3/yuXL/8chSL/l9OT/1hcWP+8vLz/39/fQAAAAAAAAAAA + AAAAAAAAAACup6pAYGBg/zx5Pf8Rih3/DY8a/xSTHP8WlB3/G5Ue/yOXIP8vmiT/Pp4t/0+iO/9fqE7/ + bLBt/3y9kP+Jy7n/qOTl/+H29P/5/ff/9/z6/8Pz8/+G5uf/btvb/2bQyf9qx6r/YLJl/1inQP9IoTP/ + Pp81/zKbMP8vnzT/JZkv/2GnYP9SUlD/zc3N4uXl5QkAAAAAAAAAAAAAAAAAAAAAtLSyAnRuddgqcS// + D5Ud/xGXHv8TmB//FZkg/xqaIf8inCP/LJ8m/zqiLf9KpTj/WapK/2ixZP93u4X/hcar/5TX0v/C6+r/ + 9vv2/+L18//C7vD/oeTi/4/azf9wwZL/ZrRm/12tS/9PqDr/QaQu/zigL/80oDH/NKQ5/zCiPv8wjjn/ + W1hX/9/f3YD4+PgBAAAAAAAAAAAAAAAAAAAAAAAAAACWmJuBG3Ql/xCbH/8SnCD/E50i/xWeI/8ZnyX/ + IKEn/ymjKf81pi7/Q6k3/1KuSP9htF7/cLx6/37Fnf+N0ML/qd/a/+X28v/O8Oz/pN/Y/47Vv/9/yJ3/ + cb16/2a1Xv9ZsEn/S6s5/z2lL/83pTL/N6g5/z+rRv9Crk//L5k7/3yEfMrp6+kHAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAwsTFKTCUPP0ToiT/EqEj/xOhJP8WoiX/GaMm/x+jJ/8npin/Magu/z6sNv9NsEP/ + W7ZX/2m+cP93xo7/hc6v/5nazP/B6+L/zfDp/6Lgz/+J1bH/eciQ/2y9b/9gtlb/U7FE/0atN/83qi7/ + N6s1/0CuQ/9JsVD/WLxn/zulR/+avZ1iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTBwwEeli3P + EaEj/xSkJv8VpSf/FaYo/ximKf8cpyn/JKks/y2rL/85rjT/RrE+/1G3TP9gv2P/ccmA/3/Qnv+L1rT/ + md/I/5jizv+R3Ln/iNah/3zOh/9nwGj/WbdQ/0yyQP9Brzf/OK40/z+xQ/9Kt1L/V7lg/3fMgv9IrlX/ + mMeeTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpkekRapKf8grDP/Ha0x/xeqLf8Xqyv/ + Gqsr/yCsLf8orS//Ma8z/zyyOf9PvUn/Yctd/3HPdf9104X/d9iV/4Dbpv9+3a7/fNic/3rUif9vznb/ + YMVe/1G+S/9Fuj//PLM5/z6zQv9IuVH/Ub1d/2fEc/+b3KH/S69b/7bmvzQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA+THlcOrCb/PLtT/zu9T/8ut0P/IbQ2/xywL/8fsC//JKsw/yKKOv8lhkv/ + O6dE/0KsUP82kGH/O5Fp/1Csb/9buHz/RZiE/1Kyev9l0HH/T6tf/zeRX/83mEn/N6s+/yaJUP8mjU7/ + QbVO/13DZ/9/0Ir/qeKy/1u2afTf/OUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kkEd + D64m/0LMWv9m03f/Uctk/z/DU/8xwkX/J786/x2hNP8Jg5b/EXJv/wyOpv8bcFj/BaLS/xlwbv8kjXz/ + O5VY/wWp3/8yjVv/Rq5U/wufxv8PhJb/DYSc/x5+R/8Ika7/GIWC/0jAWf9o0XT/p+Gv/4zfmf+Axom0 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGwIrsmwTv/ieSX/3zfj/9p1nb/ + UtJl/z/OU/8wt0b/FHRk/wuJnv8Ep9f/FGNS/wWi0v8TeHz/MpZF/ziiRv8Fo9T/MJRG/zGXQ/8Eptj/ + KJU8/xuFU/8Qf2X/B5Cl/xN+kP88mmz/e9GI/73sw/9ryHf/ldmeQwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAmpTE3D7gd/WLXcf+s6Lb/l+eg/4Dgjv9r2nv/TLZk/wihz/8Rcnz/ + FG5c/xR5UP8Dncr/CmVf/xl+Pf8dhzj/A6LT/xl9Ov8YeT//AqPT/xmbMf8RiEr/CXxl/wWPpP8SbYj/ + CpzN/3avmP+U3p3/d8WCvdP02QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + fsuAAC2vNKwTvCL/kueb/8Xtyv+u7LX/mOaf/3rSiv8rk5z/FHSM/xSDkf8VdWP/BJW+/wVvfv8Eb3v/ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHyU9PT2T + VVVV6m5ubv+JiYn/nZ2d/6urq/+wsLD/sLCw/6Ojo/+AgID/YWFh4jQ0NIYqKiobAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIhFGRkaY + XV1d+4aGhv+2trb/29vb//Dw8P/5+fn//Pz8//z8/P/6+vr/9fX1/+vr6//V1dX/tbW1/3FxcfY2NjaF + LCwsCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT05 + U1NT4n9/f//Dw8P/5+fn/+Hh4f/b29v/29vb/+Dg4P/o6Oj/8PDw//f39//9/f3//Pz8//z8/P/5+fn/ + 39/f/7CwsP9ZWVnUJCQkJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCTl5eXveioqL/z8/P/76+vv++vr7/zc3N/8vMzP+2t7f/paeo/5mbnP+cnp//q6ur/7/AwP/d3d3/ + 8fHx//n5+f/8/Pz/9PT0/8/Pz/9wcHDtJiYmNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEFBQUFiYmL4rq6u/7Cvr/+3trb/wcHB/5WVlP9ZW1v/VFZW/2ptb/90fn//foeJ/3qChP95fX7/ + XmZn/z5MUP9ka27/r7Cw/+jo5//29vb/9fX1/9nZ2f91dXXuMzMzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcbXFxc6qGhof+fn5//v7+//4aFhf9QT07/gYWA/7zBvf/R19T/x9jN/8HYyP+92MX/ + utfJ/77ZzP/L29L/yNHM/56pqP9qbW//XVxc/7W1tf/v7+//8vLy/9TU1P9qamrZaWlpDAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAE5OTrKFhYX/oKCg/66vrf9YV1b/hIWD/7rEu/+kv6T/kLqL/3Sld/9gnHD/ + VJ5x/1Cjdv83pXX/Nqp0/0axdf9ow4b/j9Cf/7LTuv+0t7L/Xl9c/4OAgv/n5uT/7Ozs/76+vv9tbW2S + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0NEbW1t/5ubm/+hoKH/W1tc/6Crov+QsJD/aJVd/0RqPf9AbDz/ + To5W/1yqbP9euID/YsGL/zS9i/8hu4H/JLl2/xuwZP8or1z/UcBt/5HTkP+yy6//en56/3Jxcf/h4eH/ + 4eHh/56envu2trYoAAAAAAAAAAAAAAAAAAAAAFZWVr2Li4z/o6Si/2RiY/+frJz/caBq/zdfL/8kUB// + N34s/02YQP9gqWb/b7iK/3LBov90ya//QsWv/zHGqf8/zab/OM6Q/zTNfv81w2X/Wb9V/3DPaf+ezZz/ + gYV//3t8e//m5eb/yMjI/62trZgAAAAAAAAAAAAAAABCQkIiaWlp/qOjo/9oZ2n/k6OQ/12TWf8dPhj/ + GlUT/yx4IP8+fzL/V5NL/3StcP+Ny6f/ldbC/4/ZzP9q08//QcjH/0fIwP9KxrL/Pr+P/0XEcP9k0V3/ + VMNI/13PU/+WzpX/bHNr/5+hoP/g4OD/ubm50vLy8gIAAAAAAAAAAEZGRm6FhYX/g4OD/3+Ff/9pmmD/ + FzgT/xVSDP8fbBL/NX0n/0yWPf9eoE3/bqNi/5HDq/+y3dL/ueTg/4nY4f9CxNT/NbvL/yyzuv8appH/ + I6Fn/0OvW/9dyE//ScM8/13TUv+XwpT/ZWRj/9DQ0P/Hx8f/7+/vCQAAAAAAAAAAWVlZf5eXl/9kZGT/ + ep52/yRYIP8KPwX/FmkN/yZ6Gf82hyT/So41/1iSPv9uoF7/kcGj/9rt4f/n9O//q+bt/1rQ4f9Ixdf/ + LrXD/x2kpP8Xk27/O5hY/1qjUf9Mt0D/P8Ix/3vgc/99inv/m5ub/8/Pz//f398SAAAAAAAAAABra2t/ + iYqJ/213b/9Ki0P/CT4I/xBtDP8XfhH/JoMZ/zWIIv9IjSz/XZhD/3KobP+Oxan/4vDm//P48//W9PX/ + X9bk/13U4/83wc3/K7K3/yOhff9qrm3/WqBU/0SXP/85pi7/XNdP/5O9j/9wb3H/1dbV/93d3RQAAAAA + AAAAAHl4eX95enn/aYRn/yJ1Hf8ObA7/FIIV/xmEFv8lhhn/Nosg/0qSMf9gnUz/dK13/4fDqv/K6uT/ + 8vr2/+36+f+e6+//Z9vm/znH0/8wub7/SLGP/3Oxb/9cpVf/Qpc//y+KL/9Esjf/nd2c/1xfXf/V1dX/ + 4+PjEAAAAAAAAAAAgYGBY3B0dP9chVb/FXYU/w6FFf8Rhxf/GYka/ySMHf81kSP/S5g0/2CiUP90sXv/ + h8Sr/6Pi4v/z+vb/9v34/8r39f+J5+3/PtDX/zPBwf9Ft5n/brFq/1mnVP9DnkD/MZcx/yKGJv+g35z/ + XmFe/9LS0+rt7e0FAAAAAAAAAACMi4wNdnV28kt6Sf8PgRj/EZAb/xSQG/8akR3/JZQg/zWZJv9Knjb/ + XqZO/3Cxdv+CwqP/mN3a/+j39f/5/fn/5fr4/4np6v9Y1tr/TcrG/1G/of9eqlL/T6M//0CfO/8xmzP/ + JpUu/2y0av9dYFz/2drbtfb29gAAAAAAAAAAAAAAAACAeoCZNWo4/w+SHf8RlR7/FJce/xqYIP8kmyL/ + Mp4n/0ajNP9aqEn/bLJs/3/Amf+R1cz/xu7s//f89v/k+Pj/p+vr/43f3P9yx6b/Z7hu/1eqQv9FozD/ + Op8w/zGfMf8voTn/OpZC/25sa//b3NtY+Pj4AAAAAAAAAAAAAAAAALSwuD0qcDP/EZof/xOcIP8UnSP/ + GZ4k/yGgJv8uoyr/Pqcz/1GtRv9ktWL/dr+I/4fMtv+m3tn/6vjz/7fo4/+a2s3/gcul/3C8eP9is1b/ + Uaw//z+mMP83pTL/Oag9/0CtS/8xmj3/f4Z/uNrd2wEAAAAAAAAAAAAAAAAAAAAAv7/FAT+ZSuESoiT/ + EqEj/xSiJf8Yoyb/H6Qn/yqnK/84qzP/Sq9B/1u3WP9twXn/fsyh/5bYxv/D7OL/tunf/5LZu/97y5P/ + ar1r/1u0Tv9Lrjv/Oaov/zmsOP9Er0f/VLhh/0WsUf+YvZxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FpcmkhSkJv8ZqCr/FKcp/xioKv8cqSv/Jasu/zGuMv9Bsjv/UrpN/2jHbP96z43/g9ao/4/dvv+H3bv/ + h9eg/3nOhP9iv2H/UbZI/0KyOv87sDn/RrVM/1G8XP93yX7/WLlm/6LSqTgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAOmR5XFKws/zW3Sf8nsjz/HLAw/xquLP8hri7/KaYy/zGcOP9Ju0f/ULdV/1ewZv9iwXf/ + bMiK/2O8jf9s0X7/YsZr/02uVP9DtkL/N6Y9/zKeQP9GuFL/X8Nq/5/apv9du2z7y/PSEgAAAAAAAAAA + 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 + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmSetupStatusDisplay.Designer.cs b/AllPurposeAutoSetup/frmSetupStatusDisplay.Designer.cs new file mode 100644 index 0000000..211f3cf --- /dev/null +++ b/AllPurposeAutoSetup/frmSetupStatusDisplay.Designer.cs @@ -0,0 +1,81 @@ +namespace All_Purpose_Auto_Setup +{ + partial class frmSetupStatusDisplay + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSetupStatusDisplay)); + this.statusRtxtbox = new System.Windows.Forms.RichTextBox(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // statusRtxtbox + // + this.statusRtxtbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.statusRtxtbox.Cursor = System.Windows.Forms.Cursors.IBeam; + this.statusRtxtbox.HideSelection = false; + this.statusRtxtbox.Location = new System.Drawing.Point(-1, 0); + this.statusRtxtbox.Margin = new System.Windows.Forms.Padding(2); + this.statusRtxtbox.Name = "statusRtxtbox"; + this.statusRtxtbox.Size = new System.Drawing.Size(726, 554); + this.statusRtxtbox.TabIndex = 0; + this.statusRtxtbox.Text = ""; + // + // btnCancel + // + this.btnCancel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnCancel.Location = new System.Drawing.Point(322, 558); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 33); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "CANCEL"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // frmSetupStatusDisplay + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(725, 596); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.statusRtxtbox); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "frmSetupStatusDisplay"; + this.Text = "Setup Status"; + this.Shown += new System.EventHandler(this.frmSetupStatusDisplay_Shown); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox statusRtxtbox; + private System.Windows.Forms.Button btnCancel; + } +} \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmSetupStatusDisplay.cs b/AllPurposeAutoSetup/frmSetupStatusDisplay.cs new file mode 100644 index 0000000..ba8ec58 --- /dev/null +++ b/AllPurposeAutoSetup/frmSetupStatusDisplay.cs @@ -0,0 +1,753 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Security.AccessControl; +using System.Management; +using System.Security.Principal; +using System.Runtime.InteropServices; +using Microsoft.Win32; + +using CommonLib.Windows.Forms; +using CommonLib.IO; +using CommonLib.Misc; +using CommonLib.Windows.Misc; + +namespace All_Purpose_Auto_Setup +{ + public partial class frmSetupStatusDisplay : ChildForm + { + enum SectionName { Setup_Step_Manager }; + private delegate bool SetupStepDelegate(string iniSectionName); + private delegate string CustomMessageBoxDelegate(MessageBoxCustom.PopUpMsgType msgType, List customButtons, string msg, string caption, int timeOut_ms); + private AutoResetEvent _resetEvent = new AutoResetEvent(false); + + private frmMain frmParent = null; + + public bool restartApplicationRequested = false; + + public bool rebootRequested = false; + + public bool setupProcessNeedRestartToContinue = false; + + BackgroundWorker bgwSetup; + + string pathAndNameOfConfigFile = ""; + string pathAndNameOfSetupLog = @"setupLog.txt"; + StreamWriter swSetupLog; + + ConfigFileManager configFileMgr; + WindowFeaturesManager windowFeaturesMgr; + DotNet2Pt0FrameworkManager dotNet2Pt0FrameworkMgr; + FoldersManager gutsFoldersMgr; + WindowsShortcutManager winShortcutMgr; + SetupMiscellaneous gutsSetupMisc; + SoftwareInstallManager softwareInstallMgr; + GutsSoftwareBuildAssistant gutsBuildAssistant; + FilePackageTransferManager fileTransferManager; + GutsConfigFileManager gutsConfigFileManager; + FileFolderRemovalManager fileSystemRemovalManager; + RunApplicationsManager runAppManager; + WindowsRegistryManager winRegistryManager; + NetworkAdapterManager networkCardManager; + + Dictionary richTextBoxLineNumberDict = new Dictionary(); + + List> configInfo = new List>(); + List configInfoFormatted = new List(); + + public frmSetupStatusDisplay(frmMain d_parentForm) + { + InitializeComponent(); + + this.frmParent = d_parentForm; + this.FormClosing += Form_FormClosing; + + statusRtxtbox.WordWrap = false; + } + + void Form_FormClosing(object sender, FormClosingEventArgs e) + { + if (swSetupLog != null) + swSetupLog.Close(); + } + + private void frmSetupStatusDisplay_Shown(object sender, EventArgs e) + { + swSetupLog = null; + + pathAndNameOfConfigFile = frmParent.getConfigFile(); + + // process the configuration file + configFileMgr = new ConfigFileManager(this, pathAndNameOfConfigFile); + + pathAndNameOfSetupLog = Path.Combine(Application.StartupPath,pathAndNameOfSetupLog); + + pathAndNameOfSetupLog = FileManip.GenerateUniqueFileName(Path.GetDirectoryName(pathAndNameOfSetupLog), + Path.GetFileNameWithoutExtension(pathAndNameOfSetupLog), Path.GetExtension(pathAndNameOfSetupLog)); + + try + { + swSetupLog = new StreamWriter(pathAndNameOfSetupLog); + } + catch (Exception) + { + try + { + pathAndNameOfSetupLog = PathManip.AddTrailingSlashToPath(PathManip.GetUserDesktopPath()) + Path.GetFileName(pathAndNameOfSetupLog); + + swSetupLog = new StreamWriter(pathAndNameOfSetupLog); + } + catch (Exception) + { + } + } + + bgwSetup = new BackgroundWorker(); + bgwSetup.WorkerSupportsCancellation = true; + bgwSetup.DoWork += new DoWorkEventHandler(bgwSetup_DoWork); + bgwSetup.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwSetup_RunWorkerCompleted); + + bgwSetup.RunWorkerAsync(); + } + + private void restartApplicationEventHandler() + { + restartApplicationRequested = true; + } + + private void rebootComputerEventHandler() + { + rebootRequested = true; + } + + private void setupProcessNeedRestartToContinueEventHandler() + { + setupProcessNeedRestartToContinue = true; + } + + private void updateStatusDisplayAndLogEventHandler(string displayMsg, string logMsg, List textPropList) + { + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + if (swSetupLog != null && logMsg.Length > 0) + { + string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase); + + swSetupLog.Write(str); + } + } + + public int updateStatusDisplayAndLog(string displayMsg, string logMsg, List textPropList) + { + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + if (swSetupLog != null && logMsg.Length > 0) + { + string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase); + + swSetupLog.Write(str); + } + + return FormControlsManipThreadSafe.getRichTextBoxLastLineIndex(statusRtxtbox); + } + + public void writeToLog(string logMsg) + { + if (swSetupLog != null && logMsg.Length > 0) + { + string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase); + + swSetupLog.Write(str); + } + } + + public void removeStatusDisplayLine(int lineIndex, bool deleteLine) + { + FormControlsManipThreadSafe.RichTextBoxEraseLine(statusRtxtbox, lineIndex, deleteLine); + } + + private void updateStatusDisplayAtLineEventHandler(string displayMsg, int lineIndex, List textPropList) + { + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWordsAtLine(statusRtxtbox, lineIndex, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + } + + public string displayMessageBox(MessageBoxCustom.PopUpMsgType msgType, List customButtons, string msg, string caption, int timeOut_ms) + { + if (InvokeRequired) + { + CustomMessageBoxDelegate del = new CustomMessageBoxDelegate(displayMessageBox); + return (string)this.Invoke(del, msgType, customButtons, msg, caption, timeOut_ms); + } + else + { + return MessageBoxCustom.Show(this, msgType, customButtons, msg, caption, timeOut_ms); + } + } + + private void bgwSetup_DoWork(object sender, DoWorkEventArgs bgwEvent) + { + string msg = "", errMsg = ""; + bool setupSuccessful = false; + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + BackgroundWorker bgw = sender as BackgroundWorker; + + setupSuccessful = displayAndLogHeaderInfo(); + + ConfigFileManager.parseConfigInfo(SectionName.Setup_Step_Manager.ToString(), configInfo); + + if (setupSuccessful) + setupSuccessful = verifySetupStepsInfo(); + + //if (setupSuccessful) + // setupSuccessful = configFileMgr.verifyConfigurationInfo(); + + int currentSetupStep = 0; + if (setupSuccessful) + { + // manages windows features + windowFeaturesMgr = new WindowFeaturesManager(this); + // add an event handler to an event raised by windowFeaturesMgr + windowFeaturesMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + windowFeaturesMgr.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler; + + // manages .NET Framework 2.0 Settings + dotNet2Pt0FrameworkMgr = new DotNet2Pt0FrameworkManager(this); + // add an event handler to an event raised by dotNet2Pt0FrameworkMgr + dotNet2Pt0FrameworkMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + // manages file package transfer + fileTransferManager = new FilePackageTransferManager(this); + // add an event handler to an event raised by FilePackageTransferManager + fileTransferManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + fileTransferManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler; + + // manages removal of files and folders + fileSystemRemovalManager = new FileFolderRemovalManager(this); + // add an event handler to an event raised by FileFolderRemovalManager + fileSystemRemovalManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + fileSystemRemovalManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler; + + // manages folders + gutsFoldersMgr = new FoldersManager(this); + // add an event handler to an event raised by gutsFoldersMgr + gutsFoldersMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + // manages windows shortcut + winShortcutMgr = new WindowsShortcutManager(this); + // add an event handler to an event raised by WindowsShortcutManager + winShortcutMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + // process GUTS config file + gutsConfigFileManager = new GutsConfigFileManager(this); + // add an event handler to an event raised by GutsConfigFileManager + gutsConfigFileManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + // setup miscellaneous items + gutsSetupMisc = new SetupMiscellaneous(this); + // add an event handler to an event raised by SetupMiscellaneous + gutsSetupMisc.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + // manages software installs + softwareInstallMgr = new SoftwareInstallManager(this); + // add an event handler to an event raised by softwareInstallMgr + softwareInstallMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + softwareInstallMgr.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler; + softwareInstallMgr.RebootComputer += rebootComputerEventHandler; + softwareInstallMgr.SetupProcessNeedRestartToProceed += setupProcessNeedRestartToContinueEventHandler; + + // manages running applications + runAppManager = new RunApplicationsManager(this); + // add an event handler to an event raised by RunApplicationsManager + runAppManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + runAppManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler; + + // assist in building GUTS + gutsBuildAssistant = new GutsSoftwareBuildAssistant(this); + // add an event handler to an event raised by GutsSoftwareBuildAssistant + gutsBuildAssistant.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + gutsBuildAssistant.RestartApplication += restartApplicationEventHandler; + + winRegistryManager = new WindowsRegistryManager(this); + winRegistryManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + networkCardManager = new NetworkAdapterManager(this); + networkCardManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler; + + Dictionary setupStepCalls = new Dictionary() + { { Common.enum_SETUP_STEPS.ASSIST_BUILDING_GUTS_APP, gutsBuildAssistant.gutsPrebuildCheck}, + { Common.enum_SETUP_STEPS.CREATE_DIRECTORIES, gutsFoldersMgr.createDirectories}, + { Common.enum_SETUP_STEPS.CREATE_WINDOWS_SHORTCUTS, winShortcutMgr.creatShortcuts}, + { Common.enum_SETUP_STEPS.CREATE_NETWORK_SHARES, gutsFoldersMgr.shareFolders}, + { Common.enum_SETUP_STEPS.ENABLE_INTERNET_INFORMATION_SERVICES, windowFeaturesMgr.enableWindowsOptionalFeatures}, + { Common.enum_SETUP_STEPS.INSTALL_SOFTWARE_PACKAGES, softwareInstallMgr.manageRequiredSoftwarePackages}, + { Common.enum_SETUP_STEPS.PROCESS_GUTS_CONFIG_FILE, gutsConfigFileManager.processGutsConfigFile}, + { Common.enum_SETUP_STEPS.SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS, dotNet2Pt0FrameworkMgr.adjustZoneSecurityForDotNetFrameWork2Pt0}, + { Common.enum_SETUP_STEPS.SET_ENVIRONMENT_VARIABLES, gutsSetupMisc.setEnvironmentVariables}, + { Common.enum_SETUP_STEPS.TRANSFER_FILE_PACKAGES, fileTransferManager.manageFilePackageTransfer}, + { Common.enum_SETUP_STEPS.REMOVE_FILES_FOLDERS, fileSystemRemovalManager.removeFilesFolders}, + { Common.enum_SETUP_STEPS.RUN_APPLICATIONS, runAppManager.runApplications}, + { Common.enum_SETUP_STEPS.MODIFY_WINDOWS_REGISTRY, winRegistryManager.ModifyWindowsRegistry}, + { Common.enum_SETUP_STEPS.CONFIGURE_NETWORK_ADAPTERS, networkCardManager.configureNetworkAdapters}, + { Common.enum_SETUP_STEPS.PROMPT_USER, gutsSetupMisc.promptUser}, + }; + + foreach (string[] entry in configInfoFormatted) + { + currentSetupStep++; + Common.enum_SETUP_STEPS actualSetupstep = Common.enum_SETUP_STEPS.NOT_VALID_STEP; + + // the application had to be restart or rebooted in the middle of execution, we want to continue + // at the point where it left off + if ((int)Properties.Settings.Default["CurrentSetupStep"] > 0 && + currentSetupStep < (int)Properties.Settings.Default["CurrentSetupStep"]) + continue; + + if ( getActualSetupStep(entry[0], ref actualSetupstep) ) + { + setupSuccessful = setupStepCalls[actualSetupstep].Invoke(entry[1]); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = "\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->"; + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + writeToLog(msg); + } + + if (!setupSuccessful || applicationNeedsToBeRestarted()) + break; + } + } + + // only genereate summary if the entire setup process is complete or if an actual failure occur + if (!applicationNeedsToBeRestarted()) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 3; + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n\nOVERALL SETUP STATUS: "; + + if (!setupSuccessful) + { + msg += " - FAILED."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE); + + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED."); + textProp.wordCount = 10; + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + Properties.Settings.Default["CurrentSetupStep"] = currentSetupStep; + } + else + { + msg += " - SUCCESS."; + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + + textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS."); + textProp.wordCount = 10; + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + Properties.Settings.Default["CurrentSetupStep"] = -1; + + string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; + // disable windows auto login + WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "AutoAdminLogon", Microsoft.Win32.RegistryValueKind.String, "0", ref errMsg); + // delete user password + WindowsRegistry.DeleteRegistryValueName(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "DefaultPassword", ref errMsg); + } + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + msg = Regex.Replace(msg, @"\r", "", RegexOptions.IgnoreCase); + msg = Regex.Replace(msg, @"\n", "\r\n", RegexOptions.IgnoreCase); + swSetupLog.Write(msg); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 3; + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\nSETUP COMPLETED."; + + FormControlsManipThreadSafe.ModifyControlText(btnCancel, "CLOSE"); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + msg = Regex.Replace(msg, @"\r", "", RegexOptions.IgnoreCase); + msg = Regex.Replace(msg, @"\n", "\r\n", RegexOptions.IgnoreCase); + swSetupLog.Write(msg); + + DateTime dat1 = DateTime.Now; + msg = StringManip.TextAlign("\nDate and Time: ", 25, StringManip.enumTextHorizontalAlignment.Left) + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + writeToLog(msg); + } + else + { + if (restartApplicationRequested) + { + if (setupSuccessful) + { + if (!ConfigFileManager.ms_configGlobalSettings.suppressAllPrompts.alternateValue) + displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, "The application needs to be restarted.\n\n.Press OK to restart the application now.", "Info", -1); + } + else + restartApplicationRequested = false; + } + + Properties.Settings.Default["CurrentSetupStep"] = currentSetupStep; + } + + if (rebootRequested) + { + if (setupSuccessful) + { + if (!ConfigFileManager.ms_configGlobalSettings.suppressAllPrompts.alternateValue) + { + msg = displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "Reboot is required for the previous changes to take effect.\n\nWould you like reboot now?", "Info", -1); + + if (String.Equals(msg, "no", StringComparison.OrdinalIgnoreCase)) + { + rebootRequested = false; + } + } + } + else + rebootRequested = false; + } + } + + private void bgwSetup_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // if an exception is thrown + if (e.Error != null) + { + + } + else + { + swSetupLog.Close(); + + if (restartApplicationRequested || rebootRequested) + { + this.Close(); + } + } + } + + private bool getActualSetupStep(string strSetupStep, ref Common.enum_SETUP_STEPS enumSetupStep) + { + bool successful = false; + enumSetupStep = Common.enum_SETUP_STEPS.NOT_VALID_STEP; + + foreach (Common.enum_SETUP_STEPS enumStep in Enum.GetValues(typeof(Common.enum_SETUP_STEPS))) + { + if (String.Equals(strSetupStep, enumStep.ToString(), StringComparison.OrdinalIgnoreCase)) + { + successful = true; + enumSetupStep = enumStep; + } + } + + return successful; + } + + public bool applicationNeedsToBeRestarted() + { + bool restart = false; + if (restartApplicationRequested || setupProcessNeedRestartToContinue) + restart = true; + + return restart; + } + + private bool verifySetupStepsInfo() + { + bool setupSuccessful = true; + string msg; + ConfigFileManager.Ini_KeyValue iniVal = new ConfigFileManager.Ini_KeyValue(""); + string indentation = String.Empty; + + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = Common.getSetupStepTitleColor(); + textProp.wordIndex = 0; + textProp.wordCount = 10; + // set font size + textProp.textFont = new Font(textProp.textFont.Name, 12); + // set font style + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + msg = "\n\n-=Verifying setup step information=-"; + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + writeToLog(msg); + + if (configInfo.Count == 0) + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Error Description: The section " + SectionName.Setup_Step_Manager + " doesn't exist or have no entries."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + swSetupLog.Write(msg); + + setupSuccessful = false; + } + + if (setupSuccessful) + { + foreach (ConfigFileManager.Ini_KeyValue entry in configInfo) + { + List pair = new List(entry.iniValue.Split(new string[] { "," }, StringSplitOptions.None)); + + if (pair.Count <= 2) + { + pair[0] = pair[0].Trim(); + + if (pair.Count == 1) + pair.Add(""); + + pair[1] = pair[1].Trim(); + + Common.enum_SETUP_STEPS actualSetupstep = Common.enum_SETUP_STEPS.NOT_VALID_STEP; + + if (getActualSetupStep(pair[0], ref actualSetupstep)) + { + configInfoFormatted.Add(new string[2] { pair[0], pair[1] }); + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.iniSectionName + + "\n" + indentation + "Key: " + entry.iniKeyName + + "\n" + indentation + "Value: " + entry.iniValue + + "\n" + indentation + "Error Description: The setup step \"" + pair[0] + "\" specified in the value above is invalid"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + writeToLog(msg); + + setupSuccessful = false; + + break; + } + } + else + { + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- FAILED. " + + "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + + "\n" + indentation + "Section: " + entry.iniSectionName + + "\n" + indentation + "Key: " + entry.iniKeyName + + "\n" + indentation + "Value: " + entry.iniValue + + "\n" + indentation + "Error Description: The value is invalid the INI file. Expecting install step and associated section name separated by comma"; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + writeToLog(msg); + + setupSuccessful = false; + + break; + } + } + } + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 3; + textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS); + textProp.textFont = new Font(textProp.textFont, FontStyle.Bold); + textPropList.Add(textProp); + + indentation = Common.getIndentation(1); + msg = "\n" + indentation + "- SUCCESS."; + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + writeToLog(msg); + } + + return setupSuccessful; + } + + private bool displayAndLogHeaderInfo() + { + bool setupSuccessful = true; + CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9); + CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor(""); + List textPropList = new List(); + + string msg; + + if (ConfigFileManager.ms_configGeneralInfo.programName.iniValue.Length > 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 10; + textProp.textColor = Color.BlueViolet; + textProp.textFont = new Font("Tahoma", 17, FontStyle.Bold | FontStyle.Underline); + textPropList.Add(textProp); + + msg = ConfigFileManager.ms_configGeneralInfo.programName.iniValue; + } + else + { + msg = "\n\nFAILURE ENCOUNTERED: " + + "\nFile: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + " " + + "\nSection: " + ConfigFileManager.ms_configGeneralInfo.programName.iniSectionName + " " + + "\nKey: " + ConfigFileManager.ms_configGeneralInfo.programName.iniKeyName + " " + + "\nValue: " + ConfigFileManager.ms_configGeneralInfo.programName.iniValue + " " + + "\nError Description: Either one or a combination of Section, Key, or Value is not defined in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + setupSuccessful = false; + } + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + writeToLog(msg); + + if (setupSuccessful) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 3; + textProp.textColor = Color.Brown; + textProp.textFont = new Font("Courier New", 10, FontStyle.Regular); + textPropList.Add(textProp); + + textProp.textColor = Color.Black; + textProp.wordIndex = 3; + textProp.wordCount = 100; + textPropList.Add(textProp); + + DateTime dat1 = DateTime.Now; + msg = StringManip.TextAlign("\nDate and Time: ", 25, StringManip.enumTextHorizontalAlignment.Left) + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + writeToLog(msg); + } + + if (setupSuccessful) + { + if (ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue.Length > 0) + { + // set font to default text and color + textProp.textFont = defaultTextProp.textFont; + textProp.textColor = defaultTextProp.textColor; + + textProp.wordIndex = 0; + textProp.wordCount = 2; + textProp.textColor = Color.Brown; + textProp.textFont = new Font("Courier New", 10, FontStyle.Regular); + textPropList.Add(textProp); + + textProp.textColor = Color.Black; + textProp.wordIndex = 2; + textProp.wordCount = 100; + textPropList.Add(textProp); + + msg = StringManip.TextAlign("\nApplication Platform: ", 25, StringManip.enumTextHorizontalAlignment.Left) + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue + "-Bit"; + } + else + { + msg = "\n\nFAILURE ENCOUNTERED: " + + "\nFile: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + " " + + "\nSection: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniSectionName + " " + + "\nKey: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniKeyName + " " + + "\nValue: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue + " " + + "\nError Description: Either one or a combination of Section, Key, or Value is not defined in the INI file."; + + Common.formatConfigIniFailureMessage(msg, textPropList); + + setupSuccessful = false; + } + FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor); + + writeToLog(msg); + } + + return setupSuccessful; + } + + private void btnCancel_Click(object sender, EventArgs e) + { + if (String.Equals(btnCancel.Text, "close", StringComparison.OrdinalIgnoreCase)) + { + this.Close(); + } + } + } +} diff --git a/AllPurposeAutoSetup/frmSetupStatusDisplay.resx b/AllPurposeAutoSetup/frmSetupStatusDisplay.resx new file mode 100644 index 0000000..2adc151 --- /dev/null +++ b/AllPurposeAutoSetup/frmSetupStatusDisplay.resx @@ -0,0 +1,3895 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + z/PlLMsW0zSdl1J28jxvSymbUsq6UqrKGAsAeHEcu2maCqUU55xLznlmWVbMOY8sy5oIIUa2bQ+EED3b + tneFEDtCiC3LsjaEEGu2ba85jnP593//99+wstj7pm3fAezbvr2F7cfHC7Vv+7ZvN73tO4B927e3sO07 + gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3t7DtO4B927e3sO07gH3bt7ew7TuAfdu3 + t7D9/08bzI8AXVWFAAAAAElFTkSuQmCCKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxJISEgsQEBAQzo6OlY2NjZmNTU1cjExMXsoKCh/ + KysrfTAwMHc2NjZtPz8/X0hISE1PT084V1dXIGBgYAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGCjY2NjYlJSVjHx8fnhwcHMMYGBjk + Ghoa/RwcHP8fHx//ISEh/yQkJP8lJSX/JiYm/yQkJP8jIyP/ISEh/x8fH/8cHBz/Ghoa/xkZGf8cHBz/ + ICAg9CQkJNQvLy+xOzs7gVBQUExkZGQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgUuLi42 + JSUleiUlJb0iIiLvIiIi/yQkJP8kJCT/JSUl/zExMf84ODj/QUFB/0xMTP9UVFT/Wlpa/1xcXP9hYWH/ + b29v/2xsbP9mZmb/XFxc/1BQUP9ERET/Ozs7/zU1Nf8tLS3/KCgo/yMjI/8iIiL/JCQk/ygoKP0lJSXW + MjIyoUpKSlJWVlYZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPDw8BycnJz8fHx+YGxsb3SQkJP8rKyv/MzMz/0FBQf9VVVX/ZmZm/3Nzc/98fHz/ + h4eH/4qKiv+Pj4//lZWV/5qamv+cnJz/nJyc/5ycnP+cnJz/np6e/6Ojo/+lpaX/p6en/6ampv+mpqb/ + oaGh/5iYmP+Pj4//f39//2lpaf9OTk7/NDQ0/yMjI/8jIyP/JSUl/yMjI/UrKyu/QkJCaFpaWh4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpJxQUFIMbGxvaKSkp/zg4OP9AQED/ + W1tb/2tra/92dnb/fHx8/3x8fP96enr/e3t7/35+fv+IiIj/iYmJ/4qKiv+NjY3/kJCQ/5OTk/+VlZX/ + lpaW/5eXl/+ZmZn/m5ub/5ycnP+enp7/oKCg/6Ghof+goKD/oKCg/6mpqf+wsLD/sLCw/6ampv+Wlpb/ + ioqK/3V1df9WVlb/ODg4/x0dHf8YGBj/ICAg9S8vL7dERERNV1dXCgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwC + GhoaQCMjI7MhISH3JSUl/z4+Pv9dXV3/cXFx/3d3d/91dXX/eHh4/39/f/+AgID/gICA/4KCgv+IiIj/ + jY2N/5OTk/+VlZX/mJiY/5ycnP+goKD/o6Oj/6enp/+pqan/r6+v/6+vr/+wsLD/sbGx/7Gxsf+ysrL/ + srKy/7Kysv+zs7P/sbGx/6+vr/+urq7/rq6u/66urv+wsLD/qamp/6ampv+dnZ3/fn5+/1VVVf82Njb/ + JSUl/xkZGf8iIiLbMTExeUlJSRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwEHR0dTB8fH8YhISH/NTU1/1NTU/9vb2//eXl5/3h4eP91dXX/ + c3Nz/3l5ef9/f3//h4eH/4uLi/+Pj4//lpaW/5+fn/+oqKj/ra2t/7CwsP+3t7f/vr6+/8bGxv/Nzc3/ + 09PT/9XV1f/S0tL/0tLS/9HR0f/Q0ND/z8/P/8/Pz//Pz8//zs7O/83Nzf/IyMj/wcHB/7y8vP+6urr/ + ubm5/7y8vP+vr6//qqqq/7S0tP+4uLj/t7e3/6enp/97e3v/RkZG/ysrK/8bGxv/Hh4e7TIyMotPT08d + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkQiAgIMUpKSn/ + SEhI/2lpaf9wcHD/a2tr/29vb/93d3f/fn5+/4CAgP9+fn7/gICA/4qKiv+ZmZn/p6en/7Ozs/++vr7/ + ycnJ/9TU1P/h4eH/5OTk/+jo6P/t7e3/8fHx//b29v/5+fn/+vr6//X19f/19fX/9PT0//T09P/09PT/ + 8/Pz//Ly8v/s7Oz/5eXl/+Xl5f/h4eH/3d3d/9fX1//Q0ND/zMzM/8rKyv/Gxsb/u7u7/7Ozs/+vr6// + sLCw/62trf+oqKj/i4uL/2JiYv8yMjL/GBgY/xsbG+0wMDCFUFBQFQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAJiYmKSUlJa4rKyv9RERE/19fX/9wcHD/cXFx/25ubv9wcHD/dnZ2/39/f/+Kior/ + lJSU/5mZmf+rq6v/vLy8/83Nzf/f39//7Ozs//X19f/8/Pz//v7+//7+/v/+/v7//v7+//////////// + //////////////////////////////////////////////////////39/f/4+Pj/+vr6//v7+//5+fn/ + 9/f3//Pz8//y8vL/6urq/93d3f/S0tL/zc3N/8nJyf++vr7/tLS0/7S0tP+4uLj/rq6u/46Ojv9hYWH/ + MTEx/xcXF/8lJSXkNTU1aERERAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjDh0dHX4wMDDvR0dH/1tbW/9hYWH/ + YWFh/2lpaf9qamr/b29v/39/f/+NjY3/mJiY/6mpqf/Gxsb/3t7e/+zs7P/29vb//v7+//////////// + +/v7//n5+f/6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v////////////////////// + //////////////////////////////////////7+/v/+/v7//v7+///////9/f3/9vb2/+rq6v/k5OT/ + 4ODg/9TU1P/IyMj/xMTE/7q6uv+xsbH/s7Oz/7S0tP+bm5v/XFxc/ykpKf8RERH/KSkpxzw8PDQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAB0dHTcjIyPPODg4/19fX/9tbW3/ZmZm/2dnZ/9sbGz/ampq/3Z2dv+Li4v/oqKi/729vf/T09P/ + 5OTk//Pz8//7+/v/9/f3//j4+P/+/v7///////39/f/8/Pz//f39//39/f/+/v7////////////+/v7/ + /v7+//39/f/8/Pz/+/v7//v7+//7+/v//Pz8//39/f/+/v7//v7+///////+/v7//f39//7+/v////// + /v7+//7+/v/+/v7///////n5+f/4+Pj//f39//z8/P/39/f/7+/v/+Hh4f/U1NT/y8vL/83Nzf/AwMD/ + qqqq/6ioqP+srKz/jY2N/1hYWP8gICD/FxcX9CkpKYRLS0sOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYmJgklJSV8MTEx805OTv9oaGj/Z2dn/2pqav9ra2v/ + cnJy/4GBgf+SkpL/qqqq/8DAwP/V1dX/7Ozs//j4+P/6+vr/+vr6//r6+v/7+/v//f39//z8/P/7+/v/ + 9/f3//b29v/19fX/8/Pz//Hx8f/x8fH/8PDw/+/v7//u7u7/7e3t/+zs7P/s7Oz/7u7u/+/v7//x8fH/ + 9PT0//f39//5+fn//Pz8//v7+//8/Pz//f39//7+/v/+/v7//////////////////v7+//z8/P/7+/v/ + +fn5//z8/P///////Pz8//Dw8P/r6+v/4eHh/9PT0//IyMj/vLy8/7Gxsf+vr6//s7Oz/25ubv8+Pj7/ + Gxsb/yIiIss0NDQtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIyMb + KSkpt0FBQf9eXl7/Z2dn/2VlZf9mZmb/bm5u/3l5ef+Ghob/o6Oj/8bGxv/j4+P/7Ozs/+7u7v/z8/P/ + 9fX1//f39//39/f/9fX1/+7u7v/q6ur/5ubm/+Li4v/d3d3/2tra/9jY2P/X19f/1tbW/9fX1//Z2dn/ + 3Nzc/+Dg4P/h4eH/5OTk/+Xl5f/r6+v/7Ozs/+7u7v/x8fH/9PT0//f39//4+Pj/9/f3//b29v/7+/v/ + /f39//7+/v/+/v7//v7+//v7+//6+vr/+fn5//z8/P/8/Pz/+/v7//r6+v/7+/v//f39//7+/v/5+fn/ + 7+/v/+Dg4P/R0dH/wMDA/7Ozs/+urq7/urq6/56env9jY2P/IyMj/xgYGO0yMjJlAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoPzc3N+JPT0//XV1d/1lZWf9dXV3/ampq/3BwcP+EhIT/ + oqKi/8HBwf/Z2dn/5+fn/+/v7//z8/P/9PT0//Ly8v/t7e3/4uLi/9bW1v/Pz8//y8vL/8nJyf/IyMj/ + xsbG/8jIyP/MzMz/0NDQ/9PT0//X19f/2dnZ/9zc3P/g4OD/4+Pj/+fn5//p6en/7Ozs//Ly8v/z8/P/ + 9fX1//f39//6+vr//Pz8//39/f/6+vr/9fX1//v7+/////////////7+/v/9/f3/9/f3//n5+f/8/Pz/ + /v7+//39/f/6+vr/+vr6//z8/P/+/v7////////////7+/v/8/Pz/+np6f/Y2Nj/zMzM/8LCwv+ysrL/ + srKy/7CwsP99fX3/MzMz/xsbG/40NDSUREREDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKWM1NTXw + WVlZ/2FhYf9XV1f/YGBg/29vb/98fHz/mJiY/7e3t//U1NT/7Ozs//f39//09PT/7+/v/+np6f/h4eH/ + 1tbW/8vLy//Dw8P/vr6+/729vf/FxcX/yMjI/8fHx//IyMj/ycnJ/8zMzP/Pz8//0dHR/9XV1f/W1tb/ + 19fX/9ra2v/d3d3/39/f/+Hh4f/h4eH/4+Pj/+Tk5P/m5ub/6enp/+vr6//u7u7/8PDw//Ly8v/29vb/ + +fn5//7+/v///////v7+//7+/v/+/v7//f39//v7+//8/Pz//v7+///////////////////////6+vr/ + +fn5//39/f/9/f3/+fn5//Dw8P/o6Oj/4ODg/8rKyv+7u7v/rKys/66urv+Wlpb/SkpK/xoaGv8hISG7 + NTU1GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACgoKAMqKip+Pj4++lpaWv9jY2P/YWFh/2ZmZv95eXn/jIyM/6Wlpf/Ly8v/ + 5eXl/+zs7P/s7Oz/6enp/+Dg4P/Q0ND/xcXF/8DAwP+4uLj/tbW1/7e3t/+9vb3/wsLC/8PDw//FxcX/ + ysrK/8/Pz//S0tL/0tLS/9DQ0P/Pz8//1dXV/9fX1//Y2Nj/2tra/9zc3P/d3d3/39/f/93d3f/Y2Nj/ + 2NjY/9nZ2f/a2tr/2tra/9vb2//b29v/3t7e/+Hh4f/j4+P/5ubm/+rq6v/u7u7/8/Pz//j4+P/8/Pz/ + /v7+///////+/v7//f39//39/f/9/f3//Pz8//b29v/19fX/+fn5//z8/P/9/f3//Pz8//n5+f/39/f/ + 4ODg/9LS0v/BwcH/srKy/7u7u/+oqKj/VlZW/x0dHf8ZGRnYQEBAJAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysHMjIykExMTP9UVFT/ + Y2Nj/2dnZ/9mZmb/dnZ2/5mZmf+8vLz/2dnZ/+np6f/r6+v/3d3d/87Ozv/ExMT/vLy8/7S0tP+xsbH/ + sbGx/7Ozs/+2trb/vb29/8LCwv/Hx8f/yMjI/87Ozv/Y2Nj/4uLi/+jo6P/p6en/5ubm/+Li4v/i4uL/ + 4uLi/9/f3//d3d3/2tra/9fX1//V1dX/1NTU/87Ozv/Pz8//z8/P/9LS0v/T09P/1dXV/9XV1f/a2tr/ + 4uLi/9zc3P/X19f/1tbW/9jY2P/c3Nz/4ODg/+Xl5f/t7e3/9/f3//7+/v/////////////////7+/v/ + +/v7//z8/P/7+/v/+/v7//v7+//7+/v//Pz8//39/f/19fX/7e3t/9/f3//Ozs7/u7u7/7i4uP+qqqr/ + bm5u/yMjI/8hISHjMTExNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAALCwsCTMzM5lHR0f/XFxc/1tbW/9hYWH/bm5u/4KCgv+lpaX/y8vL/+Li4v/m5ub/ + 3Nzc/83Nzf+9vb3/sLCw/6ysrP+srKz/rq6u/7Gxsf+1tbX/vLy8/8TExP/MzMz/1dXV/9ra2v/j4+P/ + 5OTk/+Li4v/e3t7/1NTU/8rKyv/BwcH/ubm5/6SkpP+fn5//mJiY/4+Pj/+Hh4f/fX19/3d3d/90dHT/ + dXV1/3h4eP98fHz/g4OD/4mJif+Pj4//k5OT/5ycnP+qqqr/s7Oz/8DAwP/Ly8v/09PT/9fX1//Y2Nj/ + 29vb/+Dg4P/k5OT/7Ozs//Hx8f/19fX/+vr6//7+/v/////////////////+/v7//Pz8//r6+v/5+fn/ + +fn5//r6+v/w8PD/6urq/97e3v/V1dX/vb29/66urv+5ubn/d3d3/xkZGf8XFxfnPz8/OgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLgcyMjKZRkZG/1paWv9WVlb/ + YWFh/29vb/+Kior/tbW1/9ra2v/o6Oj/3d3d/8nJyf+7u7v/sLCw/6moqP+ioqL/pKSk/6+vr/+1tbX/ + urq6/8fHx//X19f/4ODg/+Hh4f/d3d7/2trb/9DQ0P/ExMX/tLS1/6Chof+Ji4v/d3p7/21wcf9kaGn/ + VFlb/1BWWf9NVFf/SVBU/0RMT/8+Rkn/PUNH/zxCR/8/R0v/PkdL/0BKTv9GT1L/TlRX/1RYWv9XWlv/ + XF1d/2FiYv9mZ2f/bm9w/3x/f/+RlJP/pqmp/7K0tP/GyMn/1dbW/9TV1f/Y2dn/3d7e/+Pj4//m5uf/ + 6urr//b29v/8/Pz//f39/////////////f39//r6+v/39/f/9vb2//r6+v/v7+//7u7u//Dw8P/W1tb/ + wcHB/7i4uP+wsLD/dXV1/ywsLP8dHR3oREREOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcDODg4kEdHR/9WVlb/YWFh/2ZmZv9ra2v/kpKS/8jIyP/g4OD/2NjY/8vLy/+7u7v/ + qqqq/6ampv+lpKT/p6am/6Kiov+tra3/w8PD/9PT0//f39//6Ojo/+np6f/g4OH/0NDQ/7W2tv+en5// + goSE/3J0dv9kZWf/VVVZ/0dITP8/QUX/PD1D/zc6QP8qLzT/Jywy/yQrMP8iKTD/ICgv/x8oLf8iKjD/ + Iyox/yMqMf8eJy7/Hiku/yMsMf8qMDX/MjQ4/zc4Ov8+PkD/R0VG/0lISf9ISEv/SEpO/0xRVv9TWF// + VFlg/21yd/+Ok5T/oqan/7m8vP/O0M//4OHf/+Xl5P/e393/4uLi/+fn5//x8fH//v7+///////+/v7/ + +fn5//n5+f/5+fn/8/Pz//r6+v/6+vr/9fX1//Pz8//b29v/vr6+/7i4uP/AwMD/f39//yUlJf8fHx/m + TU1NLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw8PH5NTU3/V1dX/1lZWf9jY2P/ + dnZ2/5qamv/IyMj/3t7e/9XV1f+9vb3/qamp/6CgoP+hoaH/pqWl/6moqP+3t7b/vb28/9HR0f/j4uL/ + 6Ojo/+bm5v/S0tL/s7Oz/5eXl/+Dg4T/aWpq/09QUf9HSkr/P0NE/zI1OP8pKi7/JSYs/yYoLv8pKTL/ + LCw3/zM4Pf81O0D/Nj1E/ztBSf8+RU3/Q0xS/0hQWP9LUFn/Sk9U/0FKTv8+R0z/P0ZL/0FGS/9CRUn/ + R0dK/0JBRf83Njn/Nzc6/zM1Ov8oLjb/JC04/yQwO/8nNED/LzxD/0BKTf9QWVz/YGdo/36Dgv+qrqv/ + y87K/9PV0P/Y2tj/3t/f/+Xl5f/s7Oz/8fHx//v7+//6+vr/+/v7//X19f/19fX/8fHx//Hx8f/19fX/ + 9vb2/+vr6//e3t7/yMjI/7S0tP+1tbX/dHR0/x8fH/8xMTHgTU1NHQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAzMzNjQkJC+lZWVv9bW1v/ZGRk/3x8fP+np6f/zc3N/97e3v/Gxsb/qKio/5ubm/+ampr/ + mZmZ/5ycnP+np6b/vby8/9vb2//l5OT/4ODg/9PT0v+7u7v/np2d/3p6ev9hX2H/T09P/z0+P/8tLzD/ + KSss/yIlJP8kJyb/KzAt/zU4N/9ER0b/VllZ/2hqav94env/jJiV/5Ognf+eqqn/qra0/7XBv/+/ycj/ + w87M/8TPzf/Gzcv/w8rI/73GxP+0vbv/q7Sx/6Gpp/+epaP/jZST/291df9mbm3/VWBf/z9OTv8rP0D/ + HTU1/xEsLf8WKi7/ICw0/yYxOf8vOT//PUVJ/1BWWf9ucnT/jpCQ/7a4uP/P0M//3N3d/+Hh4f/i4uL/ + 6+vr//Ly8f/+/v7//Pz8//b29v/29vb/9/f3//Dw8P/q6ur/7u7u//Pz8//f39//ysrK/7Gxsf+tra3/ + fHx8/ykpKf8vLy/KWFhYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyPzo6OvBQUFD/WFhY/2JiYv+AgID/ + qqqq/8rKyv/FxcX/tra2/6Ojo/+Wlpb/lZWV/5qamv+lpaX/vb29/9LR0f/g39//4+Pj/9DQ0P+xsbH/ + j5CO/3Nycv9ZWFf/QD8+/zQ0M/8pKSj/HR0e/xweH/8zNjf/UFBP/2hoZf+FhoP/oqOg/7q7uf/LzMj/ + 1NbT/93f2v/a5eD/2OLd/9Pe2v/P2tX/y9jT/8rX0//L2NP/zNjU/8zW1v/M1db/y9XV/8zX1v/R29n/ + 1d/e/9zk4//d5eT/2ODf/9Pb2P/J0s//tMC8/5emof9xhYD/U2pl/ztMUP8eLTf/EiIr/xknL/8jLjX/ + MDY9/0FESf9aWl7/bm5w/4eHh/+xsbH/1dXV/+Pi4v/f39//4eHh/+np6f/29vb////////////6+vr/ + 7u7u//Ly8v/19fX/9PT0//X19f/c3Nz/ycnJ/8DAwP+kpKT/aGho/yQkJP9CQkKobGxsBwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACkpKRs2NjbiT09P/19fX/9eXl7/d3d3/6ampv/FxcX/v7+//6Wlpf+RkZH/jY2N/5GRkf+fn5// + t7e3/9PT0//q6ur/6unp/9fX1/+zs7P/iomJ/2trav9aWFj/RUVE/ysuKf8bGxj/GRsY/ystKv9FRkb/ + Zmto/5CVk//GxMb/2NPX/9rY2//c297/29vc/9PV1v/Lz8//xszL/8zS0//M0tP/y9PT/8rT0v/M1NP/ + zdbV/8/Y1f/R2df/0tfc/9DW2f/N1Nj/ytLW/8rR1v/J0dX/zNTX/8nP1P/Eyc7/zNDU/9fZ2v/b3t7/ + 293c/9fY1//U1dP/tLu7/3yJjv9UZGn/OEhN/yQzOv8mMDj/MDQ5/zY3Pv8/P0L/T05P/2loaP+CgYH/ + qqqq/9fX1//k5OT/2dnZ/+jn5//19fX/+vr6//v7+//29vb/9/f3//T09P/v7+//7u7u/+zs7P/k5OT/ + xMTE/7Ozs/+rq6v/WFhY/yYmJv9UVFR+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAJNjY2t0dHR/9eXl7/Z2dn/3l5ef+ioqL/ + v7+//7q6uv+ioqL/lpaW/46Ojv+SkpL/pKSk/8HBwf/e3t7/4+Pj/8rJyf+traz/ioqJ/2xra/9WVVX/ + PTw7/yglJf8eHxv/HyMc/zc5Nf9obGf/pqum/9DX0f/k6uX/6O3o/9bW2//LydL/xsfN/8THzP/J0NL/ + 0dna/9bg3v/X4uH/3eLh/9/k4//i6eX/5Ovn/+Xs5v/i6+T/3+ng/97o3//e5eT/4Ojn/+Lq6P/j7On/ + 4uvp/9/p5//c5uT/3eXk/+Ll5//d4eL/1tja/83P0f/Gx8r/ycjL/9HLzv/X2tj/4Onl/+Xs6f/L1dP/ + lJ+h/2Bqb/9DSk//ODxB/y4uMP8zMjH/RURE/1NSUv9kY2P/hoaF/7Kysv/a2tr/5OTk/+Pi4v/r6+v/ + +Pj4//39/f/39/f/9PT0//Ly8v/m5ub/8vLy/+3t7f/b29v/zMzM/729vf+fn5//PDw8/zU1NfZdXV1K + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADExMXxJSUn/WVlZ/2VlZf92dnb/m5ub/7u7u/+2trb/oKCg/5aWlv+SkpL/k5OT/6urq//R0dH/ + 5eXl/9jY2P+6urr/lZWV/3l5ef9aWVn/ODc2/yYlJP8jISH/Li0s/1ZZVf+Gi4T/tru2/9je2P/Y3tn/ + yM/K/77FwP++xcD/0NTT/9TZ2P/S2df/09/Z/9bl3f/W593/0ebZ/8vj1P/J4M//yN/O/8Tdy//C28j/ + vtrE/73awv+828H/vNvC/7zayP+62cf/uNrH/7jax/+73cn/v+DM/8Lizv/H5dP/0eja/9br3P/X6d3/ + 1+Tb/9bf2f/W3dj/3N/c/8TNx/+0wrr/xNDJ/9Td2P/e5+L/1tzc/7O5uv+IjY//V1lZ/zw7Ov8xLy7/ + MjEw/z08PP9QUFD/cHBw/5STk//Hx8f/2tra/+bm5v/s6+v/8/Pz//39/f/7+/v/9fX1//T09P/t7e3/ + 6+vr/+np6f/a2tr/wcHB/7i4uP+MjIz/NTU1/0pKSuJycnIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTE5PDw8805OTv9hYWH/dnZ2/5KSkv+vr6// + rq6u/5ucm/+SkpL/kpGS/5uam/+0s7T/1NTU/+Li4v/Ly8v/oaGh/4ODgv9kZGH/QEA+/y0sLP8fHh7/ + JiUk/0tKSv+PjY7/x8vH/9Pb1P/S2dL/y9LM/8HIwf+9xL7/ydDK/9rh3P/U3dD/0N3L/9Lhz//O4c3/ + xNzF/7jVu/+szLP/pMmt/5zLqP+azKf/lcik/5DGn/+LxJr/iMOX/4jFl/+Jxpn/iMad/4LFnP99xJr/ + fcWb/4LHnv+Hy6L/i86k/4/Pp/+Tzav/mdCu/6bVt/+03ML/weHL/8fi0f/I4dL/z+DS/9Xf0//Q29H/ + xtHJ/8HMxv/H0c7/09rZ/9vh4P/Gx8j/lpSV/1hWVv82NDP/Ly4t/zU1Nf9DQkL/U1JS/4SCg/+pqKj/ + zMvL/9zb2//l5eX/8fLx//r6+//7/Pz/+vr6/+jo6P/n5+f/6enp/97e3v/Q0ND/xMTE/7Kysv9ubm7/ + Ojo6/2ZmZqqgoKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ojo6Djc3N9BMTEz/U1NT/2dnZ/+JiYn/o6Oj/6enp/+Tk5P/i4uL/5CQkP+bnJr/wMG//93e3P/a29n/ + vby7/4uKif9raWj/VFJW/zAuN/8jISX/JSQj/05NSv+enZn/zs7M/9fW2P/HycP/usC1/7vBuP/EysH/ + zNXN/8zX0f/G083/wc7K/7TNtf+ry6r/pcik/5vBmf+QvY7/ir2I/4rBif+KxIv/fb+H/3zAif99wor/ + e8OK/3nDiP9zwoX/ccGC/2/AhP9qvYj/Zb+I/2HBif9iwor/ZcOM/2fEjf9kw4r/a8eO/3PKk/9rwoz/ + a72K/3PAkP9/xZr/isuk/4zNo/+j0K//utO8/77Ywv/E28n/yNrP/8jV0P/Fzcz/wcfI/9Pa1v/f5N// + 0tLQ/6Kfn/9cWFr/LCkp/yoqKf88Pjr/R0lF/2FjYP+VlpX/wsPD/9DPz//j4uL/8fDv//f19P/4+Pj/ + 8vLy/+vr6//o6Oj/5eXl/9zc3P/W1tb/t7e3/6ysrP9YWFj/T09P/4SEhF8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODiARUVF/1dXV/9mZmb/eHh4/5aWlv+fn5// + jIyM/4WFhf+Qj5D/oqOi/8nNxv/h5N//ztDL/6Okn/+GhYH/ZmNi/05KR/8vKzL/Hhot/0hFTv+Ni4r/ + x8e//9DRx//CxMD/wsTH/8rMyf/HzsP/wMu+/7nKt/+yyLL/p8Wq/5q/ov+UuZ3/iruO/4a9if+Evof/ + gb6E/3u/fv93v3r/dL94/3C8df9ip2//XqZv/1ymb/9YpW7/VqVu/1Okbv9SpG//UKNw/0efcv89oHH/ + NaFx/zalc/88qnb/P694/z6xd/9GtXn/ULx6/1W/ev9Zw3r/YsmC/2jNiP9pzon/Z86F/3bJjP+HyJf/ + kM6e/5/Urf+v17r/utbF/8HTy//F0s3/vM/B/7vLvP/O08z/4d3e/8/IzP+Jg4b/RkdF/ycrJf8wOC// + P0U//1daWf+Gh4n/p6Om/9jT1P/w6+f/7+rm//r6+v/8/Pz/9/f3/+3t7f/m5ub/4+Pj/9zc3P/Ozs7/ + wMDA/5OTk/9CQkL/Z2dn5p6enhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/Kz8/P/BRUVH/YWFh/3BwcP+Hh4f/nJyc/5qamv+Hh4f/iYmJ/6enp//Pz87/3+Lf/77Av/+ZmJf/ + eHh3/1taWv89Ozv/JCIi/ygmJf9pamX/vr+6/9ze2f/Dx8H/tb22/77Hwv/By8f/uMnF/67Gvv+kwa7/ + l7uX/4y4hP+FuXb/f7pt/327av94s2n/d65s/3CnbP9nnm3/YJNt/1eJa/9Ngmj/Q3xl/zt4Wf85eVr/ + OXtd/zh+Yf85gmX/O4Ro/z6GbP88iG3/M45q/yOMZ/8UiWP/EIpi/xONZP8OjmL/CI5e/xKRX/8hmGH/ + Kpxj/zOmZ/9AsW7/Ur58/1bDf/9bxYD/YsaB/2jHgf9qx3//cseF/4DLkv+P0KL/ntWu/6jYtP+y1rr/ + w9zF/8TTxP++xLz/09HQ/+Xh4v+1s7T/YF9f/zg5Nv8yMjD/MzAy/05JT/91cXX/qKOk/9nV0f/v6+f/ + 6+vq//X19v/6+vr/9fX1/+vr6//k5OT/2tra/9DQ0P/BwcH/p6en/3Fxcf9aWlr/kJCQnAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj6yS0tL/1xcXP9ra2v/gYGB/4uLi/+MjIz/ + i4uL/5OTk/+pqan/y8zL/9nZ2v+urLD/j42Q/25sb/9bW13/Ozs9/x8eIP89PT7/mpuV/9bZyP/Fyb// + tr63/625s/+vwbX/rMOv/6O7o/+Rupb/grSI/3Spd/9wpm3/dq5s/3ezaf9rq1v/YKFP/1+MVP9XgFP/ + RnVM/zpqSv86ZE3/QGtT/0V0Wv9Fe2L/Q4tj/0KPZv9Ckmr/RZZv/0ebcv9JoHX/SaJ4/0uke/9IqHj/ + Oqd3/yqjdP8jo3L/IqJz/xqhcP8Vom3/FZ5q/xWcZv8RlGH/CIxW/waKT/8Zlln/JaFe/y2nX/85t2X/ + Pr9k/0C+YP9PxWr/Ycx6/3DRhv93z4z/dsqJ/5TPoP+r1rH/uNe5/8HUv//EzcL/x8rG/8/Oz//W1Nb/ + ioaH/0dBRP80LDH/PjU9/01HS/9rZmj/o6Cc/8PBvP/Y2Nj/7Ozs//r6+v/4+Pj/7+/v/+jo6P/g4OD/ + 2tra/8fHx/+9vb3/np6e/11dXf97e3v4tra2OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Ozs7SENDQ/9VVVX/ZGRk/3Z2dv+QkJD/lpaW/4aGhv+BgYH/qqqq/9bW1v/T09P/srGz/4uJj/92c3j/ + T09S/y4wM/8uMTL/YWZl/6+1tP/Hy8X/xMS6/7W8tf+ntq7/nrWm/5e3m/+Qt4v/ibN8/3qza/90smX/ + c61m/2miYf9dkVf/UntO/0JnQf82YDn/OFE9/ztWRP8+ZUr/QXRQ/0eDV/9Pj13/Vpdi/1ecZv9SpGf/ + Uqdt/1OpcP9SrHL/U7Fz/1W1dv9Wtnn/WLd+/1G0gv9BsX//MbB9/yivfP8nr37/I69+/x2ue/8grnr/ + Iq51/yCrbv8Vo1//Ep9a/xuiYf8Sm1b/CZVM/w6dTP8Xp0z/I61Q/zW3Wv9EvmP/VMVw/2PNe/9u0oD/ + g9OT/5TUnv+j16X/r9au/7XQtP+5ybn/v8e//8rNyf/Qzcz/pKCg/11XWv8tKS3/NC80/0E+P/92dXD/ + l5aR/729vv/a2tr/8fHx//j4+P/z8/P/7u7u/+rq6v/i4uL/0dHR/8jIyP+2trb/fn5+/2lpaf+jo6PD + 0tLSBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/Pwc8PDzKTU1N/11dXf9vb2//iIiI/5aWlv+SkpL/ + kZGR/6Kiov/Hx8f/1tbW/66urv98e33/bmlv/1BMUv8yMjT/MTU0/3B2c//AycX/wczG/7S9t/+prar/ + m6uh/5aynv+RuZf/g7SA/3epaP9zqFr/bqJc/2WUWf9chFH/SWpD/zJQLv8uQyv/Mkcy/zdTPv89a0b/ + RHlN/0uEU/9Qjlr/VJpd/1mhX/9cp2T/XKpq/12ycv9ftHf/X7d7/165ff9cu37/X76A/2DAgf9gwIb/ + V7yJ/0S7h/82uof/KrmG/ya5hf8muoX/IbeA/yO5gP8luX3/Jrp4/yO4bv8ouXD/K7hy/x2vZv8OpFj/ + F6lZ/xyqWP8Rnk3/E5tJ/ySkUP88tGH/Tb9s/1XEbf9kyXj/d9CF/43XkP+X1ZX/n9Kc/6fNpv+wyq7/ + s8ex/8DIu//U2c//xsrF/2doaP80NDb/MS4v/0lHRv9oZ2X/kZGR/7i4uP/d3d3/8fHx//b29v/19fX/ + 7u7u/+Xl5f/c3Nz/zc3N/7+/v/+pqan/bm5u/4qKiv/Ozs5SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + PDw8VUFBQf9XV1f/ZmZm/319ff+VlZX/kZGR/319ff+hoaH/09PT/8/Pz/+ioqL/goKC/2poav9QS07/ + MzAz/zk6Of+JkIr/x9DJ/7jFuv+jtKb/nKue/6GzpP+SspX/fKp9/2ykav9qpGP/aZ5a/2GTTv9Sc0r/ + OFE4/yU3Iv8oMyT/LUcp/zliMv9EcDz/R3M+/0eGQ/9NkUr/VJpT/1iiXf9cqWT/Xatn/16sbP9crXP/ + YrV9/2K4gv9iuob/Y7yK/2TAjP9nwo//asOP/2nEk/9gxZT/TMOT/z3DlP8rwo//IsCK/yLAif8avX7/ + Hr5//yPAgv8gvnz/Hbx1/ynAfv8pwHv/Jb13/xy5bP8ht2r/J7Vp/yKwYP8hqlv/HqNX/x+hU/8op1T/ + Na9Y/0rBZv9ey3D/d9V7/4HVfv+J0YT/l9KS/6PUof+r1Kn/tc2y/7LFrv/G1cX/z9jR/4aLif8uLS7/ + LSor/0ZDRf9mZmb/j4+P/7q6uv/d3d3/7+/v//T09P/v7+//6Ojo/+Li4v/U1NT/xsbG/8DAwP+Kior/ + enp6/729vc3a2toHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSgZAQEDNUlJS/2dnZ/90dHT/h4eH/5OTlP+IiIn/ + ioqK/8LCwv/b29z/paWm/3l5ef9tbm7/WlhY/zMuL/9BPj7/mpyY/8TNxP+zwbT/s8Kz/6W2pP+SqI// + haiA/32tdP9np1v/WaBN/1WXTf9LekT/MVAs/yAyHP8iNB//J0Ui/y9XJ/83aS3/QXcx/0eDN/9Niz7/ + TphG/1KfT/9VpFj/Walg/1yuZ/9es2z/YbZy/2W5e/9nvIP/Zr+J/2bAjP9mwo//aceU/2/Kl/9zzJr/ + dM6f/2rOoP9WzaD/Pcuc/y3Jl/8kx5P/H8WO/xrEh/8fxoj/JMeH/yPFgv8qyIr/McmM/zLJiv8pxX// + I8J3/yG+dP8gunD/H7hq/yO2aP8puGf/K7Zh/yWvWP8eqFD/JKtN/z++V/9m1Gz/ddly/3nUc/+C0H7/ + jc+K/5XPkv+pzqb/sdKw/6rFq/+6y7z/ytTO/5SVl/80LjP/Lict/05OTv9tbW3/k5KS/7m4uf/b29v/ + 7u7u//X19f/x8fH/5ubm/93d3f/Ozs7/xMTE/6mpqf96enr/np6e/9PT01MAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCS0tLS/9dXV3/cHBw/3x8fP+NjY3/ioqK/4SEg//BwsD/2trZ/6qqqP96enj/cXBw/2NgY/8xLy// + Pj46/52dlv/FyLn/uMGt/6m5ov+Zs5n/jayV/3uke/9vpV//aKFZ/2KfVP9MhUH/J1Mg/xouF/8dJhr/ + I0Qe/ypaIP8yYyb/PHMs/0OBNP9Jizf/SZA4/0iRPv9NmUj/UqJU/1aoXP9asGT/YLhs/2G9cv9jwnr/ + aMSD/27Fi/9uxpD/bceU/27Kl/9wzZz/c8+c/3bQnv950qX/cdSs/1/Ur/86zJ3/LMqb/yfKnP8py53/ + JMqX/yfMlf8r0JX/Lc6U/zXRmf80z5X/Ns+S/zDOiv8tz4X/I8h7/x7Cdf8mxnb/Lcd1/zDDcv8svWr/ + K7hk/ym2Xv8rtVf/LK9N/0C0Tv9cw1n/cNFn/3jScP980nX/gdV8/47Lh/+c0Zn/ocmi/6/Ks//Az8P/ + zdLL/5OPjf9HQUL/Nzk4/1NTUv9tb23/k5WT/7m7uv/g4OD/9/X2//Xz9P/p6en/5OXk/9TU1P/Gxsb/ + vr6+/4iIiP+Hh4f/0NDQyPf39wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz/AWlpa/1xcXP90dHT/gYGB/42Njv+JiIj/ + naGc/+Lm4P+2uLP/ent2/3Z1cv9jX2D/QTpA/0xJTP+nsqj/u8Gx/7S6of+tuZj/mrOM/3unef9hnXD/ + Vppb/16gTf9UiUr/N1sz/xorGf8XHxX/HDAa/yZHJv8rYSX/MG8j/zZ2Kf89gC7/Q4kz/0iSNf9LmDn/ + TpxA/1WlSP9aq1P/XrFe/2G2aP9mvHP/ZsB6/2fDg/9rxYz/dMWV/3TFmv90xp//c8ei/3bKp/94y6f/ + eMuo/3nMrv9vz7L/Xc20/zzGp/81x6v/MMao/zPJqv8zyqf/Lsqg/yvQnf8106P/QNam/z7Xn/9A2Jz/ + ONaS/zLWjP8t04T/LdCB/y/Pfv8xzXz/Nsp7/zbGef82w3L/NsBt/zO8ZP82t1j/RLJS/06uSv9buE3/ + as1b/27aZP9p3V//d9hr/4bXgP+Q0Jb/msWh/67Lrf/E1Ln/xcy5/6aonf86Pj3/LTIv/05TT/9udHD/ + lJmX/8C+v//m4OP/9O/y/+3t7f/n5+f/2NjY/9DQ0P/Jycn/np6e/4mJif/CwsL/8/PzQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBANEdHR/xfX1//ZGRk/4ODg/+Wlpb/hYWF/52dnf/S1NH/wMK//4SFg/98fHr/Y2Ni/0E+P/9GQkT/ + lpSW/8HKwf+0vrT/m6qd/4+okP9+o3r/aZ5h/1ydTv9Vk0b/Rnc9/x9GGf8UJhH/FSoS/xxBGf8nViP/ + LmEp/ypwI/8reyP/MYAo/zmILv8/jzT/Rpc5/0ucPf9Qn0P/VqNP/1ymW/9jqWb/aaxy/2+vfP9xsIT/ + crKN/3Wzlf9utJj/brae/224o/9vu6b/dMCt/3bEsf94xrL/dMS0/2TBsv9Sv7P/QL20/zS8s/8zvbT/ + NsC3/zXBtP8vwan/Mcem/z7Kr/9IzLP/Rsur/03Pq/9Kz6T/Rc+c/z7VlP852o//NteJ/zTUhP820oD/ + OM96/zrPdf860G//N8hn/zrAXv9KvFn/ULhP/1a2TP9Yukv/XcRT/2LRXP923Gv/edZ0/4DPgf+RzJH/ + ncuX/6nFn/+3xLD/v8S9/46QkP8yMzP/OTo5/1VXVf+Bg4H/m5qb/8fDxf/39fb/8/P0/+jo6P/g4OD/ + 19fX/8vLy/+zs7P/j4+P/62trf/p6emjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT2YUFBQ/2RkZP9ycnL/i4uL/5SUlP+NjY3/ + w8PE/8zMzf+FhYb/b29x/2NiZf9PTlH/R0hK/4WHhv+9v73/qrSt/5eqn/9/oYz/cp98/2edaP9jnlb/ + Wpc9/ztrJf8ZNRf/ECgO/xQrEv8aQRb/IFgb/yZoH/8sdCL/KX0i/yqDJP8ziSn/PpAz/0aVOv9Klz// + TZhD/0+YRv9Ul0//XJdZ/1+WX/9lmGz/bJ99/3KiiP96pZP/fKia/3ezn/92t6b/d7qs/3e9sf94wLb/ + eMO6/3fFu/92xb3/cse//2nFwv9WwL3/R769/z+/vv8/wMD/QsDA/zq+t/8xvK3/N76u/0jFuf9Qx7n/ + TsSw/0nDqP9EwKH/Rc2g/z/Wmf881JL/O9OK/z3UhP9B1YD/P9V4/zjTbP860WX/Q85d/1jNX/9hy1r/ + XsJQ/1G1RP9KsEH/S7VG/1/OV/9l0mH/dNRv/4LVe/+Kz37/l8aM/6rEqv+8ycP/wcLA/3x8e/8zMjL/ + Q0FC/2ZlZv+AgID/pqen/9vc3P/z8/P/8PDw/+rq6v/e3t7/z8/P/8XFxf+ZmZn/mpqa/93d3dUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + U1NTD0BAQOpXV1f/Z2dn/319ff+Kior/hoaG/6urq//X19j/oJ2g/2tpbv9tbHH/TExR/0BDRv9+hYL/ + tr62/7W/tP+XqJ3/g6OH/2+mdP9go2H/VppS/0qFQf8uWx//FCsK/w4ZDP8SMRH/HEgY/yNaG/8hZRn/ + IXEa/yd8Hv8uhCP/NYgp/zyLL/9DjTj/SI08/0qKQP9Jh0H/S4ZE/1KFTP9biVX/YIxd/2STav9qoX3/ + dKuM/3+zmP+GuqL/h8Sp/4fIsP+Iyrf/h8y8/4fPwP+G0cP/hdLG/4TTxv990Mf/dM/I/2fNyv9Sycb/ + QsXF/z7DxP86wb//OcG8/zvCuf9AxLr/Ssi7/1XLv/9Wyrz/UMWx/0fApv9Ewaf/PMGd/z/FmP89yIv/ + R8+J/1PVjP9T1oT/R9Ry/0HSZv9J0l//WtNf/2TSXP9jzFX/W8JP/1O5Sv9LtEb/Rrw+/1LIS/9l1V3/ + cdpl/33YbP+O1IL/nMuf/6PBrv+9xrv/vsO7/29xbP80MjL/WFZW/2pra/+LkI3/rrKw/+Hh4f/39/f/ + 8vLy/+Xl5f/U1NT/ycnJ/6ampv+Xl5f/zc3N3vX19QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJSUlVQEBA/2BgYP9wcHD/goKC/4qKiv+SkpL/ + zMzM/7y7vP99e33/dHN3/11cYv9ERUv/XmNi/663r/+tvKn/nLCY/4Kkif9pnGj/XqNU/1GfQf84gC3/ + HU0a/wwaDP8MEQv/DiwM/xZDFv8gVxn/JGgZ/yp4G/8tgR7/KYAf/zWBKv9AgzL/PoAx/z57Mv9BejX/ + Rns7/0p9QP9PgUf/WYpP/2SUWf9sn2P/catw/3q8gv+Fypb/i8+i/5HUq/+Z2rf/m9y+/5rdw/+Y3sb/ + l9/J/5bgy/+V4c3/k+DN/47fzv+H39H/fd/W/2rb0/9X183/UNXL/0zUyP9L0sj/SM7G/0HLwf89xrv/ + Q8a8/0zIvP9Py7f/Ucyx/1rKtf9YxbL/Sr6j/zi1iv8+uYf/ScCF/1LHgf9UzHb/SM9o/1LWaf9j2mn/ + ZtVg/2LOVP9hy1P/XchT/1fATv9EuTj/Rb07/0/KR/9d1lH/a9xb/33ab/+J0Yr/j8eX/6fEpP/B2L7/ + r7qs/1haVf87OTn/WFhY/21yb/+Kj4z/v7+///Dw8P/09PT/7Ozs/9ra2v/Gxsb/tra2/6Ghof+9vb3k + 7u7uEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAENDQ7VFRUX/ampq/3p6ev+Hh4f/k5OT/7CwsP/Kysr/iYmJ/3Jwb/9yb3D/UE9T/1BTVv+ao53/ + qbmm/5irjv+Nq4P/ZJ1o/1mWVf9VlET/OHYl/xRHCv8IHQX/DBMP/w4oFf8QRAz/GlYU/yBnFv8ldBn/ + L4Eh/zSCJP8veSH/M3Um/zlzK/84cSz/OnIw/0F4Nv9Mgz7/WI9J/2GaVP9tp1z/erFo/4K7c/+ExH7/ + ic+O/4/Vn/+P1qj/k9iv/5vZuv+d3MH/m9zF/5ndyP+Y3cr/lt3M/5Tdzv+S3c3/itvN/4Tb0f932dT/ + ZtfU/1PSzf9Hz8r/R9DN/0XPzP9Fzcn/Rs7H/0vPxv9LzsH/Scq8/0nIuv9ExbX/R8Ky/1TEt/9GvaL/ + Q72W/0vAlP8/uH//PrV0/z6zbP82uWD/Tcpq/2fYcf9u2Gj/adRa/2fSVv9k0FX/XstR/1PDQf9Guzn/ + Qbs6/0rIQv9W00v/ZtZZ/3fWcf+D1oP/l82V/6TOov+xy6//lZ+S/0BBPv88PDz/Zmpo/3N3dP+dnZ3/ + 0tLS/+/v7//v7+//39/f/8rKyv/ExMT/ra2t/7W1tfXk5ORi9vb2AQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVVUVPDw88lJSUv9ycnL/goKC/5KSkv+YmJj/ + wcHB/6mpqf9ramr/bGlj/15cWv9XWFn/f4WE/7G9s/+WqI//kKWA/36mb/9PoFD/V5lW/0JyO/8UMg3/ + CBcF/w0YCP8XKRD/GkgW/xFdC/8Zag//IngU/yV8Ff8mdhj/KG0b/zFqI/8zbif/NnMq/zp4L/9CgzX/ + TZA9/1mfSP9krFP/brdd/3K7YP93vGX/fbtt/328dv+JxI//jsih/5HKrf+WzbX/mM67/5nQwP+b08b/ + mdXK/5jVzf+W1s7/k9XN/5XW0f+V19X/jNbY/33T2/9gytD/TsXO/zy/yv83vsz/N7/K/znCyv85wsj/ + QMXI/0bGx/9Hx8H/TsnA/1bPxv8+xrL/Lb6l/yy7nv8vupf/K7aH/y2zfP85tn3/QLh5/ziybv8+tGf/ + TsFj/2fQZv9u2V7/bttY/2fXVP9g0lD/X8ZH/1XBRf9Duj//OLk3/z7EO/9Y10v/atxb/3HXZ/+K1Yn/ + kMuP/6TKof+0w7D/eHp3/zY2N/9ZXVz/am5t/4KBgf+qqqr/6Ojo//Hx8f/h4eH/1NTU/83Nzf+ysrL/ + r6+v/93d3fTy8vIZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAElJSVE9PT3/YWFh/3d3d/+Hh4f/lZWV/6urq/+7u7v/f39//2VkZP9nZ2H/UlFP/3d3eP+qr67/ + nKuc/4ulhP+BonH/aJ5W/0mgQf9AfUD/HTke/wYIA/8LFgf/FDcN/xlKC/8eYhH/IHMT/xtxDv8cdBD/ + HnES/x5nE/8gYBf/LGIh/zh4LP9BiTP/SZA7/1OdRP9cp0z/Y61S/2OxUv9ks1P/Zq9V/2mrV/9tqF3/ + bqdn/32xg/+Iu53/j8Gu/5vJu/+czb//odLH/6DTyf+h1c3/otbR/6PZ1P+i2tb/o9rX/6Pb2v+a2t7/ + itfg/3DN2f9ZxdL/RL7P/zy90/86vtH/OsDO/zi+zP87v8z/PL3K/z68xP87usD/Nrm6/yO3qv8fvKf/ + ILmi/x60lP8bsIP/IK57/yqwd/8prm7/MbBs/zWvZP88sVn/Vr5g/2TJX/9oz1j/ZtNV/2PTUv9by0T/ + Ws1J/07DR/86tDb/Orgz/07PQ/9d3E//X9pU/3zYeP+H04T/mc2W/7TOsf+nr6X/YWJh/zs7O/9sbG7/ + c3Nz/4mJif/R0dH/8fHx/+bm5v/b29v/0NDQ/7e3t/+wsLD/1dXV//Dw8CAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/p0hISP9paWn/eXl5/4yMjP+SkpL/ + yMjI/6Kiov9kZGT/ZGNj/2FhYP9WVlb/nZ2e/6Sspv+NpYz/f6d3/2WeWv9SmkP/RJE0/xhFFf8GDQT/ + CQ4D/w4oBP8MRQX/DV4L/xduFP8nchX/IGsQ/xxlD/8cYxL/ImcW/ylwHf8wdyT/P4wx/0ubO/9QnkD/ + VqFG/1ujTP9fo0//XqFQ/1yfTv9gm1D/Z5tU/2+fXf9tomX/eq99/5DCo/+Ev6P/lcq3/6HSw/+k1cf/ + p9jN/6vb1P+v39n/suLd/7Tj4P+x4t//q+Df/6Pf4v+T3OT/f9jk/2LN1v9Ox9X/QcXX/zzD1P82v8// + NL7O/zW8zP83usv/OrnJ/zm3xf8xsb3/IKyv/yGwsP8erab/GqiW/xqlhv8fpH7/JqZ2/yemb/8mp2L/ + Lqxg/z2wY/9MsmX/U7Jf/127Xv9nx1z/bNFb/1PZRP9S10L/Vc9F/06/Pv9DszT/P7g0/0nRQv9X4U// + b9lg/3rZcv+M1Yf/otOj/7jOuP+HjYX/Qzs//1xUWf9tbm7/c3R0/6Wlpf/q6ur/7+/v/9vb2//Ozs7/ + wcHB/7i4uP/S0tL/8vLyHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGtrawRCQkLfS0tL/2xsbP97e3v/jo6O/6mpqf+2trb/g4OD/2JiYv9iYWH/VVJS/3Z5dv+irKT/ + nK6d/4WohP9tn2b/U5RJ/0WHNv8jVBX/CScG/wUOA/8LIgb/GEIK/xdYCP8VZxH/FmkS/xZiC/8ZZA3/ + H2gQ/yZwFv8veR//OYMq/0SMNf9HlDj/R5Y4/0iUOP9IkTn/TZI//1SWRf9bnE3/YaJS/2GcT/9onFT/ + bZ5a/22hY/9upm7/fLSL/3q3lv+ezr7/qNbK/6nYy/+x3dT/uOLb/77m4f/C6eT/wenm/73n5f+25OX/ + quPm/5zg6f+M3uz/adDc/1PJ2f9Dxdf/OsLS/zG+zv8vvc3/MLrL/zC4yf82ucv/O7jK/zezwv8lrbb/ + H6uy/xilpP8Yopn/HKCN/xqbf/8bmHH/H5hq/yCeYf8YmVX/G5dP/zenXP9LtWH/VLpe/169Wf9iwFH/ + WM1J/1nRSv9b00z/UcpD/0O9NP87tyz/Pb8w/0jLO/9l21j/cNto/3vRdf+Y1Jb/r9Gv/6Ctnv9qZ2b/ + TUhK/2pra/9paWn/jIyM/9LS0v/u7u7/4eHh/9LS0v/FxcX/uLi4/9HR0f/v7+8jAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2dnAUNDQ/9QUFD/cXFx/4GBgf+Tk5P/ + vb29/52dnf9hYWH/YmJi/19fXv9dW1n/mZ+X/56xn/+Ep4X/bZ9r/1iVU/89hzf/LWwj/w4eBf8FFAP/ + BhwD/ww7Cf8YVg7/GGIK/xlmDP8XYw7/FGAN/xtoEP8lcRf/Lnsg/zeEJ/8+iy7/RpM1/0STNf9DkDT/ + RZA2/0iOOf9Njj3/UJE//1iXRf9emkn/X5hJ/2WZT/9qnVf/cqNi/3Smaf94qXX/eK2D/6LMu/+r2Mz/ + tN7O/8Pk0f/U6dr/3Ozi/+Du4//f8OT/1O7r/8Po6f+25uj/peLn/4na5P9s0+P/YNDf/1fO2/9DyNX/ + McDP/yu7y/8vucv/MLrK/zfA0f8zuMj/NLTH/ymuv/8bprH/FKKm/xOenf8Um5H/E5eE/xWUdv8WkWf/ + GZRa/xmVVP8VkVL/GJFT/ymaU/9Or13/Yrld/2G2Uf9Xt0j/VsBJ/1fMSf9R0EP/Rso3/z/BLf8/uyv/ + Q70v/1LXRv9j3lr/a9Vm/4fWhf+l1aL/s8yw/5KZjv9MSkn/YWFh/2FhYf9ycnL/sbGx/+jo6P/o6Oj/ + 19fX/8jIyP+6urr/z8/P/+vr6yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARUVF/1hYWP94eHj/ioqK/5mZmf+/v7//gICA/1BQUP9lZWX/X19e/3x7d/+ptqb/ + iqyJ/2qca/9RklH/SI5E/y12KP8TRQz/CgkD/wYZA/8HMwb/C08J/w5dCP8PXwX/FV8G/xljDP8cahX/ + I3EZ/yp6H/8wgSL/NIQk/zeIJP87iif/PIor/z+MMP9HkDf/TZM8/1KVPv9Skz3/VpM//1eSPv9ck0P/ + Y5hM/2mcVv9womD/dqdp/3uqd/9/sIj/lcWu/67Zzf+74dP/zunY/97u3//l7+b/6fLn/+n06v/f8+// + z+7w/8Hq7v+q5Oj/idrh/2zT4/9m0+T/X9Hf/0nL2P86xdT/OcLV/zu/0/84vc//Nr7O/zG4xv8xtMX/ + Ka++/yKotf8dpa3/GqGj/xecl/8VmIn/FZN7/xiRbv8bkWH/G5JZ/xiQVv8XjFD/IYtJ/0KaT/9bqlX/ + ZLFW/1+uUv9atE7/U8FH/07NQP9Kzjv/Rsg0/0S8Lv8/tin/O8sx/1ffT/9n4WD/edt0/5nclf+v2az/ + qLuk/2BmXv9UU1T/YGBg/2VlZf+RkZH/2dnZ/+/v7//Z2dn/ycnJ/76+vv/Nzc3/5+fnNwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0f/ZGRk/4CAgP+VlZX/ + oqKi/6ysrP9oaGj/UFBQ/2dnZ/9lZWT/mJuU/56zmv9xoG7/WppY/0KMP/86gTX/HVkY/wQeAv8JDwP/ + DCsG/w1LCP8KWwj/Cl0F/wxeBv8YZQj/H2wO/x9xF/8kdxr/Kn4f/y+BIf8xhCD/M4Me/zKEIP83hif/ + QYov/0qROP9RlT7/VJY//1OTO/9UkTv/VY86/1qRQP9jl0v/aZxV/2+gYP93p2z/fa17/4K0jv+Mwab/ + sNvQ/8Ll2P/W7N//4vDj/+jx6f/r8+r/7PXt/+X28P/b8/L/ze/x/7fp7f+V3+j/c9bl/2nT5v9j0+P/ + U9Df/1DQ5f9QzOX/R8TY/0PC1P84vsz/MrrH/zC1xP8psL7/J626/yOps/8fpKn/G5+c/xeaj/8VlID/ + FY9x/xWNY/8UiVb/GYxS/yqUVv84lVH/SJVR/1OZTv9dpFL/Zqxc/1ytU/9QskX/Sb4//0rHPv9JyDr/ + Rb0y/zu1KP8rvSD/StlA/2XsXf9v4mf/jeKG/5vWlf+pyqX/h5SF/1JRU/9iYWL/Y2Nj/3R0dP+/v7// + 7u7u/93d3f/Kysr/w8PD/8vLy//i4uJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEtLS/9vb2//h4eH/5ycnP+oqKj/kpKS/1paWv9ZWVn/ZmZm/3R0c/+ep5v/ + h6WD/2CXXP9RnE3/Poo4/yZnIf8PNwr/BA4B/wQhAf8KPAP/DlcF/wthB/8LYgz/EWcP/x90EP8hdg// + HHIQ/yJ4Ff8ofhr/LIIf/zGFIf8zhSH/NYci/zyJKf9FizD/So40/0yONv9NjTT/UI41/1iSPf9ck0D/ + X5VE/2aZT/9snVj/caFj/3upcv+Ar4H/greS/4/Dqv+03dP/yefd/9ru4f/m8eX/5/Hp/+rz6f/u9u// + 6vfy/+L19P/X8vP/x+/x/6jn8f9+2un/atPl/2LR4v9Uztz/VNHi/1nP5f9Pxtf/TsXX/z/Bzf84vsv/ + M7nH/ymzv/8nr73/JKy3/x+nq/8Zop7/FJ6S/xWahv8UlHf/EY1m/xuPXv8plFr/OZdZ/06cXP9eoVz/ + W51T/1eaTv9coFL/VZ9L/02iQ/9LrEH/TLhA/0vBQP9Iwzz/P78y/y64If9AzDP/XeVQ/2zoYv+D5Hv/ + idKE/6DPnP+kuKH/ZWNl/2BfYP9lZWX/Y2Nj/6Ojo//m5ub/4uLi/87Ozv/FxcX/ycnJ/97e3k0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExM/3h4eP+NjY3/ + nZ2c/66ur/97e3z/U1NT/2FhYf9hYGH/iIiI/5ypmP92mXP/U5FP/0WVP/83hTD/EEYL/wUXAv8JEgX/ + BDwB/wlQAv8PYQP/D2YM/xNpGv8acR//H3wU/x99Df8geg//JX0V/yqAGv8uhB//MIUh/zSIJP83iSb/ + Pokq/0eLMP9JizH/S4sw/0yLMf9QjTT/WJA7/2GVQ/9kmEr/aZpR/22eW/90pWn/fqt4/4Gyhf+At5P/ + mMm1/7zh2f/P6t//3e7i/+fx5f/q8+v/7vXu//D37//t9/T/6/j1/+P28//T8/P/t+72/5Di8/9w2Oz/ + ZNTp/1XP3v9Uz97/WM7e/17N4P9dzuP/S8jX/zvBzv82vsv/MLnG/yu0wv8osLz/Jq20/yOrrP8ep57/ + GqGO/xibff8Tk23/HZNi/zicYv9YpGr/YKNj/2WlXv9ho1r/W55U/0+WSP9Plkb/UZhH/1CeRv9MpkP/ + RrI+/0DBOv89xjb/PLsu/za5Jf9N1T3/bu5f/33mcf+E137/mtSX/6/Lrv+Ef4T/V1dY/2RkZP9YWVj/ + jIuL/9vb2//o6Oj/1tXW/8bGxv/Hx8f/2traVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/enp6/46NkP+foJ//rK2r/2praf9QUlL/YmNk/2RmZf+VmZP/ + jaKL/2mVYv9KkUH/OYsy/yhtIv8FKAL/CBgF/xIuDP8FUQH/Cl4C/xBpBf8UbhH/GXIe/xp4Hv8WfA// + Gn4L/ySCFP8mgxb/K4Mb/y+FIP8xhyL/NIgl/zeIJf87hyX/QYgo/0eKLP9LjC//UI4y/1SRN/9akz3/ + YZdF/2WaS/9pnVP/bqBf/3Snbf99rnv/gLWJ/4O8mf+GwaX/s9zR/9Hq4f/g8OT/6vLm/+zz7f/v9u// + 8vjw//H49P/x+fX/6vfw/+L49v/B8ff/muf1/3DY6/9i1uv/WNTj/1TQ2/9b0Nv/aNPl/2bU6f9Qy9z/ + O8TP/zXAzP8yvMj/L7fE/yy0v/8qsbn/KK+y/yGspf8dpZD/GJ57/xaYcf8glmb/SKJq/2uwcv9srGX/ + ZaRc/2GiWf9hpVv/T5hK/0+XR/9SmEr/UJlJ/0eaQf89oDn/Na00/zi4M/9IxTT/MLMe/znAKv9n6lv/ + dudt/4Tge/+X2JL/rdKs/5eflv9YWlb/YV1g/1ZTVv92d3f/ysvK/+3u7f/Y2dj/x8fH/8jIyP/b29tU + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1dXf96enr/ + iYiQ/6aoqP+doZf/WVtV/1BUVf9eY2b/doF5/5OnkP9ylnH/U5NJ/z+UL/8xgSr/EEIT/wMbAf8EOQT/ + BEwB/wVdAf8KZAX/Em4N/xh4Ef8YfxH/Fn8P/xN+C/8Xfg//H4AV/yKBGP8ohBz/LoYg/zKJJP81iiX/ + OIok/zuKI/8/iiT/RIsn/0qOK/9QkC//U5M1/1eXPP9emkT/Zp1N/2qgV/9vpGP/dKpy/32xgf+BuI7/ + hsCd/4fDpv+03dL/1+3j/+Pw5f/r8+j/7vXu//D38f/z+PL/9Pn1//X69P/z+vP/6vr3/831+/+K3eP/ + adbl/1nV5v9W1eP/Wdbg/2bY5f9t2er/Y9Tk/1HP3P8/ydT/NsTO/zbAyv81u8b/NLfD/zG0vf8or7L/ + Gqih/xiijP8YnXv/GJlw/yqcav9Yq3T/dLN0/3GuaP9oq2P/Y6df/16jV/9VnU//TplI/0mYRP9Fl0H/ + Qpc+/z+XPP89lTv/PJs1/0jFKf87vyf/KbIf/0rURP907mr/feZx/5Lbiv+m3KD/m7+W/2hxY/9hVV3/ + XVNd/2BjY/+stK7/7PHt/9fY1//Jycn/zc3N/97e3k8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/3t7e/+Pjpb/qKqq/5CTi/9VVlH/VVZY/19kZv95iHr/ + i6OI/2uWaf9OkUb/NYsp/yR0Hv8FOwj/AisD/wQ/Bf8LVwX/CWQG/w5qC/8UdBH/GHsT/xl/E/8WfxD/ + E38M/xd/Dv8ggRX/I4IX/yeDGv8shh7/MYgh/zKIIf80hx//O4ki/0GKJf9HjCj/TI8s/1KRMf9VlDf/ + WJc+/1+aRv9lnk//aaFY/26lZv90q3X/fbKD/4K5kf+Dv5z/i8at/6rYy//P6eD/5fHn/+zz6f/v9e// + 8ffy//T58//2+vX/+Pr0//n89f/u+/f/1fj7/5rk6/9q1+P/WNbo/1HU4P9Z1uD/Z9nl/23a6f9h1eX/ + Tc7b/zzJ0/83xc//N8HL/ze9yP84ucb/NLbB/yyxtv8fq6b/G6aR/x2hff8hn3f/O6R2/2Swe/91s3L/ + dLBq/2mrZf9lqGH/YaRa/1efUv9Qm0r/SZhE/0SXQP9Aljz/PJQ5/ziTN/8zki7/NaQh/0nAOf83uS3/ + Nbsp/336bP966Wz/j+CI/6Tfov+ozKP/eYRz/2FWXv9bUlz/WFtb/56noP/j5+T/19fX/8rKyv/Ozs7/ + 3t7eTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiYmL/ + fn19/5WYm/+prKv/f4F5/05OSv9ZWlz/YGhm/3ySfv9+nnr/YJJb/0WNPf8ogSD/EWMN/wI4Av8EQQr/ + CE0J/xJnEP8QcA7/E3UQ/xh7Ff8Zfxb/GYIV/xaBEf8Ufw3/GIAP/yCBFv8ighb/JoQY/yqFGf8vhxz/ + NIkf/zeJIP87iiL/QIsm/0WNKv9LkDD/UZM1/1aVPP9amUP/YJxM/2WgVP9po1//badq/3Wtef9+s4f/ + hLmQ/4bAn/+GxrT/k9DG/7nh2P/i8ub/6/Xn/+317f/v+PP/8Pn0//L69f/3+/b/+vr4//n8+//q/Pz/ + zPf5/4Di5/9Z2OX/WtTd/2jZ5/9j2eb/Vtbj/07V5P9F0eH/OcnY/zjF1P83wc7/N77I/za6xv8zt8D/ + KbK2/yCtq/8cqJ3/HqOI/zGjd/9br33/dbZ//3Wzdf9zsG3/b61l/2ipYP9fpVv/V6FT/1CdS/9JmUT/ + Q5Y+/z6UOv84kTX/M44x/y6LLP8tjCT/OqYy/zy0MP82uST/c/Fb/33yav+M6Ij/neKf/7Tcr/+Nmoj/ + YVhe/1tTW/9PUlH/jJSO/9nc2v/Z2Nj/zMzM/9HR0f/g4OBHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZv+AgID/mp6i/6epqf9ub2r/SklF/2BgYf9kbWj/ + fpp+/3Cbav9Wj0v/OoYy/yB5HP8DVAL/A0AD/w1SDP8MXg7/FXUX/xV7FP8WfhX/GYAX/xqCF/8Zgxb/ + F4IT/xaBD/8ZgRL/IIMW/yODF/8mhRj/KoYZ/y+HG/80iR7/OIoh/z2MJP9Bjij/Ro8s/0ySMv9SlDf/ + V5c+/1uaRf9hnU3/ZqFX/2qkYf9uqWz/dq57/3+0if+EupL/h8Cg/4XGs/+PzsX/r93V/+Hy6v/p9Or/ + 7Pbu//D48//x+fX/8vr2//f79//7+/r/+fv8/+r6/P/H8/H/jeTl/27e6P9r2eD/feHw/3Pg7/9Z1uH/ + RtHc/z7O2/85ydj/OcbV/zjD0P83vsr/N7zG/zS5wf8rtLn/JK+v/yKso/8sqpH/SK6G/2m1gv93tnv/ + drN0/3Owbf9urWb/Z6lg/1+mW/9YolT/Up9N/0qaRv9Elz//PZM5/zePM/8xjC7/L4ou/zSHNP8igB// + MKAn/0LBLf9f3ET/gfpu/4jshv+V4Zr/uOS0/5ytmf9hXl//WVRZ/0hLSf98g33/09bU/93c3f/Ozs7/ + 0tLS/+Hh4UYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + a2tr/4ODg/+doqb/n6Ki/2NhXv9KRUT/ZmVl/2h1af98nnn/YZdY/0eNOf8vgSf/GnMZ/wJNAv8FUgL/ + EWML/xBwE/8RfRf/FIIW/xWCF/8YhBj/GYQY/xmEFv8YgxT/GYMV/xyDFf8ggxf/I4QY/yaFGP8qhhr/ + Logb/zOJHv84iyH/PY0l/0KOKf9GkC3/TJMz/1OVOP9YmD//XJtG/2KeT/9nolj/aqVi/2+pbv93r3z/ + gLWK/4W6lP+HwKD/hcWx/4vNwf+j2dD/1vDr/+b17f/p9u//7/jz//L59f/z+vb/9vv3//v7+f/6+/v/ + 7fz8/8719P+p7vD/kOnw/4rk6v+T6vX/iej2/23d6v9Q1N//QtHe/zrL2v85x9b/OMTQ/zjAy/83vcf/ + NLrB/y62uv8nsrP/J66j/zStkf9MroD/aLJ5/3i1eP93s3P/cbBs/2ytZf9lqV//X6Za/1mkVf9SoE7/ + S5xH/0WYQf8+kzr/OJA1/zKNL/8wjDD/Noc6/yB2H/8fhxn/Nasl/1TMPv9/9m3/hOqB/5HilP+05rH/ + pr2j/2loZ/9YVVn/QUZE/210cP/Q0dD/5OHi/9DR0f/U1NT/4uLiQQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvb2//hoaG/5yipf+UmZn/X11a/01GR/9samn/ + a3xs/3Wfcv9VlEv/O4sr/yiAIv8TbhX/AlUC/w5kBf8Tbwz/DnsU/wmBFP8RhRX/EYQV/xSEFf8VhBX/ + F4UX/xmFF/8chhf/HoYY/yGFGf8khhr/KIcb/yuIHP8wih7/NIsg/zmMIv89jiX/Q5Aq/0iSL/9OlDX/ + VZc6/1qaQf9enEn/Y6BR/2mjW/9spmX/cKtw/3iwf/+Bto3/hbuW/4jAov+FxK//icu+/5fVzP+85+P/ + 3PXu/+f27//v+PP/8/r2//L79//1/Pf/+vz5//n7+f/y/f3/1vf1/8L09v+y8/f/p+/y/6Pv9v+V6fP/ + fuHs/13X4v9E0tz/OczY/zrJ1v85x9L/OcLM/zi/x/81vMP/MLi9/yu1tv8vsqj/PbGU/1azhf9wtn3/ + erV3/3izcv9xsGz/a61m/2WqYP9fp1r/WaRU/1KgTv9MnUj/R5tD/0CWPP86kjf/NZAz/zCNMP8wiTP/ + Koct/xl8Gf8chhX/Tbo8/3XjZf+G64L/kuST/67lrP+sx6n/dHZy/1dWWP8+REH/Y2pm/8rJyv/l4uT/ + 0tPT/9bW1v/k5OQ9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAHNzc/+IiIj/mKCj/4qQkP9fW1r/UUlK/3Fvbf9wgnH/bp5q/0yRQv8xiB//J4Mi/wlmDv8KYwr/ + GXMN/xh7Df8LgA//BIEP/w2DEf8OgxH/D4QR/xCEEv8WhRb/GYcX/x2JG/8fiBr/IYYZ/ySHGv8niBv/ + K4od/y+LHv80jCD/OI4i/z6QJ/9Dkiv/SJQw/06WNv9UmDv/WZpC/1ydSf9joVL/aKVc/2yoZv9xrHL/ + eLGA/4C3jf+Eu5f/icKm/4nGsf+Jy77/mNfW/5/c2f++6OX/5fjy//H59f/1+vf/8/z4//T99v/5/Pb/ + +/36//P9/P/i+/r/0/n4/8L18/+u8Ov/qPDx/6Lt8/+N5e//bd3n/0vW3/890dz/PMzZ/zrI0/84xM3/ + N8HI/zS+xP8wu77/Kri4/zG2qv9CtZr/WraJ/2+1e/94tHP/eLNw/3Kybf9rr2f/ZKtg/1+nWv9YpFX/ + UqJP/02fSf9HnET/Qpo//z2YO/84lTf/M5Iy/y+RK/8tji//HH0g/xd3Fv8zkij/Zs1Z/5T0jv+W6JX/ + q+Sp/7HQr/+BhH//V1dZ/ztCP/9ZX1v/w8DD/+Xi5P/V1dX/19fX/+Tk5D0AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0/4eHh/+boaX/hoyM/1pZWP9QSkv/ + b25r/3KFbv9pnGL/Qo84/y+GHf8jgR//BmUM/w9vEf8YeRL/FYAP/wmBDP8HgxD/DYMR/w2EEf8PhRL/ + EYQT/xWGF/8aiBn/HYoc/x+JG/8ghxn/I4gb/yaJHP8qix3/Lowe/zONIP84jyP/PZEn/0OSK/9IlDD/ + Tpc2/1SZO/9Zm0L/XZ5L/2OhU/9ppV3/bKho/3Gsc/94sYH/gLeO/4K7mP+IwaX/g8Op/47PxP+Y2t// + l9zh/6jh3f/d9fD/8fn0//X69//y/Pj/8/32//j99v/7/vn/9v77/+f7+P/c+fj/zPb2/7Xy7f+r8O// + qu/0/53p8/964On/T9fc/z3S2f89z9r/O8vT/zjHzv83w8n/NcDE/zC8v/8rubj/Lret/z+2nf9WtYv/ + bLR7/3ezcv93s3D/crFs/2qvZf9jq1//XadZ/1ilVP9Sok7/TJ9J/0edRP9Cm0D/P5o8/zmXOP8zljP/ + MZgp/yiOKf8ghSf/HHwh/x93Hv9StEv/nviY/5vrlv+r56j/tNWy/4aOhv9YWVr/PkNA/1dbWP+6uLv/ + 4N7h/9PT0//Z2dn36OjoMAAAAAD4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABzc3PMhISE/6iqrv+Gjo3/SFFO/0VISP9lZ2L/coNq/2KbWv80iiz/L4Qm/xhyE/8HbAn/ + BnUN/wd9Ef8HgBL/DIcW/xGLGf8Rhhj/EocY/xOIGf8UiBn/Foga/xiIGv8aiRr/HIob/x+LHP8ijB3/ + Jo0e/ymOH/8ujyD/MpAi/zeSJf89lCn/QpUt/0eXMv9NmTj/VJw9/1meRP9doE3/Y6RV/2ioX/9sq2n/ + ca91/3izgv+AuZD/gLyY/4PBov+Ixqv/ltTM/43Y3P+W4Ov/pePj/9bz7v/x+fP/9fr4//L8+P/y/ff/ + 9/32//z++P/5/vv/6/z4/+L6+v/T+Pv/ufXz/6vx8P+s7/P/qOv2/4jl7/9W297/QNTa/0DR3P89ztb/ + O8rQ/zrFy/82wsX/ML/A/yu8uv8subH/Obej/1G2j/9ntXz/c7Ry/3Wzb/9ws2z/aLBk/2GsXv9cqVr/ + VaZS/0+kTP9JoUb/RZ9C/0CdPv88mzr/Npg1/y+VL/8slSv/MZsz/ySOKf8bgSL/IH4l/yuHLf+P4Yz/ + qvOi/7HoqP+02bT/hJKI/1laWv9IREL/XFpX/7W2t//a293/zMzL/93d3Zj29vYF+Pj4Afj4+An4+PgA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp6emaKior/qKis/4eNjP9IUU// + RUhI/2ZoY/9vg2n/YZpZ/zSLLf8mfR//FXEQ/wlwCv8KehH/C4QW/wuEFf8NiBb/EYsZ/xGIGP8SiBn/ + FIkZ/xWJGf8XiRr/GYka/xuKG/8dixz/IIwd/yONHf8mjh7/Ko8g/y6QIf8zkSL/N5Ml/z2UKf9Dli7/ + SJgy/06aOP9UnT7/WZ9E/1yhTf9jpVX/aKhf/2ysaf9xr3X/eLSC/4C5kP+AvJj/h8Om/4jGq/+U08v/ + jNjd/5De6P+c4OD/xu3l//H59f/3+vf/8/z4//P99//3/ff//P74//r++//u/ff/5vr6/9j5/f+99/f/ + q/Lx/6ru8f+o7PX/jujy/2Hf4/9F193/QNLe/z7P2P89y9H/OsfL/zbExf8xwb//Lb25/yq6s/80t6b/ + TLaR/2K0ff9ws3L/dLNu/2+yav9osGP/Yaxd/1ypWP9WplL/UKRL/0qhRv9Fn0L/QZ0//z2cO/83mTb/ + MZcy/zCYMf8slzD/J5Is/yePL/8fgCX/DGoN/12zW/+2/rH/s+uq/7nduf+OnJL/V1hX/z87OP9YV1T/ + wMLD/+Li5f/Nzc3/4eHhkuvr6wL4+PgB+Pj4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAhISEDY2NjvKnpan/iIyM/0pST/9GSEj/Zmhj/2yAZv9cmFb/M40v/xt3F/8QcQ7/ + C3UQ/w5/Fv8PiRr/DooZ/xCKGf8SjBr/EYoY/xKKGP8Tixn/FIsZ/xaLGf8YjBr/Gowb/xyNG/8fjhz/ + Io8d/yaPHf8pkR//LZIg/zKTIv83lSX/PZYp/0OYLP9HmTH/TZw3/1SePf9ZoEP/XKNL/2KmVP9mqF7/ + aqto/26vc/90s4D/fLiM/368lv+EwaP/hMOq/4bKvP+P19X/kN7e/5Lf2f+v6ef/4/f1//f58//4+/f/ + +f36//n9+v/5/fr/+f76//n++v/y/vn/5f35/9H69v+28/D/oe/u/5Tt8/+A6PH/Zd7i/0rW3P8/097/ + O9LY/zfNzv8zyMX/NMXB/zXCvf83wbr/Mb21/zW7rf9EuJf/U7N9/2Syb/9tsWb/bbBi/2euXf9hq1f/ + X6lU/1amTf9Nokb/R6FD/0OgQv8/nkD/Opw7/zabOf8ymTT/M5s0/yyWL/8mkiz/KZMv/ySIKv8GZQj/ + KYUp/6Txn/++9bb/ut+7/5Cflv9SUlL/Ojc1/1tbVv/Iycv/5OXn/9DQ0P/l5eWM7u7uAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjYyNmaShpP+Oj5D/ + T1VS/0RGRv9jZWH/aX5k/1iVU/8viy3/EXIQ/w5zD/8OfBT/EYYa/xGMHv8Rjxz/E44a/xOOGv8SjBr/ + E4wa/xSMG/8WjRv/F40b/xmOHP8bjhz/Ho8d/yCPHv8jkB7/JpEf/yqSIP8vkyH/M5Uj/ziWJ/89mCv/ + Q5ku/0ibM/9NnTj/VJ89/1mhRP9cpEz/YqdU/2apXf9pq2f/ba9y/3Szf/97uIv/fbyU/4LBof+Ew6r/ + hsq6/5DX0/+T393/k+Da/6vo5//b9PP/9vjz//f69//5/Pr/+fz6//j9+v/4/vr/+f75//X++P/p/ff/ + 2fr3/7308v+k8PD/jOvu/3Xk5/9k3t//VNje/0nV3v9E0tj/P87P/zrKx/86x8L/PcO//z7Bu/83vrf/ + Ob6w/0e6m/9UtYH/Xa9p/2auX/9nrFn/YKlS/1qnTf9Xpkr/UqNG/0uhQv9HoUH/RKBB/0CfQP88nj3/ + N5w5/zOaNf8znDT/Lpox/yWRKv8ikCr/K5Ix/xN7GP8Lbgz/cMRr/8f8vv+84b3/jZuR/0tLS/86NzX/ + ZmVh/8vMzv/g4OL/1dXV9evr62T19fUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAACKiYozop2g/5mXmP9ZXVv/QUJD/1xgW/9mfGH/UpBO/yaFJP8KcQz/ + DnoT/xGEHP8Qix3/EI8d/xOQHf8UkRz/E5EZ/xKPG/8Tjxv/FJAc/xaQHP8XkBz/GZEd/xuRHf8dkh7/ + IJMe/yOTH/8mlCD/KpUh/y6XIv8ymCT/N5kn/z2aK/9DnC//R50z/02eOf9ToD7/WKNE/1ymS/9hqFL/ + Zqpb/2msZv9sr3H/c7J9/3q3if98vJP/gMCd/4TDqf+EyLX/jdTO/5Te3f+W4N3/qefm/9Ty8v/w+PT/ + 9Pr3//f7+f/5/Pn/+v35//n++f/5/vr/9/35//D9+f/g+vn/xvb2/6nx8/+N6+z/dOTl/2bg3/9g3OH/ + WNfe/0/T1/9K0NL/RszM/0XJx/9IxsX/SsTA/0HDu/9AwbL/Tb6e/1m4g/9WrWH/YaxY/2SrUv9dqUv/ + VqVE/1KlQv9Ooj//SaA9/0agPv9DoD7/QKA+/z2fPf83nTn/Mpo0/zGaMv8vmzL/KJcu/yWWLf8tmTb/ + Howl/wpzDf85jzX/uO6w/8Xqxf+MmZH/QUJC/zUyMP9wbmv/0NDS/9zd3//b29vi8/PzB/f39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACknaLM + pKGh/2VnZf8/Pz//VVlU/2J6X/9MjEv/G30c/wp2D/8Sghn/FIwf/w2MHP8MjRr/EZEc/xWTHP8Vkhv/ + EpIc/xOSHP8Ukh3/FZMd/xeTHv8Zkx7/G5Qf/x2UH/8glSD/IpYg/yaXIf8pmCL/LZgk/zKaJf82myj/ + PZws/0KcMP9HnzT/TaA5/1OhPv9Xo0P/XKVK/2GpUv9lq1r/aK1k/2yvb/9zsnv/ereH/3y8kv9+wZv/ + hcSn/4XHs/+H0MX/ld3d/5jg3v+p5+j/0/T0/+j39v/v+fj/9Pv4//f9+P/5/fj/+v75//j++v/5/fn/ + 9/z6/+f7+//O9/n/sPHy/5Ps7f9+5+n/b+Lk/2ne4f9i2dv/V9TU/1DR0f9Oz9D/T83M/1PKx/9XyML/ + T8W6/03EsP9XwZ7/X7qD/1KrWP9bqk//YKpL/12oR/9WpkH/UqU+/06iPP9IoDr/RJ85/z+eOP8/nzr/ + PJ85/zedNv8ymjP/L5cw/y2bMf8tnzX/LqE3/y2bN/8ajSL/FYMa/x97Hf+Tyov/yu/K/4qYjv87PDz/ + Mi4s/318eP/Y2dr/29vd/97e3aj4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyhp2atqav/bnBv/z0+PP9OU03/YHpf/0iLSP8SdBX/ + C3oT/xaLH/8XkiT/C4sb/wWIFf8PkBr/FpQc/xWTGv8Tkhv/FJIb/xWSHP8Wkxz/GJMd/xqUHf8clB7/ + HpUe/yCVH/8kliD/J5ch/yuYIv8umSL/Mpok/zebJ/88nSr/Qp4u/0efMv9LoDj/UqI9/1ajQv9bpUn/ + YKhP/2SsWP9orWL/a69t/3GyeP94toT/e72P/37Bmv+HxKf/isez/4XMv/+U2tj/oOPk/6fl5v/D7e// + 3PT0/+r5+P/z/Pn/+P35//v99//6/fj/+f36//v9+//5+/r/6vr6/9D2+P+08fL/m+3u/4jp6v955OT/ + c+Dh/3Dd3v9j2Nj/WtbV/1jT0v9b0M7/Ys/J/2XLwP9kyrn/X8Wq/2jCm/9it3f/VKlS/2GrTv9gqUf/ + WqZA/1OkOv9MojT/R580/0WfNf9BnjT/P581/z2fNv83nTP/Mpwx/y+aL/8uly3/MaAz/zCiNv8qnjP/ + K5w1/xyTJf8flCX/GngY/2+jZv/I7Mj/fIqB/zU3Nv84NTP/kZCM/+Di4//W1tj/3NzcbQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + rqKnDbKtr/J3eXj/PDk8/01PTf9bdFv/Q4dF/wtxD/8Mghf/FpAj/xaTJP8LjRv/B4oW/w2RGf8VlB3/ + FJMc/xSUHP8UlBz/FpQd/xeUHf8YlR7/GpUe/xyWH/8elh//IZcg/ySYIf8nmCH/Kpkj/y6aI/8ymyX/ + Npwn/zydKv9Cny//RqAz/0qhOP9Rozz/VqRB/1qmRf9gqE3/Y6tW/2euYP9qsWr/cLN2/3e2gf95u4z/ + fcCX/4jEpP+Lx7H/h8u8/5LX0/+k4ub/qubp/7Tp6P/O8fD/5Pn3/+769v/3/Pb/+v32//r9+P/4/Pr/ + +fz6//n7+//r+/v/0vb3/7Tw7v+d6+n/kOnp/4jn6P+J5uj/guLj/3Hb2v9n19X/Z9XR/3PV0f9zz8L/ + fc++/3nMr/9rxJf/e8SV/2W0a/9aq07/X6pI/1yoQv9Vpjz/UKQ2/0uiMf9GoDD/Q58x/0CfM/9AnzT/ + PJ40/zWcL/8wmi3/LZkr/y+bLv81pDb/L6I1/yOZLf8tnzj/JJsv/ySaLv8ZfRv/UZBL/7Xctf9wfHL/ + MS8w/0Q/P/+qqab/4+Tk/9XV1tjk5OQ6+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsrKxmY6Lj/9DN0P/U0tT/01gTf85gjz/ + Cn8R/w2RHP8Pkx3/D5Md/xCUHv8RlR//EZUf/xKVIP8Tlh//E5ge/xSYHv8VmB7/Fpgf/xeZH/8ZmSD/ + G5kg/x2aIf8gmiL/I5si/yacI/8pnST/LZ4l/zGfJv81oCj/OqAq/0GiLv9GozP/SaI3/0+jO/9UpUD/ + WKdF/16pTP9hqlP/ZK1d/2mxZ/9utHP/dbd+/3e7iP97v5X/hcKh/4vGr/+Jy7v/hdDF/5re3f+r5ur/ + quTh/7rq5f/a9vT/7/v2//T78f/5/PT/+v34//f8+v/4/Pv/9vz7/+r6+v/U9vf/u/Hw/6ft7P+Z6en/ + j+Xk/5Lk4/+W5OX/i+Dh/3va1v921M3/etDB/2zBn/+FyKf/ecWT/2O8df9qum//X69W/12sSv9cq0T/ + V6o+/0+oOf9KpjP/SKUv/0KiLf8+oS7/PaEx/z6hMv89oTX/N58x/zOdL/8wnC3/MKEy/zGhNP8xojf/ + MKI6/zSkQf8kmTP/I5g1/xWJI/8vkDX/hreG/25xaP8xIyv/UkhO/8jHxf/c3tv/2NnYafT09AH4+PgG + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAC0tbMzramu/1NHU/9FPkX/SV5J/yx4Mf8Uihz/D5Qc/w+VHP8PlBz/EJUd/xGVHv8RlR7/ + E5Yf/xSXH/8TmB7/FJge/xWYH/8WmB//GJkf/xqZIP8cmiH/Hpoh/yCbIv8jmyL/JZwj/ymdJP8sniX/ + MJ8m/zSgKP85oSz/PaEu/0KiMf9HpDb/TaU6/1KmP/9Wp0X/XKlL/2CrUv9jrVv/Z7Bl/22zcP91t3z/ + druG/3q/kf+Ewp7/icWs/4bItv+BzL7/jtfP/6Lh4f+l4+H/r+fi/87x7//q+vX/9vv0//n89P/5/Pf/ + 9vz6//X8+//y+/r/5/r6/9P29//A8fL/sO3v/6Pp6v+a5eX/nOTh/53j4P+V4N3/i9vV/4bVyP9nwZr/ + X7Z+/2S1c/9htGb/YLNd/1uuU/9hrk//YKxI/1urQ/9Wqj7/Tag5/0mmM/9IpjD/QaMu/z2iLf85nyz/ + OJ8t/zqgMf84oDH/Mp4v/zCdLP8xoTP/MqI1/zKkOP8zpDz/N6VD/yecNv8nmjf/HZAr/ymNMP9bkFz/ + UVdM/ygbIf9qYmb/3t3b/9bY1f/c3dte+fj5Afj4+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+ur7SbWNu/zczN/9EX0f/ + IHMn/xOPHP8QlR3/D5Yd/xCWHf8Qlx7/EZce/xOXH/8TmCD/E5gg/xKZH/8TmR//FJkf/xWZIP8XmiD/ + GJoh/xqaIf8cmyL/Hpsj/yGcI/8knST/Jp4l/yqeJv8unyf/MqAp/zehK/87oi7/QKQx/0WlNf9Lpjj/ + T6g+/1OpRP9Yq0r/XaxR/2GuWf9osWP/brNr/3W3df92uoD/d7yL/37Alv+ExaT/hciw/4fLuv+L0cb/ + ktbQ/5Ta2v+j4eT/wevu/+L29f/0+/b/+Pz0//j89//0+/j/1/Lt/9Ly8//Q8fL/yPD1/8Xu9v+46/H/ + r+fq/6nm5v+g49//nOHa/5rf1P+W2cb/ic+u/2q8g/9puHf/Z7Zu/2i0Zf9ns1z/Y7BV/1+vTv9brUf/ + V6tC/1KqPf9NqDj/SaY0/0WlMP9Aoy7/PaEs/zmgLf83oC3/N6Au/zegMP80oDD/MaAx/zOjN/8zozj/ + NKU7/zSmPf85p0b/LKA8/yuePP8mmTT/JIwr/zlyPP84QzX/KiEm/46Gi//u7u3/2drXpgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALq4vXmRiZP/NDQ2/zpaPv8ccyP/CowU/w+XHf8QmB7/EZkf/xGZH/8SmR// + E5kg/xSaIP8UmiD/E5sh/xSbIf8VmyH/Fpsi/xebIv8ZnCL/G5wj/xydI/8fnST/IZ4l/ySeJf8nnyb/ + KqAn/y6hKP8yoir/NqIs/zqkLv8+pDH/RKY1/0qoOP9Nqj3/UatE/1atSv9br1D/YLFY/2WzYf9rtWn/ + c7hz/3S6ff91vYj/fL+T/4HEn/+Ex6v/h8q2/4vPw/+R1M//k9jZ/5vd3v+15uX/zuzo//D59f/2+/b/ + 9vz4//H69//I7OH/tebf/6rg2P+s4d7/verv/6Te2/+Y29H/nN/V/5bbzf+D0bf/dMmj/3PEmP9vwIr/ + cbyA/3G6d/9vt3D/arRj/2eyWv9isFP/Xa9N/1qtR/9Wq0L/Uak8/0yoOP9IpzT/RKYx/z+kLv88oy3/ + OaIu/zehLv82ojD/NqMy/zajNP80ozT/N6U7/zenPf84qT//OKhD/z6rS/8ypEH/M6NC/yuhOf8kkiz/ + L200/yg3Jv9BOz3/tbC0/+7v7uLa3dsPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6ILm2vv5CSEb/ + Jkwr/xp5I/8GkBL/D5ke/xGaIP8QmR//EZsg/xKbIP8TmyD/FJwh/xScIv8TniL/E54i/xSeIv8WniP/ + F54j/xifI/8anyT/HJ8k/x6gJf8goCX/I6Em/yaiJ/8poij/LKMo/zCkKv81pS3/OaYv/z2mMf9CqDX/ + SKk4/0yqPf9QrET/Va5J/1mwUP9dslf/Y7Rf/2i2af9vuXH/cbt6/3O+hf95wI//f8Sb/4LGpv+FyrH/ + is6//5DTyv+T19P/mNrX/6zh3f++5t3/5PXy//D69f/y+vb/8fr2/9Dw6f+56ef/sOTg/6Te2P+f3NP/ + mdnO/5PYyP+K1L3/htCz/4XNrP+ByaP/esSU/3a/iP94voD/cLhx/2+3bP9qtWH/ZrNZ/2CxU/9cr03/ + Wa9H/1WtQf9Qqzz/Sqs3/0epNP9DqDH/PqQu/zqjLf83pC//OKQx/zelMv82pzT/NqY3/zWmOP86pz7/ + PKhB/z2rRf8+rEj/RLBR/zqqSP87qUn/Mag//yeeMv8uczT/HjEf/2lnZ//d2dz95+roQQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy8rQxmZsa/8fSCb/Fnsi/wuZGf8Qmx7/EZse/xGcH/8SnB// + E5wf/xSeIf8UnSD/FJ0h/xKeI/8SniP/E54j/xSeJP8WniT/F58l/xmfJf8boCX/HaAm/x+gJ/8ioSf/ + JaIo/yejKf8royr/L6Qs/zKlLf82pi//Oqcx/z+oNf9FqTj/Sas9/06sQv9Tr0j/V7FP/1uyVf9gtV3/ + Zrdm/2y6b/9vvHj/cb6C/3nCjP9+xZj/gcej/4TKrv+Jzbv/kNHH/5XW0P+c2tb/q+Db/7rm4P/S7+v/ + 5/f0//H79v/z+/f/1PPu/7rr6v+w5uL/quLc/6Le1v+e29D/ldjH/4zTvP+N0bT/h8ym/4DHnP97xJH/ + dMCD/3O+e/9vu3D/bLlq/2e2YP9ktVn/X7NT/1uxTf9XsEf/U65B/06sPP9Iqzj/RKk1/0CoMf87pC// + OKQt/zilMf82pTL/N6c0/zeoNv83qTn/N6k7/zypQv8/q0X/QK1J/0OwTf9KslX/QK5O/0KtUP81rUT/ + Kqc4/yt3Mv8nQCr/lZaV//Du8IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJyc9s + laGd/yxZNP8Teh//D6Ie/xCcH/8QnB//EZ0g/xGdIP8SnSD/E54h/xSeIf8UniL/E58l/xSgJf8UoCX/ + FqAl/xegJv8YoCb/GqEn/xuhJ/8doif/IKIo/yKjKf8loyn/KKQq/yulK/8vpiz/MaYu/zSnMP84qDP/ + Pak2/0KqOf9HrD3/TK1B/1GvR/9VsU3/WbJT/120Wv9jt2L/arlp/2u8cv9wv37/dsKI/3vFlP9+xp3/ + gcio/4bMtP+N0MD/k9XJ/5rZ0P+m3tj/s+Tf/7/o4f/i9vP/6/n0//H79f/T8uz/uezr/7Do5P+m49z/ + oN7U/5razP+S1sL/idK3/4bPrP+Dy6L/fMeX/3bDjP9ywIL/b714/2u7b/9luGf/ZLZf/2K1V/9eslH/ + WbFL/1WwRv9RrkD/Ta08/0irOP9DqjX/P6gy/zqkL/83pC3/NaUx/zanM/83qDX/N6o3/zirO/83rD3/ + P6pF/0CsSP9Cr0v/RrJQ/020WP9DsVH/Rq9U/ziwSP8qrDj/LHo1/0xnUP+/wsDR9/b3BwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xRa7w8H7SnhS/w5+HP8OoR//EqAh/xKfIf8SoCH/ + EqAh/xOhIv8ToCH/FKEi/xShI/8ToCX/FKAl/xWhJf8WoSX/F6Em/xihJv8aoib/G6En/x2iJ/8foij/ + IqMo/ySjKP8npSn/KqYq/y2nK/8wpy3/NKcv/zipMf88qTT/Qas3/0WsOv9LrUD/UK9F/1SyS/9YtFH/ + XbVY/2K4YP9oumf/a7xw/26/e/90wYT/ecWO/3vHmP9+yaP/hMyu/4zPuv+S08L/mNjK/6Hc1P+p4t3/ + sOTc/8/w6//n+fP/7vrw/9f07f+67Or/sOjh/6bj1/+e3s//l9rH/4/Wvf+G0rH/g86o/3/Lnv93xpP/ + csOI/2/Afv9svnT/aLtr/2O5Y/9itlv/YbRV/1yzT/9XsUr/VLBE/1CvP/9MrTr/R6w3/0OqNP8+qTH/ + OKYu/zamLf80pjD/N6gz/zapN/85rDv/Oq0+/zqtQP9Cq0b/QqxI/0ayT/9KtVb/ULZc/0m1WP9Ptlz/ + PrFN/yqrOv8uhDj/dpZ6/9/k4WoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAMnEyLhtmHL/CIoX/wqeHP8VpSf/FaUn/xSkJv8ToyX/E6Ml/xOiJP8SoSP/E6Ek/xSiJP8VoiT/ + FaMk/xajJP8XoyX/GKMl/xqkJf8boyX/HKMl/x6kJv8hpCb/I6Un/yamKP8ppir/LKcr/zCoLf8zqS7/ + Nqox/zurM/9ArTf/Ra06/0muPv9OsEP/U7JK/1e0T/9btlb/YLle/2a7Zf9ovW3/a792/3HCf/91xYr/ + d8eT/3rJnf+AzKr/h860/47Suv+T1sL/mtrO/5/f2f+p493/uOjd/9v07P/t+e7/2PPq/73s6P+y6N7/ + peLT/53ey/+W28H/jde3/4PTrP+Az6L/fcuZ/3bGjv9yw4P/b795/229b/9qu2f/ZLhf/2K2WP9ftVL/ + WrNN/1WyR/9SsUH/Tq88/0quOP9FrTb/QKwy/zuqL/81qiz/NKsu/zWsL/83rDT/O6w6/z2tP/9ArUL/ + Qq1F/0mwRf9FrEf/TbVX/1G3YP9Wt2j/WL1q/2bGc/9Nr1n/NaVC/ymUNP+Pv5T/8/DyQAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw8DCX2yYcf8IiRb/C58d/xOjJf8ToyX/ + E6Ml/xOjJf8SoyX/EqEj/xKhI/8ToST/FKIl/xSiJf8VoyX/FqMl/xejJf8Yoyb/GqMm/xqkJv8coyb/ + HaQm/yClJ/8ipij/JaYq/yioK/8qqCz/Lqkt/zGqL/81qzH/Oaw0/z2tNv9Crjr/R689/0ywQv9Qskf/ + U7RO/1e2Vf9cuVz/Y7xk/2a+bP9pwHT/cMN9/3TFh/93yZD/ecua/37Npf+F0K//i9K3/5DVvf+W2cn/ + mt3T/6Ti2f+x5tv/yO7g/+X37P/T8uj/vOvl/7Dm2/+m4s//nd/H/5jcv/+P2rX/hder/4HSof9/zpb/ + eMmM/3PFf/9wwnX/b79t/2u6Y/9muFv/YrdV/121T/9YtEr/U7JE/1CxP/9NsDv/SK44/0StNP8/rDH/ + Oqsv/zSrLf8zqy3/M6ww/zesNv87rTv/Pq5B/0KuRf9Er0f/S7NK/0evS/9QtVj/UrVh/1m4av9gwXD/ + bst6/1KyXf83p0X/LZc5/5C/lP/08fIVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADEwcMOapdw9giKFv8Knx3/EaEj/xGhI/8RoSP/EaEj/xGhI/8SoSP/EqIk/xOiJP8Toyb/ + E6Mm/xSkJv8VpCb/FqQn/xekJ/8YpCf/GaUn/xqkJ/8cpSj/HqYp/yGmKv8kpyv/J6gt/yqpLf8tqS// + MKow/zSrMv84rTT/Pa42/0GvOf9GsD3/SrFB/02zRf9QtEr/VLZP/1i5Vf9evFz/Yb1k/2bBbf9sxHb/ + ccd//3TJif97zZb/fs+f/4LQp/+J07D/jtW3/5TYvv+Z28b/nd7M/6bj1f+u5tv/vu3m/7fr5P+q5uD/ + o+PV/5/fyv+a3cH/l9u5/5HZsf+J16n/htOg/4XRlf99zov/dciA/2/Fdf9qwGv/ZL1i/1+5W/9dt1P/ + W7VN/1azSP9SskP/TbA//0mwO/9Grzj/Qq43/z6tNP85rDL/Nasv/zOsL/81rDT/Oa07/z2uQf9BsEX/ + RLBI/0izTf9PuFH/TLRS/1K2XP9VtGH/YLtt/2rHeP910IL/VbZh/zmpRv8xmj7/kL+U/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhmGmsCo4b/waaGf8QoCL/ + EaAj/xGhI/8SoiT/E6Ml/xOjJf8VpCb/FaQm/xSlKP8UpSj/FaUo/xamKP8Wpij/F6Yp/xmmKf8ZpSj/ + G6Yp/xymKf8epyr/IKgr/yOpLP8mqi3/Kasu/yyrL/8vrDD/M60x/zeuMv88rjT/QK83/0SwOv9IsT7/ + S7ND/061R/9RtUz/VbhS/1u6WP9fvWD/Yr9p/2nDcv9vxnz/ccmF/3jNkf97z5r/f9Gi/4XTq/+I1bH/ + j9a4/5PZv/+W3MT/neDN/53h0P+i5Nb/nOPU/5ji0/+W4Mv/k93A/5Hbt/+Q2bD/jNio/4fWov+G1Jr/ + hdKT/37Oiv93y4D/ccV1/2rCav9jvWH/Xbpa/1u3Uv9ZtUz/VLNH/0+yQv9LsD7/R686/0OvOP9Arjb/ + PK40/zmtMv80rTH/Na0z/zmuOf8+sED/QbFG/0SyS/9ItU//TblT/1C8V/9RuFn/WLdi/1y1Zv9qv3X/ + edCE/4HXjP9auGX/O6pK/zefQ/+Ww5v/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFyfZWIQlCH/A5cV/xChIv8SoiT/EqIk/xSkJv8VpSf/FqYo/xinKf8Xpyn/ + FKcp/xSnKP8Upyn/Fagp/xaoKf8XqCn/GKgq/xmoKf8aqCn/HKgq/x6oK/8gqSv/Iqos/yaqLf8oqi7/ + K6sv/y2sMP8xrTH/NK0z/zmvNf89rzf/QbA6/0SyPf9Is0D/S7VF/062Sv9SuFD/WLxW/1y+Xf9hwmf/ + acZw/2/Jef9zy4L/eM2N/3zPlP9/0Zv/gtOk/4HTqf+H1a//i9e1/4zZuf+S3cL/kt7D/5Lfxv+I3sD/ + h93B/4vdv/+K27X/i9mt/4zYp/+J1qD/hNSZ/4LTk/+B0Y3/e82E/3PJev9sxXD/ZsFn/1+9X/9ZuVf/ + V7dQ/1a2Sv9StEb/TbJC/0ixPv9EsTv/QrA5/z6wN/88sDX/OK81/zeuNf86sDr/PrJC/0S0Sf9HtU3/ + SbZR/0y4VP9QvVn/U79e/1a7Yf9fu2j/Z7pt/3jFgP+K3JP/jN2V/164av87q0z/PaVL/57NpegAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbLB1KBGVIv8Elxb/ + E6Ml/xSkJv8VpSf/F6cp/xmpK/8aqiz/Hast/xurLf8UqCn/Fagp/xWoKv8WqCr/F6kq/xepKv8ZqSv/ + Gakr/xqpKv8cqSv/Hakr/x+qLP8iqi3/JKst/yasLv8prC//LKwv/y+uMf8yrjP/NrA1/zmwN/88sTj/ + QLM8/0W1P/9Jt0P/TblI/1O9Tv9awVf/YcRe/2fHaP9vy3L/dM17/3fNgf96zon/fdCQ/3/Slf9/1Jz/ + fdWh/4HWqP+G167/htmx/4zcuv+M3b3/i929/3zbtf973LX/g921/4Tbrv+F2ab/iNih/4fVmv+B05P/ + f9KN/3zPh/90zH7/bch0/2fEa/9iwWL/Xr1c/1i6Vf9WuE//U7dK/061Rv9KtUL/RrQ+/0O0PP9Asjr/ + PLE3/zuwN/86sDj/PLE8/0GzRP9FtUr/SLZN/0q3Uf9NulX/T7tY/1G+XP9RwGD/Wr9m/2fBb/9xv3b/ + hs2M/5fin/+S4Jz/X7dr/zqpS/9AqU//qNmx2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB9v4UBEJId7AmbG/8VpSf/FqYo/xinKf8aqiv/G6wt/x2uL/8gsDH/ + Hq8x/xKpKf8UqSv/FKkr/xWpK/8Wqiz/F6ss/xirLP8Zqiz/Gaks/xqqLP8cqy3/Hast/yCsLv8irC7/ + JKwv/yatMP8prjH/La4y/zCvM/8zsDT/N7E2/zqxN/8+sjr/QrU9/0e3Qf9PvEn/V8BR/1/GWP9jyV7/ + Z81m/23Pbv91z3f/eNB+/3rPhP950oj/etWL/3jXkf9315f/e9ic/37Zov+B2af/hNut/4fds/+I3bb/ + ft2y/37etf9+3a3/f9qm/4DYnf+B1pf/gNWQ/33Tiv960oX/ds9//3HMd/9syHD/Z8Zn/2LCX/9cv1j/ + Vr1S/1O8Tf9Qu0j/S7pE/0e7QP9EuT7/Qbc7/z+0Of87sjf/OrE4/zuxPP8/skP/RLVJ/0i3Tv9KuVL/ + TLtW/068WP9PvVv/Tr5d/06/YP9bwWr/b8V2/3rFfv+R15X/ouqn/5fhoP9etWz/OadK/0KrU/+w47nH + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjRiz + DKMg/xaoKP8Xqiv/Gqwu/xyrMP8irTX/JK83/ya0OP8hsTT/Fqou/xeqLv8Xqi7/F6st/xarLP8Xqyz/ + F6ss/xirLP8Zqyz/Gqss/xusLf8drC3/IKwu/yKsLv8krS//Jq0v/ymtMP8srjD/Lq4y/zKvM/80sDP/ + OLE1/zyzOP9BtTz/RrhB/02+SP9WxE//XclW/1/NW/9hzl7/ZtBl/27RcP900Xj/ddJ8/3TTfv9z1X// + cdeD/3DYiP9z2Y3/d9qU/3nbmf983J//gd2m/4DcqP973Kn/geCx/3rbpP942Zr/eNiS/3rWjv951on/ + d9SF/3XSf/9z0Xn/bs9z/2nMbP9ly2T/Ysle/13GV/9Xw1H/UsFL/0zARv9JvkP/Rb5A/0K8Pf9AuTv/ + PrU5/zuyOv87sTv/PrNA/0C0Rf9Ctkr/RbhN/0i5Uf9Ku1X/Trxa/1G+Xf9Rvl//UL5j/17Ebf9yyHv/ + hMqI/53WoP+s67H/leGf/1e1Zv81pkj/SaxZ/7zsxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSLI3oKqh//D6oj/xGxKf8ZtjX/HKc3/zOrS/82qkv/ + M7hH/yi1Of8nrzz/JK87/yGvN/8drjP/Gq0v/xeuLP8Vrir/Fa4o/xatKP8XrSn/GK0r/xuuK/8drSz/ + IK0t/yKtLf8krS7/J64v/yquMP8srjD/L64x/zKuMv80rzT/OLA2/z60Ov9EukD/TL9G/1PGTP9Zy1H/ + WcxV/1bLVv9azFn/YMxg/2XNav9pzm//adBy/2fRc/9p0nb/a9R8/2/Wgv9z2Yr/ddmO/3bZkv952Zn/ + edib/3PXnP9926j/cteZ/3HVkP9v1In/cdWF/3DVgf9u1H7/b9R5/27Tc/9p0W3/ZM5n/2DMYf9dylv/ + WchV/1XFUP9QxEr/ScBD/0a9Qf9Cvj7/P7s8/z63PP87sjv/OrA6/zmwPP85sT//OrJB/zuzRf9Atkn/ + RbhP/0q7VP9TvVz/WMBi/1u/Zf9jvm7/Z8tz/3bRgv+X0Z//s8+3/7vkwv+J3Zf/QbtV/y6lRP9jq3H8 + 4PznRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Lpw9QAicGv8OqCP/Da4m/xKxLP8frjn/PrhW/z+yU/85uU3/M7xF/zG1Rf8ttUP/KrQ//ya0O/8gszf/ + HrIz/xyyMf8asS7/F64s/xitLP8ariv/G64s/x2tLP8frS3/Iq4t/ySuLv8mri//Kasw/yqmMv8roDT/ + K5o1/y2YNv8xmzn/OKU9/z+xQf9GvUX/TsZJ/1LGTf9Pwk7/SrlO/0ixTv9HrVP/TKxY/1CuXv9Tr2L/ + VLBj/1WzZ/9aumz/YcV0/2nPe/9p0X//aMuD/2bBhP9iuYT/WbWD/2e6kv9euob/YsCD/2XJfv9o0Xv/ + adR6/2fVdv9n1HP/Zs9t/17HZv9Wvl//ULVZ/0yvVP9JrlD/SbBN/0a0Rv9DuEH/QLs//z+7Pv88tT3/ + OKk9/zSfPf8xmj3/L5g9/y2ZPf8unT7/MKU//ziuQ/8/tk3/SbpV/1O/Xf9awWT/XsFo/2XAb/9szHf/ + ftSJ/53UpP+628D/uunD/4LZj/9AtVH/NaFG/4C8ie7a++EqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOsVwKC4sY+g+kI/8MrCP/C68m/x+0Of9Ix1// + S79f/0bBV/9CxFX/O71P/zq8Tf80u0r/L7pE/yu4P/8mtzr/JLc4/x+zNP8bsS//HbEw/x2xL/8dsC// + HbAv/x+wMP8hsDD/I68x/ySqMv8knzT/Io42/yB8N/8dbzj/H2o6/yJwPf8nfT//L5A//zimQf9DuUT/ + SL1H/0OvSP85lUj/MX5I/y5ySf8ucUv/MXFN/zNyUP8zc1D/N3lV/0CJW/9Po2T/XL1u/2HEc/9ctnP/ + T5pu/0OEaf86d2f/O3ls/zqEav9Dmmz/VbVx/2PJcv9p03H/ZdJu/2DMaf9Xu2H/S6Va/z6PVP81fk// + L3RM/y5ySv8vekj/M4lF/zicQP87rD7/OrM9/zaoPv8tkT//JntA/yJtQf8gaUH/IW5C/yN7Qf8okT// + MqZD/z62Tf9Jvlf/VMFf/13EZ/9gxWv/Z8Nz/3PNf/+J15X/pNqt/8Lryf+177//d9KF/0CwUP9DolH/ + oNSo2eD75wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQgR3KD50h/w+vJv8IsCL/GLY0/0jMYf9c0G//WMtp/0/JYv9Fwlj/QsFX/z7AUv84vk7/ + M7tI/y+5Q/8sukD/Jrc8/yK2Nv8jtTX/IbQ0/yG0M/8htDP/IbQy/yKzMv8jsDH/IqIy/x6INv8WZjj/ + DlxV/wpyh/8JgJ3/CoKe/w9zgP8ZYE3/JXZA/zKYQf86p0T/NZRE/xyJhP8OhKH/DYGh/w6Bov8OgaL/ + DoGj/w+Co/8PgqT/FIyn/zZ9Xv9Mp2L/Vbdo/0yhZv8klaH/FIiq/xCCqf8Pgqn/Eoir/yCVof9IoWb/ + W8Fp/2HPaf9by2X/Ubde/0CTVv8tak7/HV9j/xF0jv8NgaL/DYCh/w91j/8ZYF3/JWtA/y6MPv8xnzz/ + Lpg9/xyJav8Nip//CoCg/wqAoP8KgaH/Do2h/x+JYv8xoEb/QLdQ/0zBWv9XxWP/YMhr/2PKb/9syXn/ + gNCK/5vao/+v4Lf/xvfO/6rvtf9qynj/RKxU/16qaf++6cWvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGEL5ERmSP/ErMq/wa2Iv8Ptyv/ + PspX/2refv9s133/Xsxu/1HJZP9Ox2L/ScZd/0TDWP8/wVL/OL1N/zW7Sf8vvEb/LL1A/yu9Pv8ouzz/ + J7o6/yW5OP8kuTX/I7kz/yO0NP8emjP/FW42/wWawv8Avv3/Aqzj/weDov8JgZ//A6fb/wG59v8NfZT/ + IWlA/y2LQP8qgED/GlJG/wG7+P8Avv3/BKrf/wyBof8NgaH/DYGi/wqPuP8Bufb/JWhe/0CXV/9Msl7/ + Q51c/ytkVP8ReZr/AL79/wC+/f8Pe57/ImJP/0GeXP9Uwl//Wcxf/069W/89l1P/JmNU/wmVwf8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Ki6z/HmM+/yeIO/8ojjv/HW09/xBPVP8Avv3/AL79/wSl2f8YS0X/ + Jn5H/zWmSv9FvVX/UMVf/1vKaP9kzW//aM90/3TSgf+Q1pn/rd+0/7zpw/+++sj/lOih/1zCav9QsF7/ + h7+N/9f3220AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASqFWVhmdKv8TtCn/B7si/wi3Jf8vwEn/beGB/3vfiv9s0Xv/X9Jx/1zRb/9Xzmr/ + UMpk/0nIXf9DxVf/QMNU/zzDUP82xEr/NMNH/zDDRP8swUD/KL88/ya+Of8jvjf/I7o1/xWRL/8SXzj/ + Aqnf/waCov8NRTr/FVk9/xhWQP8SRED/B460/wC+/f8Oc4b/IWo+/yNvP/8YSUD/Abj0/wC+/f8JlcH/ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6rQKwFsRX/BLsS/xXBKP8iuTb/Ssxe/5X4pv+e4K3/ + ld+h/5DlnP+L5Zv/gd+W/3rbiv9z2Hn/addz/2PYdv9g13L/WdVt/1LUZv9K01//RdBZ/0PQVv89ylH/ + NbdL/yqTSP8ZXUT/CnqX/wKv5v8Avv3/AL79/wC+/f8Avv3/AL79/wiHpv8YZzv/HG86/xJKPP8BuPT/ + AL79/wOp3v8JgJ7/CoCe/weRuf8Gns3/IWo+/zOfPf8/wj//QslB/zuzQ/8qf0P/EWV2/wC+/f8Avv3/ + EGV1/yh+P/84sj//QchA/zy8QP8qj0H/F09B/wC+/f8Avv3/CIOj/xtpPf8qpTn/McM3/yy5Nv8gjjn/ + ElI8/wG49P8MYF7/FHU2/xN8Nf8OTjv/Abj0/wC+/f8IlcL/Emh//w2CpP8SeZT/JWJi/z58YP9ep3X/ + e8uK/5Demv+z57n/yfPO/8Pzyv+S25v/Y8hw/1K1X/94wYD81PvZSgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + acJ2KBWaH/sAugn/CMgY/yO+Nv8jsjb/cu6K/7bqyf+p6az/neaa/5vkpf+X4bH/idyg/37hgf955Hv/ + ct6E/27dfv9p2nn/Ydlz/1rXbP9V1mb/UNZj/0nOXP89slT/Kn9O/w2Anf8Avv3/AL79/wC+/f8Avv3/ + A6nf/wWXwv8Lb4X/F10//x+DOf8efTj/Ek07/wG49P8Avv3/A6ne/wiAnf8JgJ3/CIqu/wWezf8faDz/ + L5w6/zq8Ov88wjr/N689/yh9P/8QZXX/AL79/wC+/f8PZXT/J309/zavPP87wzz/NrU9/yeJPf8WTT// + AL79/wC+/f8IgJ3/Gmo6/yilN/8uxDX/Kroz/x6QNv8RUzv/Abj0/wxgXf8TdTX/Ens1/w1PO/8BuPT/ + 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 + vOvB/7nwvf+s7LT/qeuy/6Tprf+b6Kf/lOae/4zkmP+J5JX/fd6K/2rHfP9PmGz/J2ty/wO07/8DtO// + E2mB/xlGS/8WT1n/DXqZ/wG7+P8TaGv/HXFA/xdnPv8NQz3/ALv4/wC+/f8Cmcb/CEI7/wdBOv8HQTn/ + BHSM/wKPtv8FQDj/A4Kg/wN0i/8FPzj/BT83/wRjcv8Avv3/AL79/wJhbv8EPzf/BD82/wNyh/8Cgp// + BEA2/wRJRv8Avv3/AL79/wKNsv8FTzb/CYgt/wuoKP8Lnin/CG8w/wRCOP8AvPv/A2Fs/wVLN/8HUDj/ + CUI8/wC7+P8Avv3/CJfF/x1GUP8dUmT/C5fF/wC+/f8Avv3/LHua/3Kbjf+bz6n/iNuT/2LLcP9SwWD/ + d8OB/NH32EYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIHPf38bnhr/ + Cb0b/w+8Jv8GwRr/CLEN/1LOUf+09b3/3Pfr/9Dl3P/I78n/wvbC/7jwwv+28b7/sO60/6jrq/+g6qT/ + meih/5Toof+K5Jb/fdeI/2m8ff9KjGv/K2pv/w6UwP8FsOr/AL79/wC+/f8Ct/T/CKHS/x9xY/8mekf/ + F31s/weOs/8Avv3/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/Ap3L/wVAN/8CjbL/AL79/wC+/f8Avv3/ + AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/AL79/wKNsv8DX2j/AZC2/wC+/f8Avv3/AbDo/wOFmv8Igjj/ + Cp0o/wqVKf8FgmP/ApC2/wC+/f8BoM7/BGNp/wZhZf8EjbH/AL79/wC+/f8Avv3/AL79/wC+/f8Avv3/ + CK3m/yKDqf9XfXn/gLSV/4/Qm/9qynX/U75g/1u8Z/+28r+j3/7kBgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0+nTDIPDiOcdoyr/BacR/xiyJP8Ixw//B7wQ/0rKYP/G88n/ + +v3x/+H55P/G7db/xe7S/8j0zf/B77r/tuip/7DoqP+r6a3/oeaw/5nipf+T3pv/h9GU/3O5h/9Zl3X/ + Q3hn/zViXv8vWVr/KldW/yxeVf80dFj/OYxX/zaTU/8rgUv/H2VG/xhRRP8UTkL/E05B/xJOQP8PTj3/ + DU87/wtUOP8JXjX/CmYz/wtcNf8KUzb/CE02/wdMNf8GSjX/BEkz/wJJMv8DSjP/BUs1/wZLNv8GTTb/ + B1A1/wdTNf8HUDX/B001/wZMNf8HUjT/CGou/weKJv8InSL/B5kk/wd+Kf8GYTD/BVI1/wZWNf8LXzf/ + EGA7/xVXQf8bUEn/H09N/yNRUf8nVlP/LFZY/zZXYP9KZm//Y4aA/3Osif9txoH/ZNBz/1y9Y/9ns2// + pdasyOf77AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + wPDETW/KefgPnhb/B7sE/wavIP8KtDL/EKoX/1vLTv/F98D/5vvv/+Hu5f/Y69P/1/PZ/8zy0v/A78r/ + vvLH/7vyvv+w5q7/puSp/6Hmqv+b4aT/j9ma/37Ij/9utYL/Yad5/1qedP9SnW3/U6Nr/1Wta/9Stmf/ + TLZg/0CpWP84m1L/MZFO/yuNSP8pjEf/JoxD/yGLPv8dizv/GI82/xWXM/8VmjH/E5Ew/xCLL/8Ohi// + DYQu/wuEK/8Hgyn/BYIm/wWCJ/8Jgiv/CYMq/wmGKv8JiCn/CYko/wmHKP8JhSj/C4Uq/wuJKv8LkSX/ + CqAh/wmpH/8KpyD/C50l/wqRKf8KiSv/DIot/xONMv8bjjr/Jo1E/zOOUf88j1r/QpJf/0yXZv9Ql2r/ + YJ93/3Wwiv97u4v/b71+/2TEcv9ix27/Z7Rt/6Tep87P99QbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu+rBXmG/aPAIrwz/Dqkl/wumKP8JtRP/ + CaoG/02/Tv+98cP/6/bq//Hy6//n9uj/3/vm/9L43P/D7sz/v+nC/8nuyf++78D/r+u1/6vqsv+j6Kv/ + meGj/4/bmv+G1pP/gdKP/3rPhv92z4H/dNJ//2zSeP9kz3D/Wslo/1TEYv9OwV7/RbxV/0G6U/89uk7/ + NrhI/zC2Qv8puDv/Jbk4/yG4Nf8bsDD/Gq8v/xetLf8UrCn/Dqwl/wyrI/8IqR//Bqkf/wqqIf8KqiH/ + CKsf/wirHf8Iqxz/B6oc/weqGv8Lqx//Dqsi/wysH/8Lrh3/DLEd/w2zH/8QsSP/ErEm/xGuKP8VrSz/ + Hq8z/yuxPf85tUv/S7pb/1a/Z/9ewm7/bcN6/3HHfP92z4H/eNeG/3XWgv9synf/Ybxt/2W5b/+Vypm5 + yfPLFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAArOO1REe0UuYRlQv/BqQI/wi5Hf8AqxL/C6EM/03BTf+y7bn/6/n1/+r76v/q+OL/ + 5PXa/9722f/W9dv/yvDc/8Puzf++7sL/uuy+/7TruP+r57H/ouWp/5vko/+Y46D/kN+Y/4vdkv+G247/ + ftmH/3XVf/9s03f/Z9Fy/2PQbv9XyWL/U8hf/07HWf9GxVL/PsNL/zbBRP8xv0D/Lr49/yS5Nf8iuTT/ + Hrcx/xq3Lf8Vtin/EbUj/wy0If8LtB7/CbQc/wq0HP8Isxv/CLMY/weyFv8GshX/BLIT/wmzGf8Osx3/ + DrIb/w6xHP8PsRz/ErMg/xe2Jf8auSf/G7cr/yC2MP8pujn/OL5F/0jEVP9ZyWX/Y85v/2zQdv98z4P/ + etKA/3Tafv9u3nr/ZNFw/2C/a/9uvnj/gcaJmsPmww8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo86lJE+iQcwKkwj/ + AZ4O/wanG/8FqQ//BawF/yizMf+H0JT/z/fR//z+9P/89PH/9/Pw/+f97P/H+tj/yPHR/9Dt0f/K7cz/ + wuvE/7rovf+y5rf/q+Sx/6fjrf+h36X/m9yg/5fcnP+Q2ZT/h9WN/37ShP930H//c897/2fIcP9kx23/ + XMZm/1TDYP9MwFn/RL5Q/z68Sv86ukf/M7pC/zG5QP8stzv/JrY2/yC0Mf8csy3/GLIp/xSxJf8OsB// + DrAf/wyuHP8Krhj/Ca0X/werFP8HqxL/Cq4X/w2uGv8OrRv/Dqwc/xKsHf8XriL/HLIo/x+0Kv8nsjP/ + L7Q8/zi6Rf9Gv1L/VMRe/2LJa/9rzHX/cc16/33Og/94z4D/cdN5/2TOcP9VuWH/YLBq9YvKlXe37b8E + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAos+rEjiRQZsPhwv/EKAT/wSbD/8CqQX/AaoC/yKiIP94zHv/ + 0O/Y//f8/P/59v3/5PXn/9P8zP/Y99b/3vDe/9jv2f/Q7dL/yOrK/8Dpw/+55r3/teW7/7Dgs/+q3a3/ + pt2p/57aof+V15r/jNSR/4bSjP+C0Yj/eMx//3TJev9sx3X/Y8Rt/1rBZf9Rvlz/S7xW/0i6VP9Bukz/ + QLlK/zq3Rv8ztkD/LrQ5/yqxNP8msDD/Hq8r/xWtI/8VrSL/E6wg/xCpHf8OqBv/DKYX/wulFf8MqBb/ + C6kX/w6oGP8Ppxr/FKce/xupJf8hrSr/I68s/zKyPP89tkb/RrtQ/1LAW/9dxWX/aMhw/2/Jdv9yyXj/ + d8x+/3rSgf9uyHX/XLBj/2WtbeSFwo1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tNu2AE2hR2INiBXrBpUX/wufFf8Opwr/CKED/xOWF/9Mr1n/ouGy/+H96v/z/PL/7/Lj/+/z5//r9uv/ + 5fXl/97z3v/V8Nf/zu3Q/8fqyv/D68f/vuTA/7jhu/+14Lf/rd6v/6Pbpv+b2J7/lNaa/5DVlv+H0o7/ + hdCK/3zNhP9yyXv/acVy/1/Bav9awGT/Vr9g/0+8VP9MulL/SLhM/0C2R/86s0D/NLE7/zGvN/8prjL/ + HKsq/xyqKP8aqSX/F6Yi/xWlHv8Uoxv/EqIa/w2kF/8JpxX/DaQY/xCjGf8WpB7/Hacm/ySqK/8mqy7/ + OrND/0a4T/9PvVn/WsJi/2bFbf9uxnP/ccV2/3PEeP9tzHX/ZsJs/2CtZv9tq3Kyg7aIGwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKpUiYUixq8GIAV/yCMG/8NoRT/ + A5oG/wSXBv8lpyb/gdGB/9bt1v/18vX//ff7//f99v/y+fL/6fbp/+P04//a89z/0/HW/87x0f/K7Mv/ + xenF/7/mwP+45Ln/sOCx/6jdq/+i26X/n9ih/5TYmP+Q15X/iNOP/3/Qh/92zH7/bMh0/2jGcP9jwmv/ + W7xd/1i7Wv9TuVX/TbZP/0WzSf8+sUL/Oq8//zKtOf8lqzD/JKot/yKoKv8fpSb/HKMk/xigH/8Xnh3/ + EKIY/wylFP8Poxf/EqEY/xmjH/8hpSf/Kagu/y2qMv9FtEv/UbpZ/1i9X/9hwWb/acRu/27Ec/9wwnT/ + b8B1/2DBaf9Rp1jtVpxcboi5jAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAH64fQc8dTlsGnAY6gqMCv8BigL/A5kE/wSYB/8QhxD/QpxB/5zdl//o+Of/ + /f79///8/v/58/j/8fDw/+337f/l/ef/2fvc/9X81f/O+sv/xfDD/8Hqvv/C6L3/wOW7/7nbs/+u06r/ + nuCi/5rfnv+T2pf/jNOP/4TOiP9/yYP/fciB/3bEfP9nuW7/Zrls/2O5af9et2P/V7Rc/0+yVP9Lr07/ + Q61H/zesPP82qzn/Mqk1/y6mL/8ppCv/I6Ak/yCcIf8ZoB3/FaMb/xafG/8ZnB3/IZwl/yuhMP84qD3/ + Qa1F/1qzWv9kuGX/Zbtm/2S6Zv9kvGj/acBt/2a+av9btmH/WZlft22kdSgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/kD4g + D3sOowN5BPoEigf/CpsP/wSLBv8GfQb/JI4j/2qvav+v2bD/2/Ta//f+9f/1+PP/9PTx//j39f/z9PL/ + 6PDl/+Hs3f/Z6db/1evS/9Huz//J7cj/veS8/7Lbsf+32bb/tNe0/63Trv+lzqb/ncme/5XEl/+Sw5T/ + icGN/3DAd/9rvXL/ZLhp/1y0YP9YtVv/VrZa/1e7Wv9QtVT/QadF/z6mQv85pT3/NqU4/zKkMv8upC// + LaYt/yCeJf8YmCH/HZsm/yGZKv8mmS3/LZw3/zymRv9JslT/VrBZ/160Xv9jt2T/YrNk/2CvZP9lsGn/ + aLFs3lupYFyEvIoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEm4TPQppCsQEgQb/CJIN/waMB/8ChQL/ + CncK/x9/H/9YqVf/qt6n/93u2//0+vH///r5//zw+P/87vr/+e33//Ls7//p7un/4fHi/9bx2P/J68z/ + wOfE/8nhyf/H38j/wNzB/7bYt/+r067/n86j/5nJnP+UyZf/idCO/4fNiv+AyoL/dMR4/2u+bP9huGL/ + WLFY/1ixWv9ds2H/VK5Y/0urT/9BpkP/N6M5/zCgNP8uozD/J5kt/yCPKP8gjSn/JpEw/zWePf9Ap0z/ + RKlR/0KlTv9NrFP/UqxV/12wX/9psmv/YaBk7VONVYFelF8SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAP5FCBAlpCk8CbQLKBX4F/wmLCP8EhQP/BYMF/w+ADv8feh3/So5H/5HBj//S7c// + 5vvj//r9+v///P//9/b3/+vu7v/j6uT/3erf/9vq3v/X6tr/w+DF/7/gwf+63r7/suC2/6ver/+i26j/ + mtmh/5fUnP+ayZr/msqZ/5bKlf+OyI7/hsKF/3y9ev92uXL/a7Jr/2GsZP9isWX/XbNh/1SvV/9CpkX/ + LJcv/x2LIP8kjSb/MZMy/zOUM/81lzj/PJw//0SiSP9OrFT/WLRd/1yzX/9crl7/V6FZ71SUVJBbjVke + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACd6JwUFYAVL + BGAEwQl5CP0IgAb/AnUB/wV1BP8GcAf/DmwO/yqGK/9es1//odaj/8DmxP/T89b/5/vo//T99P/5/Pj/ + 9/f2//Hv7//c69v/2ezY/9br1f/O6c7/xeTF/7ndvP+u2LH/rNSv/7TOsf+tyqr/pMSf/5q+k/+Quov/ + irmE/4m4g/+GvoH/esZ7/2y5bv9XqVn/RJtF/zORNP8piyr/I4gk/yuNJ/82ki3/PJY0/0aeQP9Spkz/ + WKlS/1SjUP9PnUr/UphS6FGTUodQjlEfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDNgtlCp8KZwruA2gD/wFyA/8GfQf/ + BHcE/wdmB/8WaRj/LoAw/1mhWf+FwoX/sdyv/9DozP/i793/6/Pn/+rs5P/q7uX/6/Dl/+rv5v/m7eH/ + 3eba/9fh0//Q3cz/vNu4/7nZtf+z1q//qtCk/6DNm/+ZyZP/lsaO/4PAfv9fsl7/TaFN/zaNNf8ofib/ + JH0h/yqFJv8ykC//NZEu/zaQL/9Aljj/SZhB/06WRv9Rkkn/UI1Iy0SEPGc+dzsRAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAhPCBQCTQJgBGUDvgVvBfcGdQb/DH0K/wRrA/8AZgH/BmcF/w1nDP8bahj/ + Mncs/0qKRP9kn13/k72O/5vFmP+oz6T/tdmx/77fuv/E4b3/xeC+/8Hfu/+q36n/pdqj/5nSlv+HxIP/ + cbNu/1yiWP9NlUn/MoMu/w1vDP8UchH/GncW/yF8Hf8ogiP/L4Un/zSKLP8yii7/NIw2/z6PP/9CiUHf + P309k0R3QDddiVgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CVwHHwRYBGIMYwa1BGcB7QRsAP8JcQP/CHAD/wJoAP8AYwD/A2QC/wdnBv8OZA3/D2gP/xRwFf8aeBr/ + IXoj/yd6Jv8odyf/KXgo/y19Lv8qeSn/InQj/xpxGf8VbhP/EG4O/w9uDP8PdA7/En0Q/xV7Ef8ZexP/ + HnwY/yZ+Hv8vgST/NIQo/TOGMtEofDKOJHMsPi50NggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQALAE0APQJWAngEXQS1 + AV4A4ABgAP8AZAD/AGcA/wJpAf8BZwD/AGYA/wBkAP8BZAH/AmUC/wJmAv8CZwL/AmsD/wJqAv8CaQL/ + AmsB/wZtAv8Mcgb/EHUM/w90Cf8KbwX/EXIK/xt1E/UheRvLIXUcnBlpElYOXggjAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAACFIEHgJNAEIBUQBkBFsDkAVaBasEWATC + A1YD1gJWAuUBWQHyAlsC+gNdBP4GXgL9BVwC9gVcAuwHXQTeCV4GzA5iCbcQZg2fDWEHeghTAlMNVwcw + Gl4SCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////8AAP////////////// + ///AAAAH///////////////8AAAAAH//////////////4AAAAAAP/////////////4AAAAAAAf////// + //////wAAAAAAAB////////////wAAAAAAAAH///////////4AAAAAAAAAf//////////4AAAAAAAAAB + //////////4AAAAAAAAAAP/////////8AAAAAAAAAAA/////////8AAAAAAAAAAAH////////+AAAAAA + AAAAAA/////////AAAAAAAAAAAAD////////gAAAAAAAAAAAAf///////gAAAAAAAAAAAAD///////wA + AAAAAAAAAAAAf//////4AAAAAAAAAAAAAD//////8AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD/// + ///gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAAAAAAAAAA + AAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAA////4AAAAAAAA + AAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAD///4AAA + AAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP/ + /4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAA + AAAB//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAA + AAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB/ + /AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAA + AAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAA + AAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAX/wAAAAAAAAAAAAAAAAAAA/8AAAA + AAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB/ + /wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAA + AAAAf/+AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAH///AAAAAAAAA + AAAAAAAAD///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAP///8AAA + AAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH// + //gAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAA + AAB////8AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAB////+AAAAAAAA + AAAAAAAA/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAB/////wAA + AAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAA/// + ///AAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAD//////gAAAAAAAAAAAA + AB//////8AAAAAAAAAAAAAAf//////AAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAA + AAAAAAD///////4AAAAAAAAAAAAB////////AAAAAAAAAAAAA////////4AAAAAAAAAAAA/////////A + AAAAAAAAAAAf////////8AAAAAAAAAAAP/////////gAAAAAAAAAAP/////////+AAAAAAAAAAH///// + /////4AAAAAAAAAH///////////AAAAAAAAAH///////////8AAAAAAAAH////////////4AAAAAAAH/ + ////////////gAAAAAAH//////////////AAAAAAP//////////////+AAAAA////////////////+AA + AD////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////ygAAABgAAAAwAAAAAEAIAAAAAAAAJAAABMLAAATCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGATc3NwsnJycfKioqRSMjI2cnJyeQKysrqSsrK74rKyvOLCws2SQkJN4kJCTd + Jycn1SsrK8kuLi63Ly8voS8vL4E0NDRaPj4+NkpKShVkZGQGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGAS8vLyEmJiZmJCQkoiQkJNUkJCT0Hx8f/yUlJf8uLi7/ + Ojo6/0VFRf9MTEz/UFBQ/11dXf9aWlr/UVFR/0NDQ/8zMzP/Kioq/yUlJf8iIiL/JSUl/isrK+krKyvF + KCgojUVFRUpWVlYOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjY2AygoKCsiIiJ8Hx8fzSsrK/s7Ozv/ + SUlJ/1xcXP9tbW3/eXl5/4SEhP+Kior/kJCQ/5aWlv+ZmZn/mpqa/5qamv+dnZ3/oaGh/6Ojo/+kpKT/ + oqKi/5qamv+UlJT/g4OD/2hoaP9HR0f/NjY2/ysrK/8hISHwKysrsEBAQFxLS0sVVVVVAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCwsABsbGwwoKChW + GBgYuCIiIvJGRkb/XV1d/2hoaP90dHT/fX19/319ff99fX3/gYGB/4uLi/+Pj4//kpKS/5aWlv+ampr/ + nZ2d/6Kiov+jo6P/paWl/6enp/+pqan/qamp/6ioqP+tra3/r6+v/6urq/+hoaH/mpqa/4iIiP9mZmb/ + Nzc3/x4eHv0kJCTjLS0tlTU1NTNJSUkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAgICAMHx8faCAgINEzMzP+VlZW/25ubv91dXX/dHR0/3d3d/9/f3//h4eH/4uLi/+UlJT/ + oKCg/6enp/+rq6v/s7Oz/729vf/FxcX/y8vL/8vLy//Kysr/ysrK/8nJyf/IyMj/yMjI/8jIyP/CwsL/ + u7u7/7e3t/+4uLj/tra2/6ioqP+ysrL/rq6u/5mZmf9fX1//LCws/yAgIPYjIyOvPDw8PFtbWwEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCyEhIV4pKSnfQ0ND/2dnZ/9vb2//bW1t/3Z2dv+BgYH/ + goKC/4SEhP+UlJT/qamp/7u7u//MzMz/2tra/+bm5v/r6+v/7+/v//T09P/5+fn/+/v7//j4+P/39/f/ + 9/f3//f39//29vb/8/Pz/+rq6v/o6Oj/5eXl/9/f3//W1tb/0tLS/8rKyv++vr7/tra2/7Ozs/+tra3/ + oaGh/3p6ev8+Pj7/Ghoa/CEhIbRBQUE1VlZWAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMjIwMjIyM+Li4uwUJCQvtYWFj/ + Z2dn/25ubv9ubm7/fX19/4iIiP+ampr/tLS0/8zMzP/h4eH/7+/v//f39//6+vr//Pz8//7+/v/+/v7/ + /v7+//7+/v/+/v7//v7+//////////////////////////////////39/f/+/v7//v7+//z8/P/6+vr/ + +fn5/+/v7//c3Nz/1dXV/8zMzP++vr7/vLy8/7CwsP+ioqL/hISE/z4+Pv8cHBzxIyMjkjk5ORsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Hx8fECIiIok5OTn1YWFh/2VlZf9mZmb/ampq/3Fxcf+JiYn/pqam/8PDw//c3Nz/8vLy//b29v/5+fn/ + //////7+/v/7+/v//Pz8//7+/v///////v7+//7+/v/9/f3//Pz8//z8/P/8/Pz//f39//7+/v/+/v7/ + //////7+/v///////v7+//39/f/+/v7//f39//f39//6+vr/9vb2/+vr6//Z2dn/y8vL/8fHx/+6urr/ + p6en/6Ghof9xcXH/MTEx/xwcHNwrKytQS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAjIyM7NTU10VFRUf9nZ2f/aWlp/21tbf94eHj/kpKS/7Ozs//Nzc3/ + 5OTk//X19f/6+vr/+/v7//r6+v/6+vr/+Pj4//Pz8//w8PD/7u7u/+vr6//r6+v/6urq/+rq6v/q6ur/ + 6urq/+zs7P/u7u7/8fHx//X19f/5+fn/+/v7//z8/P/9/f3//f39//7+/v///////v7+//v7+//6+vr/ + +/v7//7+/v/7+/v/8fHx/+np6f/X19f/x8fH/7a2tv+xsbH/nJyc/1xcXP8jIyP6IiIimzU1NRYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJycnBy8vL2dBQUHuWVlZ/19fX/9nZ2f/ + b29v/4eHh/+np6f/ycnJ/+Xl5f/v7+//8/Pz//T09P/t7e3/5eXl/93d3f/X19f/1NTU/9HR0f/S0tL/ + 09PT/9XV1f/X19f/29vb/+Dg4P/k5OT/5+fn/+3t7f/w8PD/8vLy//b29v/5+fn/+fn5//Pz8//7+/v/ + /v7+///////8/Pz/9/f3//v7+//+/v7/+/v7//n5+f/7+/v//v7+//39/f/z8/P/4+Pj/87Ozv+9vb3/ + tra2/6urq/+EhIT/MjIy/iAgIM86OjotREREAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKioJ + LS0tkE1NTfpdXV3/WVlZ/2lpaf98fHz/np6e/8TExP/o6Oj/8/Pz//Dw8P/r6+v/4eHh/9PT0//Hx8f/ + wMDA/8TExP/Hx8f/x8fH/8jIyP/Nzc3/0NDQ/9XV1f/X19f/2tra/97e3v/i4uL/5OTk/+fn5//p6en/ + 6+vr/+/v7//y8vL/9PT0//b29v/7+/v///////7+/v/9/f3//f39//v7+//9/f3//v7+//7+/v/+/v7/ + /f39//r6+v/9/f3/+fn5/+7u7v/h4eH/0NDQ/7u7u/+tra3/mZmZ/0pKSv8eHh7lJycnTwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACoqKhE2Nja1UFBQ/mNjY/9iYmL/c3Nz/5CQkP+2trb/3t7e/+rq6v/m5ub/ + 3t7e/83Nzf+/v7//ubm5/7W1tf+5ubn/wMDA/8PDw//Gxsb/z8/P/9XV1f/X19f/1NTU/9jY2P/c3Nz/ + 3Nzc/97e3v/f39//4ODg/9ra2v/a2tr/29vb/9vb2//c3Nz/3d3d/+Li4v/h4eH/4uLi/+bm5v/v7+// + 9vb2//r6+v/+/v7//f39//39/f/9/f3/+fn5//b29v/6+vr//Pz8//z8/P/6+vr/7+/v/9ra2v/Dw8P/ + uLi4/6+vr/9dXV3/HBwc9ioqKm1LS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExGzw8PLtYWFj/XFxc/2lpaf92dnb/ + np6e/8zMzP/j4+P/4eHh/9DQ0P+8vLz/tLS0/7CwsP+xsbH/tbW1/7u7u//FxcX/zs7O/9XV1f/c3Nz/ + 4eHh/+Pj4//e3t7/19fX/8nJyf/Dw8P/vLy8/7S0tP+srKz/p6en/6SkpP+mpqb/qqqq/7CwsP+1tbX/ + urq6/8nJyf/Pzs//1dXV/9nZ2f/b29v/29vb/+Pj4//v7+//+fn5//z8/P/9/f3//f39//7+/v/9/f3/ + /Pz8//v7+//6+vr/+/v7//Dw8P/k5OT/z8/P/7y8vP+rq6v/dHR0/yAgIPohISF2Q0NDBgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8W + Ozs7vlJSUv9YWFj/ZmZm/35+fv+ysrL/3Nzc/+Hh4f/Nzc3/u7u7/66trf+kpKT/qamp/7Kysv+5ubn/ + ysrK/9jY2P/d3d3/3Nzc/9fX1//Kysv/tra2/5ydnf+Fh4j/eHt8/2Zpa/9dYmT/V11f/1BVWP9HTE// + REhM/0ZLTv9HTVH/TFNW/1ZbXf9eYWL/Y2Vl/2xsbP90dXX/g4WF/5qcnP+ztbX/wsTE/9bY2P/X2Nn/ + 3d7e/+Tk5P/r6+z/8/Pz//z8/P/+/v7///////39/f/5+fn/9/f3//j4+P/s7Oz/7Ozs/9fX1/+8vLz/ + s7Oy/29vb/8kJCT5KioqeGJiYgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAADs7Ow5BQUHBUVFR/19fX/9paWn/hYWF/8XFxf/e3t7/y8vL/7e3t/+oqKj/ + paSk/6moqP+oqKj/v76+/9bV1f/j4+P/5OTk/9bW1v+9vb3/mpub/3p8fP9kZ2j/U1RX/0NESf87PEL/ + ODlB/y4xN/8nLTP/Iyox/yEoMP8gKS//Iysz/yQqMf8dJy3/ICkv/ykvNP80Njr/PDw+/0VDRf9IR0n/ + REZK/0RJUP9JT1f/UVdf/3h+gP+Wm5z/tLe2/9LU0v/i4+H/3t/d/+Lj4//x8fH//f39//39/f/4+Pj/ + +Pj4//T09P/4+Pj/9vb2//X19f/a2tr/vr6+/729vf98fHz/ISAg+jQ0NHQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzDD09PahTU1P/W1tb/2pqav+UlJT/ + yMjI/9XV1f+6urr/pqam/52dnf+goKD/qqqp/8TDw//T09P/4ODf/9jY2P/BwMD/l5eX/3R0dP9YWVn/ + P0FC/zU4OP8wNDT/KSwt/yosLv80Njr/QEFH/1RbXf9faWr/bHZ5/3qDh/+GkJL/jJWY/46Ulf+Gjo// + foeI/3V9fv9tcnP/Z2ts/0lMTf9AREX/MTo9/yIwNv8eMDf/IDM5/yw4Pf84Qkf/TlVY/3Z7e/+ipaT/ + vb+9/9na2v/h4eH/4+Pi//Ly8v/6+vr/+/v7//X19f/y8vL/9PT0//Dw8P/s7Oz/3t7e/8LCwv+tra3/ + cXFx/y4uLvk6OjpZWFhYAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjID + NjY2hklJSf1ZWVn/bW1t/5mZmf/FxcX/xcXF/66urv+YmJj/mJiY/6CgoP+4uLj/0M/P/+Li4v/S0dH/ + ra2s/4WEhP9fXl3/QUA//zMzMv8iIyP/Jykq/z9AQP9aW1j/fn98/6Chnv+5urf/ycvI/9DZ1P/P2tX/ + zdjU/8vX0v/M2NT/zdrV/87X1v/N1tb/zNbV/83X1f/Q2dj/1Nza/8rS0f+/x8X/qbWy/4WVkv9XbWn/ + OE5N/yEwOf8YJy//Iy82/zE4Pv9NT1P/b3By/5GRkf/BwcH/4ODg/+Hg4P/l5eX/8/Pz//z8/P/9/f3/ + 8/Pz/+/v7//09PT/9PT0/97e3v/Dw8P/sbGx/2hoaP8qKirrS0tLOwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDBgRkZG+l5eXv9nZ2f/lZWV/8DAwP+1tbX/mJiY/42Njf+VlZX/ + srKy/9TU1P/k5OT/1NPT/66trf95eHj/V1ZW/0FAP/8jJSD/HB0a/zs+Ov9qbWv/l52Z/8TExv/U0Nb/ + 1tXY/9bX2f/R1NX/y9HR/8/U1f/R1tf/0djY/9LZ2P/T29n/1NzY/9bb3f/U2t3/0tjc/9DX2//P1tr/ + z9bZ/8rP0//Q09f/19na/9XY2P/T09P/zM3M/5+qrP9ygIT/RVRZ/yw3Pv8vMzj/OTk+/0ZFRv9kY2P/ + ioqJ/8DAwP/c3Nz/4eDg/+/v7//4+Pj/+fn5//f39//z8/P/7e3t/+3t7f/g4OD/vr6+/7Gxsf9VVVX/ + NjY221hYWB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMCpDQ0PrWVlZ/2xsbP+Tk5P/ + uLi4/7CwsP+ZmZn/kZGR/5ubm//BwcH/29vb/9PT0/+qqan/g4KC/1NSUv89PDz/LCoq/ywtKv9UWVL/ + k5iS/8TJxP/S2NP/z9XQ/9HT1P/Oz9X/ys/R/87Y1v/V4t3/1eXd/9Xj2v/V49r/1uXa/9Xl2P/S5dX/ + 0OTS/9Di1//Q49r/0OXa/9Lm2//S5tv/0uXc/93q5P/d5+H/1t3a/87T0v/Q0dH/09PS/8TQyv/V39r/ + ztfV/6y0tv92fH//SUxO/zQ0M/8+PTz/R0ZF/2FhYP+YmJj/ysnJ/97e3v/q6ur/9vb2//r6+v/39/f/ + 7+/v/+/v7//q6ur/3t7e/8LCwv+hoaH/RERE/kZGRrFycnIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MjIyCzk5Ob5RUVH/aGho/4eHh/+urq7/qamp/5eWl/+Tk5P/oaGi/8bFxv/e3t7/wMDA/5OTk/9mZmT/ + Pz8+/ygnJ/8mJST/WVdX/6qtqv/K0cr/0NfR/8bNx/+/xsD/ztXQ/9Xd0//S3c//0uLR/8vgzf+92ML/ + sNC3/6bPsf+iz67/m8uo/5XIov+Rx5//ksmf/5HJpP+LyKP/h8ii/4vKpf+Tz6r/mNOu/57Ss/+o17n/ + t9zE/8Xizv/M4tT/zeDT/87az//M2M7/xtHL/8nT0P/P1tb/w8bH/4qIif9FREP/MTAv/zk5OP9NTEz/ + d3V2/66trv/V1NT/4+Li//Ly8v/6+vv/+/v7/+zs7P/p6en/4+Pj/9DQ0P/AwMD/iIiI/0FBQf9oaGhq + oKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj4AODg4fEpKSv9aWlr/enp6/56env+enp7/jY2N/5GRkf+qrKj/ + 1NXS/9PT0f+pqKb/cW9u/1VSVv8qJzL/Kyks/19eW/+0s67/zs7O/8nLx/+9wrf/vsa7/8bRx//D08r/ + u8zF/67Js/+iyKP/mMKZ/4y+iv+GwIT/h8WG/32/hP95voX/d8CG/3S/hP9uvoD/a71//2W5g/9duoT/ + Wr6F/17Aif9hwor/YsOJ/23Jj/9nwoj/asCJ/3bFk/+Cy53/i82f/6zQsv+21rz/wdrI/8fXz//EzMz/ + xs3M/9Tc1P/Nzcz/l5OU/0VBQv8tLiv/PkE8/1RXU/+TlJP/wL/A/93b3P/x7uz/9/X1//b29v/s7Oz/ + 6Ojo/97e3v/R0dH/urq6/3V1df9SUlLtfX19LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0vQkJC7FlZWf9ubm7/ + jo6O/56env+Hh4f/j4+P/7Gysf/Z3dj/xcfE/5OTkf9raWf/SEVE/yUiI/9JRk3/pqal/8bIwf/AxL3/ + wsfG/8TMyv+8zMP/sMay/6LBnv+TvY3/ibqD/4G2e/9+tnr/e7R8/3Ovev9op3X/XJ5v/02OY/9Hi2H/ + RYxk/0SOZv9Ej2n/RJFr/zuSbP8pkWn/HpJn/yGWav8gmmn/Ipxo/zWnbP9Cr3D/T7x2/1/Ig/9iy4b/ + ZsmE/3XGiv+Ay5H/kc+g/6HRsP+z1b//u9fD/7/Uwf/J0cj/0M7N/8XAwv9wcG//MDMv/zg8N/9HSEn/ + e3h9/7iztP/q5uH/8/Du//j4+P/39/f/7Ozs/+Tk5P/Z2dn/xsbG/6Wlpf9XV1f/dHR0tK+vrwgAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABAQECxUVFR/2ZmZv+AgID/jY2N/4+Pj/+Tk5P/srOy/9fW1/+ysbT/hYSG/2VkZv86Ojv/ + JyYn/3Jzb//Ex7n/w8nA/7S9uP+wwbX/rcKv/5u8of+HtZD/eKp6/3mucP93s2j/a6xY/2WaV/9ciVf/ + R3hP/0BsUf9Db1f/RHVf/0GDYf9AiWT/QY9p/0OUb/9GmnP/R5x3/0Widv8xoHP/IZ1v/x6db/8VnWz/ + Epxp/xWaZf8Tk1//Do9V/x+aXf8vqWX/PLNo/0fBa/9KwGb/Xch2/3PQif9+0JH/is2Y/63Ws/+71bz/ + w87B/83QzP/Ny8z/oJ2e/0lFRv81LjP/SUJI/3Brbf+zsaz/1dPR/+rq6v/6+vr/8/Pz/+jo6P/e3t7/ + 0NDQ/7q6uv+IiIj/Z2dn+qKiolYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7O0tISEj/Xl5e/3V1df+Tk5P/j4+P/4WFhf+5ubn/ + 1dXV/6+usP+Cf4X/XVxg/zAyNP9BRUX/mZ+e/8PIw/+7vbX/qbau/562pv+St5P/iLJ8/3qvaf9zrmT/ + a6Jh/1eIUf9HaUP/OVw7/zhXPv8+X0j/QnJP/0iFV/9TlF7/WJ1k/1Wmaf9Vq2//Va5z/1Wydf9Xt3j/ + WLl8/1S2gv8/s4D/LbF+/yexf/8jsX//H7B8/yKweP8grW7/F6Zf/x6nZP8RnVb/CplO/xamTv8gqlD/ + NbRZ/03Ba/9izXr/ctCE/4zSl/+i2KT/rtOt/7TLtP+9x73/yszH/7i1tP9lYWP/Lysv/z05O/9zcW3/ + o6Kg/87Ozv/w8PD/9fX1//Dw8P/q6ur/2tra/8vLy/+wsLD/cXFx/5GRkd7R0dEMAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT09Cz4+PsNUVFT/ + a2tr/4uLi/+RkZH/jY2N/7W1tf/Ly8v/qqqq/3d2d/9YVFj/NjM3/1BUUf+qsq3/uMW8/6i1q/+jsKf/ + kK6U/4KwhP9zqWz/bKFZ/2aTVv9Lbkb/OE0y/y9HK/81VDH/PV47/0FzQ/9Kh03/UpRY/1igYP9cp2T/ + XKpr/16ydf9gtn3/YLmC/2C8hf9jwIf/ZcGK/13Ajv9Fv43/Mb6M/yW8iP8ivIX/Hrp+/yS9gP8iu3j/ + Irpz/ym8d/8ftWz/F69h/yKwYf8bplb/HaFR/yelVv86s1//T8Bp/2fNeP+B1IT/j9OM/53Qmv+r0Kn/ + tcyy/8DMu//Gz8X/gISD/y4uLv9APT3/aGdn/5ubm//S0tL/7+7u//X19f/t7e3/4uLi/9TU1P/BwcH/ + nJyc/3t7e//FxcVu2traAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAQEBAUEtLS/tmZmb/e3t7/5KSkv+Hh4f/np6e/9fX1/+lpaX/dnZ2/2JhYf83MzT/ + XV1b/7S7tP+4xbn/rb2t/5erlf+Jq4X/dqtu/12gU/9ZllH/SHFA/ytCJf8lOSL/KUgj/zNeK/9AdjL/ + SYM7/02SRP9SnlD/V6Vb/1usZf9fsmz/YrV1/2a6gP9lvoj/ZcCN/2jFkv9uyZb/csub/2rMnv9Qy53/ + NcmY/yXGkv8exIv/G8OF/yPFh/8jxIL/LMaI/zDHh/8nw3z/Ib9z/yK6cP8ftWf/JLNk/yiyYP8krFb/ + JatQ/0C9Wf9t13H/edZ1/4PRf/+S0JD/os+f/7HPr/+yybP/wc7F/46PkP8uKS7/Qj9B/21tbP+hoaH/ + 0NDQ/+3t7f/z8/P/6urq/93d3f/Jycn/ubm5/39/f/+qqqrZ1tbWEwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAHSEhIxFpaWv9ycnL/hYWF/4uLi/+TlZP/ + 1dbT/6mppv93d3X/aGVn/zs4Ov9lZ2H/trir/7nCq/+jt5v/jK6R/3Siev9qo1r/YZlU/0Z4Pf8hQBv/ + HCsZ/yREH/8tXyL/OG4p/0KAMv9JjTf/SZI7/06aRv9VpVX/Wa5g/2C4a/9iv3T/ZsSA/27Fi/9wx5P/ + b8mX/3HMnf90zp7/edCj/3PUrP9Z0q7/M8qe/yvKnv8ry57/KMuY/yrPlv8w0Jj/NtGZ/zfRlP8w0Ir/ + Ks6B/yHGeP8pyHf/MMZ1/y/Abv8tuWb/LLde/y6yUf9GtU//Y8Vb/3TRav951XL/gdJ5/5TRkP+gyqP/ + ssu2/8rTx/+TkYz/RENC/0ZHRv9tcG7/nZ+e/9PT0//08fP/7u3u/+bm5v/R0dH/xsbG/5iYmP+VlZX/ + 2traawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBB + T09P+GBgYP9/f3//i4uL/46Ojv/BxcD/u725/4GBfv9oZ2X/RkJE/2RgZP+6w7n/sbqq/6Gwlv+HqX7/ + Z59l/1aXU/9QiEP/LFIn/xksFv8bMxj/Jksj/ytlJv8udiT/N38r/z+KMv9HlTf/TZw+/1SjSf9cqln/ + Y7Bo/2q2dv9suYH/b7yN/3C8lf9wvp3/cMCi/3TEqf93x6v/eMiv/2vHsf9QxLH/NsCt/zDBrv8yxK// + MMSp/y7Kov890Kv/RNKp/0fUpP9A05n/ONOQ/zPUiP8y0oP/NdCA/zjMe/85yXP/NsZq/za7XP9HtVP/ + U7NL/1/BUv9n013/b9tl/3/YeP+Lzo//nsme/7TMqv/AyLb/jpGN/zM1NP9JTUr/dXl3/6inqP/f2tz/ + 9PPz/+np6f/Z2dn/0NDQ/6+vr/+RkZH/09PTzvLy8ggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABAQECjWlpa/21tbf+NjY3/jo6O/7Gxsf/DxMT/fn5//2ppa/9NTU// + Wltb/6yurf+st6//kKeZ/3mgg/9pnmj/YJ1N/0Z9L/8ePRr/EigQ/xg4Ff8hWBz/KWsh/yp4Iv8rgiX/ + N4st/0OTOP9Klz7/TplD/1OZTf9dmlv/Y5pn/2uhev9zpYr/eqiW/3axnf90t6X/dLus/3e/s/93w7j/ + d8W7/3DFvP9gw77/Sr67/z6+vP8/wL//Pb+6/zK+rf88wbH/Ssa3/07GsP9Jxab/Rcif/0DXmf861Y// + OtOG/z7Uf/881HX/OdJq/0DMX/9Xyl3/XsRU/1S2R/9NtET/WsZS/2nTY/9503X/idGB/5jHjf+vxLD/ + v8XC/319fP81NTT/WFdX/4GBgf+3t7f/7e3t//Dw7//m5ub/1dXV/8TExP+UlJT/wMDA8uzs7CYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9PTxVERETzYmJi/3l5ef+IiIj/ + mZmZ/8/Pz/+Oi4//bGtw/1FRVv9QVFX/oqqk/7K+sf+QppX/daR3/2CkX/9Pkkn/NGQr/xUrDP8PIA3/ + GEAW/yJZG/8iaxn/JXgc/y6DI/84iCz/QIoz/0aJOv9Jhj//SoNC/1GFSv9dilf/Y5Jj/2ujef95spD/ + hbyf/4rHqv+LzLT/i8+8/4rSwf+J1MX/iNbI/4LUyP920sr/Ys/L/0rKx/9Bx8T/PcXA/z3EvP9Bxbv/ + S8i8/1TKvP9QxrH/S8Sq/0PCo/8/w5f/PsWH/0/Qiv9T1IL/R9Nt/0nSYv9d1GD/Y9BY/17FUP9Tu0z/ + SbhB/0zERP9k1Vv/c9pk/4jWev+Zyp7/q8Gv/8HJvf9sb2r/Q0FB/2RkZP+Kj4z/wsTD//Ly8v/w8PD/ + 3t7e/8rKyv+kpKT/rq6u99/f3zMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRWVISEj/bm5u/4GBgf+QkJD/urq6/62trf93dXX/ZmVo/0lKT/+IkYv/qLil/5euj/9unnL/ + XZpU/0qQN/8hWxb/DCEM/wwYEP8RPA7/HFYW/yNrGP8ufyD/L4Ah/zJ7Jv88ei7/O3Yv/z92NP9Kfz3/ + VIhI/2GWVP9xpWL/erNx/4HFhf+L0Z3/kNap/5nat/+d3cH/mt7G/5nfyf+W4Mz/leDO/47ezv+E3tL/ + ctzV/1rXz/9N08v/StPK/0jQyf9FzcP/R8vA/0nJvP9Jx7X/SMWw/1jFtv9IvaD/QruP/0W8hf9HvHf/ + Qr9o/0zPaP9n2m3/Z9Rc/2POVP9fy1T/U8FG/0W7Of9JxEH/WtRN/27YYf+B04D/lMqU/6/RrP+quqf/ + U1ZQ/0VFRf9rcG3/lJaV/9nZ2f/x8fH/5ubm/8vLy/+6urr/qqqq+tfX11v39/cAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVBD4+PrVWVlb/eXl5/42Njf+fn5//vb29/3x7e/9raWT/ + WllZ/21xcv+qt6v/lKeJ/4and/9UnlX/UoxM/yNKGf8JHQX/DxwK/xg8Fv8SWgz/Hm4T/yV6Fv8odxr/ + LW8g/zJuJv83cyr/PHox/0iIOv9YnEj/Z6xW/3G2X/96u2j/f71z/4fFiv+Oy6P/k86w/5fQuv+a08H/ + mdXH/5jWy/+V1s3/k9fO/5LX0v+H1tf/btDV/1LIzv89wsr/OcHL/zvEyv89xcj/RcfH/0jIwf9Qy8H/ + S8q7/zbAqv8xu53/M7mR/zG0f/88tnv/PLVx/z62aP9YyGf/a9Zi/23ZWf9l1VT/X8xM/1TAQv9Aujz/ + PsE6/1bUSv9s2mD/gdZ9/5LMkf+qyaf/kpqP/z09Pv9eYmH/eXt6/6ioqP/s7Oz/6enp/9XV1f/IyMj/ + qqqq/9TU1OPy8vIPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARkZGHEBAQO5nZ2f/ + f39//5KSkv+2trb/mJiY/2ZmZf9hYFz/ZWRk/6Knpf+VqJT/gqR2/2ieV/9Glj7/KFEp/wgOBv8MIAf/ + E0QK/xtgEP8ichP/HHAP/x1uEf8eZRT/JmQc/zd3K/9Fjjb/UJlB/1ulS/9irFL/Yq5R/2SrU/9qp1j/ + baVi/3mufP+LvaH/k8Sy/53Nv/+h0sf/otXM/6TY0f+m29b/pdzY/6Xc2/+Z2t//gNTe/1/I1P9EwNH/ + PL7T/znAz/83vsz/Or3L/z27xv85ucD/K7Wy/x+5qP8ftqD/HK+M/x+sff8prnX/K61r/zSvZf9DtF3/ + W79g/2XJWv9n0Vf/X9FM/1fPRf9MwkP/PLU0/0fGPf9Z203/bNtj/4PVff+bz5j/scaw/3d7d/9FQ0T/ + cG9w/39/f//R0dH/7u7u/93d3f/Ly8v/s7Oz/83Nzf/w8PAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARkZGVEVFRf9ubm7/g4OD/5qamv+6urr/d3d3/2JhYf9aWVj/g4aE/6Oupf+HpoT/ + aZ5g/0+TQf8taCD/CR4G/wkUBP8TOgb/EVkJ/xVrE/8eaQ//HGYP/x9oEv8qchz/NX0o/0GNM/9KmTr/ + TZk+/1KaRP9anUv/Xp9P/1+cT/9onFX/bp9f/3Kocv+Eu5n/i8Or/6LTxP+n18v/rt3U/7Xi3P+55uL/ + ueXj/7Lj4v+k4OX/j93o/2zR3P9Nx9f/PsTV/zW/z/8yvc3/MrrK/ze5yv86t8b/K6+4/yCtsf8bqKL/ + GqOQ/x2ggf8innL/I6Fo/yOiW/8wpVv/SrFh/1e6X/9jwlr/X89O/1XWRf9X0Ej/Sb06/z22MP9Eyzr/ + XdlR/3Paav+I04T/qtOr/5yomv9TTE//YmBh/21ubv+oqKj/6+vr/+Dg4P/Nzc3/vb29/8vLy//w8PAZ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHfkpKSv9zc3P/h4eH/7Kysv+VlZX/ + YWFh/2FhYP9lZWL/naid/46rj/9uoGz/TY5H/zV4K/8OJAb/BRYD/wswB/8ZVQz/GGQL/xdlD/8VYQ3/ + H2sS/yt3HP83gyf/Qo4y/0aTNv9EkTX/Ro83/0uOPP9Sk0H/XJpJ/2CaS/9nm1L/bqBd/3KlaP92qnr/ + jr6j/6nWyf+03c7/x+XV/9Xq4f/a7eP/1O3n/8Po6P+x5ej/l9/n/3HU4v9bzt3/ScnX/zPB0P8tu8v/ + L7nK/zW9zv81t8j/L7HC/x6otP8VoaT/FJ2W/xWYhf8Wk3L/GJNh/xmVVf8WklH/JppV/0muXP9iuVr/ + W7lM/1fCSf9Xzkn/S8w9/z/ALv8/uyv/TMs9/2PdWf9z1G7/mNaX/6/JrP96fXb/V1ZW/2JiYv+Dg4P/ + 09PT/+np6f/T09P/v7+//8rKyv/s7OwfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + RkZGf1RUVP99fX3/kpKS/7a2tv9xcXH/WVlZ/2JiYv+LjYf/mbKX/2uea/9NkEv/OH80/xRIDv8JDQP/ + CCkF/wpNCf8NXQb/EV8G/xlkC/8ebRb/Jncc/y9/If80hSP/OIgk/zqJKf9AjDH/S5I6/1KVPv9Tkz3/ + VpI+/1mSQf9kmU3/bJ9b/3WmaP98rHv/g7eV/6zXzP/A49X/1+zc/+Xv5f/p8uj/5fTt/9Tw8P+/6u7/ + nODl/3LU4/9m0+P/Vs/c/0DI2P89w9j/O7/S/ze+zv8xt8b/LbHB/ySqt/8epaz/GZ+e/xaZjf8Vk3n/ + GZBo/xqQWv8Yj1T/H4xO/zyWTv9cqFT/Yq9V/1yyUP9RwUX/S8w9/0fJNv9Dui3/OL0p/07aRv9p4mL/ + ht2B/6jZpP+crpj/WVtY/15dXv9qamr/sLCw/+zs7P/X19f/w8PD/8nJyf/m5uYrAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHf2JiYv+Hh4f/n5+f/6Ghof9cXFz/Xl5e/2tra/+cppn/ + faN5/1ibVf89iDn/JGAe/wYdA/8HHAL/DUMG/wtdB/8KXwj/FGcK/yBxDv8ecxT/JnsZ/y2BH/8xhCD/ + M4Qf/ziGJv9EizH/TJE4/1CSOf9SkDj/V5E8/1uSQf9mmU7/bJ5b/3embP+Ar4L/gbiW/67Zzv/J59z/ + 3+/h/+fx6P/r8+r/6/fw/+H18//P8PL/r+ju/3/a6P9p0+X/W9Dg/1PQ4/9TzOP/SsTW/z/Az/80u8j/ + LbTC/yeuvP8jqbP/HaOk/xadk/8VlYD/E49r/xWLW/8jkVb/OphX/1CaVv9Xm1D/XqJU/1umUv9NrEP/ + Sro//0rEPv9Gvzb/Mrkk/z7NM/9j6Fn/euVx/5DXiv+myqL/dXp0/19eX/9kZGT/ioqK/+Li4v/c3Nz/ + x8fH/8jIyP/g4OA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUlJf21tbf+Pj4// + p6en/4qKiv9XVlb/YWFh/3x8fP+Xp5P/ZpVi/0mVRP8xeyv/CzMH/wcQBP8EOwH/DFYC/w5lCf8SaRj/ + HHQY/yB8Dv8geRD/J30X/y2DHv8xhiL/NYgl/zyJKf9HizD/Sosx/0yLMf9RjTX/XJM//2OXSP9pm1P/ + cKFh/3updP+Asob/ib6g/7Tc0v/Q6t//4u/i/+ny6v/u9e3/7vfy/+r39f/e9fP/w+/z/5Tj8v9t1ur/ + W9Hi/1PP3f9Zzd//W8zf/0zH2P85v83/MrrH/yuzwf8nrrn/I6qt/xymnv8Zn4n/FJVz/xuSY/87nGL/ + V6Fk/2OkX/9goVj/VZpN/0+XR/9Pmkb/TaRE/0izP/9Bwzr/PMAx/ze7KP9W3Uf/depp/4TZfv+h1J3/ + maGY/15cXv9iYmL/bm5u/9DQ0P/k5OT/y8vL/8fHx//b29s+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAUFBQf3Jycv+QkJP/qKmn/3R2cv9UVlf/Y2Zm/4uSiv+AnX3/VZNL/zqLMv8cVRj/ + BB8C/w4wCf8FVgH/DWUE/xRvD/8Zdhv/F3sU/xh9DP8jghX/J4MZ/y6FH/8yhyP/Nogl/zqIJP9CiCj/ + SIss/06OMf9Ukjj/XZZB/2WaSv9qnlb/caRn/3utev+Bt43/hb+f/6rWyf/V7OL/5vHk/+zz7P/w9u// + 8fjy//L59f/r+PL/1PX3/5/o8/9s1+r/XNXn/1XR3f9g0t//adXo/1XO3v86xM//NL/K/zG5xf8utL7/ + KrC2/yGsp/8bo4v/Fpp1/x+Xaf9Tpm7/bq9s/2enX/9io1v/WZ9T/06XR/9PmEn/SphE/z+dO/82qDX/ + Q740/ze6I/8+xjH/a+hh/4Hjd/+a2JX/qcOm/2VqYv9gWl//X11g/7O1tP/q7Ov/zM3M/8nJyf/b29s+ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbf3R1df+RkZj/o6eh/2NlX/9VV1n/ + anJv/4ygif9olWb/RZI4/y1/Jv8INgr/Ay4D/wdNA/8IYgP/D2wL/xd4Ev8YfxH/FH8N/xZ+Df8ggBb/ + JYIZ/yyFHv8yiSP/NIgi/zqJIv9BiiX/SI0p/1CQL/9VlDf/W5hB/2SdTP9qoVr/cahs/3uwf/+CupL/ + hcKi/6fWx//X7OP/6fLn/+707f/x9/L/9Pn0//b69P/2+/T/3/n5/53l6/9l1uX/VdXk/1jV4P9p2eb/ + adfn/1PP3f88yNL/NsLM/za8yP82uMT/LrO6/x6rpv8bo4v/Gpx3/y2fcf9jr3j/dLFt/2usZf9jp1// + W6FU/1CbSv9ImEP/QpY+/z6VO/86kjn/OqUp/0PALv8wtib/XuFS/33rcP+U3Y3/qNaj/3mJdP9hVV7/ + WVZb/5Sclv/m6eb/zc3N/83Nzf/e3t48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X19ff3d3d/+Zm5//mZyX/1hYU/9ZW13/bXtx/4Gdfv9dklj/OYkw/xhsE/8COQT/BUMI/w9fDP8Pbw3/ + FXYS/xl9Ff8YgRT/FIAO/xd/Dv8ggRb/JIMX/ymFGv8xhx3/NYgf/zqKIf9Biyb/SI4t/1CSM/9Wljz/ + XJpG/2SeUf9po1//capw/3yxhP+DupL/hsOo/5TPw//G5tz/6PPm/+317P/w+PP/8fn0//b69f/6+/j/ + 7/v7/8n1+P9z3eb/WNbi/2HW4/9i2OX/V9bl/0jR4f85yNb/N8PQ/ze+yf82ucX/L7S8/yKurf8cp5f/ + JKJ+/02rev9ytXz/dLFw/2+tZ/9mqF//W6NX/1GdTP9ImEP/QZU9/zqSN/8zjzH/LYwm/zqmMf83syr/ + VdhB/33yav+P5Iz/qt+p/5Oljv9hWF7/U1FV/4CIgv/c3t3/z8/P/9DQ0P/g4OA3AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWVlf3t7e/+eoqb/jI2K/05MSP9hYmL/cYVz/3Kcbf9NjUP/ + LIAn/whZBv8GRwT/DlsN/xNyFv8VfRX/F4AW/xmCF/8YgxX/FoER/xmBEv8ggxb/JIQX/ymGGf8wiBz/ + Noof/zyMI/9Cjin/SZAv/1GUNv9Yl0D/XptJ/2WgVf9qpWP/cqt0/32zhv+Fu5T/hsOp/4zMwf+44dn/ + 5fTq/+v27f/w+PT/8fr2//b79v/7+/r/8/v8/8/19P+K5ej/ct7l/33h7f9z4O7/UdTf/0DP3P85ydj/ + OMXS/zi/y/82u8X/MLa9/yWwsf8krJ//OqyK/2Ozgf93tXn/dLFx/2+tZ/9lqF//XKRX/1OgT/9JmkX/ + QZU8/ziQNP8wjC3/NIo0/yV+I/8xoyb/S8kz/3z1Z/+I6Yj/puKm/6a+o/9iXmD/Tk5P/2xzbv/Y2dj/ + 09PT/9LS0v/h4eE0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2trf4CAgP+eo6b/ + f4B+/01IR/9oamf/co1x/2KZWf88iS7/IXof/wVWBf8LXgT/EXAQ/w19Ff8ShBX/FYMW/xeEF/8YhBb/ + GoQW/x2EF/8hhBj/JYUZ/yqHG/8wiR3/Nosg/zyNJP9Djyr/SpIx/1OVOP9amUH/YJ1M/2eiWP9spmX/ + c6x2/3+0if+Fu5f/hsKp/4nKvP+n3NT/2PLr/+f27//w+PP/8vr2//X79//6+/n/9fz7/9f39v+x8PP/ + nu3x/5rr8/+L5/T/Ztrl/0fS3v86y9n/OcfT/zjCzP83vcb/Mrm//yq0tv8tr6H/RK+J/2aze/95tXb/ + dLFv/2ytZv9kqV7/XKVX/1OgT/9LnEf/Qpc+/zqRN/8yjjD/Mos1/yiAKv8dhRn/Oasp/3XnY/+G6YT/ + oOKf/67Nq/9qamn/S0xN/11kYP/V1NX/2NfX/9XV1f/j4+MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcHBwf4ODg/+Xn6L/dnd2/1FJSv9wcW3/cJBu/1WVTP8xiCH/GXUa/wdhCP8XcQz/ + EnwP/wWAEP8OhBH/D4QR/xGEEv8WhRb/G4cY/x6IGv8hhhn/JYcb/yqJHP8wix7/Nowh/zyPJf9Dkiv/ + S5Qz/1OXOv9am0P/YJ9N/2ejWv9tqGj/dK54/3+1i/+FvJn/icSr/4jKu/+Z2NX/suPg/9/28P/y+fX/ + 8/v3//P89//5/Pf/9/37/+T7+v/N+Pf/tvLw/6jv8f+b6/L/e9/q/0/W3/88z9r/O8rV/zjFzv83wMf/ + MrzB/yu4uf80taf/TbWR/2y1fv94tHP/dbJv/2yvaP9jql//W6VX/1OiT/9Mnkj/RJpB/z2XO/82lDb/ + MJAu/y2OL/8aex3/I4Yc/2DHU/+S8I3/nuSd/7HVr/92eHX/SU1N/1FYVP/Py87/2tnZ/9fX1//k5OQu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHR0e4GBgf+boaT/bXJw/01KSv9tcGr/ + bpJo/0eRPv8thR//EnET/wptDv8TexH/DYEP/wmFEf8OhBL/D4UT/xGFFP8Whhj/G4ka/x6JG/8giBr/ + JIkc/ymLHf8vjB//NY4i/zyRJv9Dkyz/SpYz/1OZO/9ZnET/YKBP/2ilXP9tqWr/dK96/3+2jP+CvJr/ + hsKn/4zNv/+W2+D/nd7g/9Hx7P/y+fX/8/v3//L99//4/fb/+f76/+v8+f/b+fn/wfTy/6zx7/+p7vT/ + j+Xw/1ja3/890dr/PM7X/znIz/83w8j/Mr7C/yy6uv8wt6v/SbaV/2e0fv92s3L/dLJu/2uvZv9iql7/ + WqZW/1KjTv9Kn0f/RJxB/z+aPP83lzb/MJYt/yyTK/8ghib/Gncd/0GgPv+c85f/o+ie/7Tbsv97gnz/ + TU9O/1FTUP/DwsX/1tXW/9jY2Ojp6ekc+Pj4Afj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + eHh4N4KCgvukpqn/Zm5s/0JHR/9nbGT/a5Fj/zyONf8nfSD/Dm4M/wd1Df8IgBP/CoQV/xCKGf8Rhxj/ + E4gZ/xSIGf8XiBr/GYga/xyKG/8gix3/JI0d/ymOH/8vkCH/NZIj/zyTKP9Dli7/Spk1/1OcPf9Zn0b/ + YKJR/2inXf9trGv/dLF7/3+4jf+BvZr/hsSn/5PRxf+N2d//meDn/8Xt5//z+fX/9Pv4//L99//4/fb/ + /P75/+/9+P/i+vv/yPf5/63y8f+r7vP/nOnz/2Xf5P9C1dz/P9Da/z3L0v85xcr/M8HD/y29u/8subD/ + Qrab/2G0gP9zs3H/crNt/2mxZf9gq13/WKdW/1CkTP9JoUX/Q55A/z2cO/81mDX/L5Yv/y6YMf8kjir/ + IIQn/xt4Hv+G14P/sPCo/7fftf99iYH/TkxL/1NQTf/Fxsj/0tLT/9nZ2a/z8/MD+Pj4Bfj4+AIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAB4yMjMajo6b/aG9t/0RHRv9obGT/Z45g/zyQN/8bdhb/ + DXIO/wx8FP8OiBn/DokY/xGLGf8RiRj/EooZ/xSKGf8Xixn/GYsa/xyMG/8gjRz/JI4d/ymQHv8ukiD/ + NJQj/zyVKP9DmC3/Spo0/1KdPP9ZoEX/X6RQ/2aoXP9rrGr/cbF5/3y3i/+AvZn/hsOn/4jKu/+P2dr/ + kN7d/63n4//q+PT/9/r2//j8+f/4/fr/+f36//f++f/t/fn/2Pv4/7j08f+h7vD/juvz/2rg5f9G1d3/ + PdLb/znO0P80yMX/NcO//zXAuv8vvLP/Pbmh/1O0gv9osm7/b7Fm/2ivX/9hq1j/WqhR/0+jSP9HoEP/ + Qp9B/zucPP81mTf/Mpo0/y2XMP8nky3/JYws/w1sEP9MpUv/tvau/7vjuf+Cjob/R0VE/1FPS//Q0tT/ + 1tbX/97e3qrs7OwB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjWSin6L/ + cXNy/0NGRv9kaWH/YYpc/zaNM/8Pcg//DnkT/xCFGv8Rjh3/Eo8b/xOOGv8SjBr/E4wa/xWNG/8Xjhv/ + Go4c/x2PHf8hkB7/JZEf/ymSIP8vlCL/NZYl/zyYKv9Dmi//Spw1/1OfPP9ZokX/X6ZP/2WpW/9prGj/ + cLF4/3m3iP9+vZb/g8Kl/4XItf+R2Nb/kd7a/6bm5P/g9PL/9vn1//j7+f/5/Pr/+P36//n++f/z/fj/ + 4/z3/8T29P+g7/D/f+fq/2ff4P9T2N//SdPb/0LP0f88ysb/PcXB/z/CvP84v7f/Qb2m/1K2hv9ermX/ + Zqxa/2CpUv9Ypkr/U6RG/0uhQf9GoEH/QqBA/z2ePf82mzj/Mps0/zCbMv8kkiv/JZEt/xyFIv8Xehf/ + nuKX/8Dovv98h4D/QUA//1tZVv/S09X/19fY++Tk5HL29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIqJiw6knqLxgYGA/0NFRP9bYlr/XIZY/ymEKf8LdQ//EYQa/w+LHf8Pjxv/ + E5Ic/xSRGv8SkBv/E5Ac/xWRHP8Xkh3/GpIe/x2THv8glB//JJUg/ymWIf8umCP/NJkm/zubKv9DnDD/ + Sp42/1KgPf9Yo0X/XqdO/2SqWf9prWf/b7B2/3m2hf98vZT/gsKi/4TGsf+N1M7/lN7d/6Xm5f/Z9PP/ + 7/j2//T7+P/4/Pn/+v75//j++f/3/fn/7Pz6/8/3+P+n8PH/hOjq/2zi4v9k3OH/WNXZ/07R0v9Kzc3/ + TMnI/1DGwv9HxLn/S8Go/1q6if9WrFv/YatR/16pSv9VpUL/UaQ//0qgPP9Enzv/QJ87/z2fO/82nDf/ + MZky/y6aMf8qmzL/K5s0/yGQKf8OdxH/bLJl/8Tswv95hH3/NzY1/2VjYP/X2Nn/2dna8efn5y739/cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtpKqaj4+P/0RFRP9UW1L/ + WIVW/x16H/8NfBT/F44i/w2NHf8Iihf/E5Ib/xWTGv8Tkhv/FJIc/xaTHP8Ykx3/GpQd/x2UHv8hlR// + JZcg/ymXIf8umSP/NJsm/zucKv9Cni//SZ81/1GhPP9XpEP/XqdM/2SrVv9orWT/brBz/3e2gv97vpH/ + gsKg/4nHsf+Iz8X/mt/f/6bl5v/M8PD/5ff2//H7+f/4/fj/+v34//n9+v/7/Pr/8fv6/9X3+P+u8PH/ + j+vs/3nl5f9w3+H/Z9na/1nV1P9W0dD/XM/L/2HLwv9eyLb/YMOj/2O6gf9WqlL/YKpK/1ynQv9SpDr/ + SqE1/0afNf9BnjX/Pp83/zmdNf8ynDL/L5gu/zCdMf8voTb/K500/yCUKf8Zix7/Qog7/7zkuv9ueXL/ + NDMy/3l3c//d3+H/19fYyuvr6woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACzrK44m5qa+EdDSP9RVVH/T31Q/xV4Gf8OiBr/FZIj/w6PHf8KjRn/EZMc/xSUHf8TlBz/ + FJQc/xaVHf8YlR7/GpYe/x2XH/8hmCD/JZgh/ymaIv8umyT/NJwm/zqeKv9DoC//SKE1/0+iO/9WpEH/ + XadJ/2KqU/9nrmH/bLJv/3W2fv95vI3/gsKd/4rGrv+JzcD/mdzb/6nl6f+26ef/1/Xz/+z69v/3/PX/ + +v33//j8+f/5/Pr/8vv7/9f3+P+x7+3/mOrp/4vn6P+K5eb/f9/f/23Z1v9s1dD/ddHG/3/OvP93yaX/ + csOQ/2m3cP9bq0z/XalF/1WnPP9OpDT/R6Ev/0KgMP9AnzP/Pp80/zedMP8wmi3/Lpot/zOiNP8toTT/ + KZ00/yecM/8ili3/Jnwl/53MnP9iaWL/NzAz/5qXlf/e39/42dnacfDw8AYAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrq6cEq6qryFpQW/9NSU3/QG9C/xWEHP8OlBz/ + D5Qc/xCVHf8RlR7/EpUf/xOWH/8TmB7/FJge/xaYH/8YmR//Gpkg/x2aIf8gmyL/JJwi/yidJP8tniX/ + M58n/zihKv8/oi7/RqM0/02kOv9UpUD/WqhI/2CqUf9krV3/arJr/3O2e/93vIn/gMCZ/4rFq/+Gyrr/ + idPK/6Ti4/+p5OD/w+3q/+n59v/2+/L/+fz2//f8+f/2/Pv/7/v6/9j3+P+68PH/pOvr/5bm5f+Y4+L/ + luLi/4Xb2P9808b/Zr+Z/267if9ounX/X7Ri/2CvVP9frEn/WatB/0+oOv9KpjL/RaQu/z6hLf86oC7/ + PKAy/zmfMf8ynS7/MZ4w/zGhNP8xozj/M6M+/yqdOf8jlzT/G4gl/2WiZv9WVlD/OSwz/768u//Y2dfn + 39/eI/j4+AX4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + vry/a3tyfP88PT3/NWs6/xWJHf8PlR3/D5Ud/xCWHv8Rlh7/Epcf/xOYIP8SmR//E5kf/xWZIP8XmiD/ + GZoh/xybIv8fmyL/Ipwj/yadJP8rnib/MKAn/zahK/88oi7/Q6Qz/0qmOP9QqD//VqlH/12sUP9jrlv/ + a7Jn/3S2df92uoP/fL+S/4TEo/+FyLL/iM/B/5PX0v+a3d3/tOfp/9319P/1+/X/+Pz1//X7+P/d9PH/ + 2fT1/83x9f/B7vX/sent/6fm5/+f497/m+DZ/5XazP+DzKv/Zrl+/2e2cf9mtGP/ZLFY/1+uT/9brEb/ + VqpA/06oOf9IpjP/Q6Qv/z2hLP84nyz/N58t/zegL/8zny//MqEz/zOjN/80pTv/NaVA/y+hPv8qnTr/ + IpEt/zp8Pf84PTT/S0JH/97c3P/Y2daW4+TjCPj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAubi9HZ+aovA2PDn/K2gx/wyIFf8Plx7/EJge/xGZH/8SmR// + E5og/xSaIf8TmyH/FJsh/xWbIf8XnCL/Gpwj/xydI/8fnST/Ip4l/yafJv8qoCf/L6Ip/zWjLP86pC7/ + QKYz/0ioN/9Nqj7/VKxH/1quT/9gsVn/Z7Rk/3C4cf9zu37/eL6M/4DDnP+Ex6z/iMy7/4/TzP+T2Nj/ + p+Hh/8bp5P/v+fX/9vv3//L69//E6+L/suTe/6ng2v+y5eb/mdrR/5fbz/+P18T/fMyr/3XFmf9xv4f/ + cbt7/3C4cP9qtGD/ZLFW/16vTv9ZrUb/U6s//0ypOP9HpzP/QaUv/zyjLf84oi//NqIw/zakMv81ozT/ + NqU4/zimPf85qUH/O6pH/zenRf80pEL/Jp0y/y12M/8pMyf/gHt+/+fo59Pa3dsIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrW6A8PByLNIU0z/ + HGAk/wyQGP8Qmh7/EZof/xGbH/8SnCD/FJwg/xScIf8TniL/E54i/xWeI/8WniP/GJ8k/xufJf8eoCX/ + IaEm/yWiJ/8poyj/LaMq/zOlLf84pi//Pqcz/0WpOP9Lqz7/Ua1G/1ewTv9dslf/ZLVj/2y5bv9wvHv/ + db+I/33Dl/+Cx6b/h8u2/4/Rxv+U19L/ot3a/7jl3f/f8/D/7/n1//L69v/M8Oz/tOfk/6nh2/+g3NP/ + mdnM/43Vv/+L0LL/g8qk/3vElf92wIX/crt3/224bP9otV//YrNW/1ywTf9Xr0b/Uaw+/0qrOf9FqTT/ + P6Yw/zmkLf83pDD/N6Uy/zenNf82pzj/Oag9/z2pQv8/rEf/Q69O/0CtTv8+q0z/K6c5/y2ANP8uPy// + ure58ejo6TsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAMvK0F54h3//GWIj/xCbH/8QnB7/EZwf/xGdH/8SnSD/E54h/xSeIv8TnyT/ + E58k/xWfJf8XnyX/GaAm/xugJv8eoSf/IaIo/ySjKf8opCr/LaUr/zCmLf81pzD/O6g0/0KpOP9IrD3/ + T61E/1WwTP9as1X/YLVe/2m5af9svXb/c8CE/3vEkv9/x6H/hMqv/4zQv/+V1sv/odzV/7Lj3v/J7Of/ + 6fj0//H69f/N8e3/tern/6nk3v+f3dP/l9nI/4vTuf+Gzqv/gMmd/3nEj/9yv4D/brx0/2i5af9ktl3/ + YbRU/1uxTf9Vr0X/T60+/0mrOf9DqjT/PaYw/zekLf82pTH/N6c0/zeqN/83qzr/O6pA/0CrR/9Dr0z/ + SLJT/0axU/9Er1L/La48/y2FN/9ccF//zc7NfO3t7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/xQ2qta/0KHoz/wybHP8ToSL/ + EqEi/xKhIv8ToSL/E6Ai/xShI/8ToCX/FKEl/xWhJf8XoSb/GaIm/xuiJv8doif/IKMn/yOkKP8npSn/ + K6Yq/zCnLP81qC//Oaky/0CrNv9GrDv/Ta5C/1OxSf9ZtFL/X7db/2a6Zf9qvXH/cMB+/3fEi/97x5n/ + gMqn/4nOt/+S1MH/m9rO/6bg2v+z5d7/2fTu/+358P/Q8uz/terl/6fj2P+c3c3/k9nB/4fTsv+BzqX/ + e8mY/3PEif9uv3v/a7xu/2S5Y/9htln/XrNR/1ixSv9TsEL/Ta48/0isN/9BqjP/Oqgv/zWnLf81pzD/ + N6k1/zmsO/87rT//QK1E/0OsR/9Is1L/TrZb/063Xv9Rt17/Na5E/yyPOP+RrpXw4ubkGQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACyt7KpNI4+/weaGf8UpCb/FKQm/xOjJf8SoyX/EqEj/xKhI/8UoiT/FaMk/xajJP8XoyX/ + GaMl/xqjJf8doyX/H6Qm/yKlJ/8mpin/Kqcr/y6oLf8zqS//N6sy/z2sNv9Erjv/Sq9A/1CxR/9WtFD/ + W7dZ/2O7ZP9ovm7/bcF5/3PEhv93yJP/fMuh/4TOsP+N07n/lNfF/5vd1P+o49v/wevf/+b37P/Q8ej/ + uOri/6jj0/+c3sf/ktq7/4XWrf+A0J//esqS/3PFg/9vwHX/bbxp/2e4Xv9htlX/XLRO/1WyRv9QsD// + S686/0WtNf8/rDH/OKst/zOrLf80rDD/Oaw3/z2tP/9BrUT/R7BH/0euSP9PtVn/VLZl/1u9bf9lw3H/ + RKtQ/yuYN/+axZ7U9PHzCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcq55SMow8/QibGf8RoSP/EaEj/xGhI/8RoSP/ + EqEj/xKiJP8Toyb/FKMm/xWkJv8WpCb/GKQn/xmkJ/8bpCf/HaUo/yGmKf8lpyv/KKgt/yypLv8xqjD/ + Nqsz/zyuNv9Crzr/SLA//02yRf9RtEz/VrhT/127XP9jvmf/asJz/3HGf/92yo3/fM2c/4LQp/+K07P/ + kda8/5jbx/+g4NH/rubZ/8Lu5f+67OX/quXc/6Hgzf+a3cH/lNq2/4rXq/+F0p7/gM6R/3bJgv9uw3P/ + aL5n/2G5XP9dtlL/WbRL/1KyRP9NsD7/SK85/0OuNv89rDP/N6sw/zOrLv81rDT/Oq09/z+vQ/9Er0j/ + S7VO/0u0Uf9StVz/WLZm/2bDdf9uynr/Rq9T/zCcPf+Qv5TB8u/xAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXrJoR + L5E85QSYF/8QoCL/EaEj/xKiJP8ToyX/FaQm/xWkJv8UpSj/FKUo/xWmKP8Wpij/GKYp/xmmKP8bpin/ + Hacp/yCoKv8jqSz/KKot/yurL/8vrDD/NK0y/zquNP9Arzf/RbE8/0qzQv9OtUj/UrdO/1m6Vv9fvWH/ + ZcFt/27Gef9zyof/es6V/37Rn/+F06v/itWz/5HYvP+V3MP/m+DM/53j0f+X4tD/leDM/5LdwP+P2rT/ + jdiq/4fWof+F05f/gtCN/3jLgf9uxHL/Zr9l/126W/9atlH/VrRJ/1CyQ/9JsD3/Ra85/0CuN/88rjT/ + Nq0y/zatNP87rzz/QLFF/0SzS/9JtlH/T7xX/1K5Wv9at2T/ZLpu/3nOhP970ob/S7FY/zaiRP+XxZy9 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALps8tAKWFf8SoiT/E6Ml/xWlJ/8Xpyn/Gagq/xmpK/8UqCn/ + Fagp/xWoKf8WqSn/GKkq/xmoKv8aqCr/Hakr/x+pLP8iqi3/Jqsu/ymrL/8trDD/Ma0y/zavNP88sDf/ + QLE7/0a0P/9KtkX/T7hM/1e9Vf9fwV//aMdr/3DKeP91zIP/e86P/37Rl/+A06H/gdSo/4fXsP+L2rf/ + kN3A/4/ewv+B3Lv/hN27/4fbs/+I2Kj/ideg/4TUl/+A0o//e86F/3HJef9ow2v/Yb9g/1m6V/9Wt07/ + UrVI/0y0Qv9Gsj7/QrI6/z6xN/87sDX/Oa83/z2xPv9DtEf/R7ZN/0u4Uv9Ou1f/Ub9d/1e9Yv9lvWz/ + dcF7/47blv+F1o//TLFb/zumSv+j06unAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHpgsegaXFv8VpSf/ + FqYo/xmpK/8brC3/Hq4v/x+vMP8TqCn/FKkq/xWpK/8Wqiv/F6or/xiqLP8ZqSv/G6os/x2qLP8gqy7/ + I6su/yasL/8qrTH/Lq4z/zOwNP84sTb/PLI5/0K0Pf9JuEP/Ur1M/13EVv9jyWD/a81r/3TPdv94z4D/ + etCH/3vUjP951pT/eteb/3/YpP+C2ar/htyy/4jdtv983bP/ft2y/3/aqP+B2J7/gtaV/3/Tjf960YX/ + dM58/23Jcv9mxGb/X8Bc/1e9U/9Tu0z/TrlH/0i5Qf9Etz3/QLU6/zyyN/86sDj/PbE+/0O0R/9It07/ + S7lT/027V/9PvVv/Tr9f/1jAZ/9wxHb/g8yH/53lo/+L15X/TK9b/z2oTf+v4biYAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF5EkPwqdHP8UqSf/GK4t/xurMf8mrDn/KbI7/ySzNv8aqzD/Gasw/xirLv8Xqyz/ + Fqwr/xerK/8Yqyv/Gqwr/xysLP8grC3/Iqwu/yWtL/8prTD/La4x/zCvMv80sDP/ObI2/z+0Ov9HuUL/ + UcFL/1vIVP9ezVr/Yc9f/2rQa/9y0Xb/c9J7/3HVff9v14H/cNiJ/3bakf9425j/fdyg/3/cpv993ar/ + e92o/3jZmv9315D/d9aK/3XUhP900n3/b9B1/2nNbP9ky2L/X8ha/1jEUv9QwUn/Sr9E/0W+QP9Buzz/ + P7c6/zuzOv87sjz/PrRC/0G1SP9EuE3/SbpT/068Wf9Svl7/U75j/13EbP92yoD/lM+Y/67ls/+F1pD/ + RLFW/0SmVf/B7shqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5EuGA2gIO0OqiP/ErMs/xysNv85r1D/ + ObNN/y+5Qf8rsUH/J7E9/yKxN/8crzL/GbAu/xevK/8WrSr/GK0q/xuuK/8drSz/IK0t/yOtLf8nri// + Kqww/y2oMv8vpTP/M6Y2/zutO/9DuEH/TcNI/1XIT/9TxlL/UcFS/1O/WP9Zv2L/XsFo/17Ca/9gxXD/ + Zst4/23Tgf9v1Yf/cNCN/27LkP9nyZH/csya/2nMiv9r0IL/bNR//2vVev9r1HX/Z9Bt/1/JZP9Ywlz/ + U75V/1G9T/9KvUf/Rb1B/0G9Pv89tzz/Oa08/zanO/80pjz/NKc+/zWsQf89s0f/RblR/1G9W/9awWP/ + Yb5r/2jJdP+A04v/qdKv/7zjw/9204T/OLFN/16qa/jg/OYpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKlPBQ2QG8cOpiP/C64k/xuyNf9Hwl3/Rr1Y/0DCUv85u03/NbpJ/y65Q/8otzz/I7Y3/x+zNP8asS7/ + HLAv/x2wLv8dry7/IK8v/yOvMP8lqTH/JZo0/yKGNv8gdzj/I3Y6/ymDPv8zm0D/QLRD/0m/SP9Er0n/ + OZFJ/zOASv80fU7/OH5R/zl/VP8+h1n/S55i/1y8bv9ixXb/Wa50/0uSb/8/g2z/Rot1/0Wdbv9bvXP/ + Z89z/2bTcP9gy2n/VbZg/0WcV/85h1D/NH5M/zSDSf83lUT/O6g//zu0Pf82pz7/LIw//yV4QP8jc0H/ + JHtA/yiRP/81qkT/Q7pS/1LAXf9dxGf/Y8Nu/2/Ke/+M1pf/suC5/7ruw/9uzXz/O6ZL/4PDjebb++IO + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOBIJAQoSP/C7Ek/xO1Lv9MzWT/XtBw/1TKZv9Hw1r/ + QsFW/zu/UP80u0n/L7pD/ym4Pv8ktzf/I7Y2/yK1NP8itDT/IrQy/yOxMf8gnDP/GHU//wxydv8Hh6j/ + B5C1/wqJpf8Wcmv/KH9C/zafQv8vikr/EYmc/wqQuP8KkLj/CpC5/wuRuf8Mkrv/H4eP/0aaXv9Ssmb/ + OZJ3/xWGpP8Mkb7/DY65/x2Gkf9KpmT/Xcln/1rKZP9Kqlr/MHdV/xh0gf8Mia3/CpC5/wuJrv8VdHr/ + JnVC/y6XPP8qkD3/E4B+/wiMsP8Hj7f/DIKc/x2EZv81pkj/R75W/1bFYv9hyWz/aMt1/37Pif+h26n/ + ve3E/67xuP9gxG//TqZb/6rdsbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGPP1cUoCf/ + Dbcm/wq3Jv9Cy1r/ct+E/2jQeP9XzWr/Uspm/0vHX/9DxFb/O8BQ/za/TP8xwUT/Lr9B/yq9Pv8mvDn/ + JLs2/yO4NP8YjDH/C4CF/wKs4v8JbX3/EVtY/w1pev8DrOL/DYWa/yR0QP8jbkD/DH+Z/wC+/f8LiK3/ + FlVb/xhZXP8SbYT/EY+t/zmMUv9JsVr/N4VV/xdqfv8Avv3/BqLV/x5eTf9EqVr/Vchb/0u6V/8ve1D/ + C5W8/wC9+/8Dq+H/C4Wo/wuDpf8Epdn/C4yn/yF1Pv8kiDr/Flc+/wSezP8Avv3/EWl8/yZ6SP87sk// + TMRb/1vLaP9mz3L/cNR9/5DZmv+3477/v/TH/5Hmn/9TvWP/drp+/8fqym8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG+8eR4bpS3/C7cl/wW7I/8xwUv/euKL/3vZif9q233/Zdh3/13Tb/9Tzmb/ + S8te/0XJWf88yFD/OMhM/zHHRf8qxD//JsM6/yC+M/8YjTT/EHyA/wlwfv8UZDv/H3dA/xZRQP8JfZv/ + Abby/xRhWf8cYD7/C32X/wC+/f8LgaD/IF1C/yh0Q/8hYUr/G4iH/zuZTP9Iu1H/OZRP/xhmcf8Avv3/ + B5vK/yNpSf9EtFH/TshR/z+pTv8cbWb/Abn2/wK07/8VT07/H2ZB/yJpQ/8WT0v/BZ7O/xRrWv8ghTj/ + FmI6/wSaxv8Avv3/E2h2/y+NTf9Dv1X/T8pg/1/QbP9q1Hb/dt2E/6Djqv/I587/vPPF/3PUgv9JuFr/ + m9Of6dfw1xYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpji5BK8X/wzEJ/8kuDz/ + atx8/4zkmf994oz/eN+O/2zbgv9k2nD/YNdv/1XNaf9IzV3/Q85X/zzMUP8zykj/LclB/ybCOv8npj// + HX9W/xNpUP8YZz//G2NC/xJOSv8Gkrv/AL79/w9obv8ZWjz/CnyW/wC+/f8KgKD/G1c//yNqQP8fd13/ + L4RD/0CxRv9Hw0r/OZtK/xhnbP8Avv3/B5rH/yZwRv9CuUj/SMdI/zadRv8Va27/AL37/wadzP8dY0D/ + LqQ9/zCqPf8gbz//CYWl/wxze/8afjf/E2g4/wSaxv8Avv3/EmV2/yp5T/8+qlf/UL5k/2XPdP9y1X7/ + hOCQ/63mtf/S7tf/re23/2DKb/9PuF//pt+shAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA8pUo8C6sX9grBG/8aui3/P8lS/5Dwn/+T3p7/i96g/4Lhl/933oT/ddt+/2fQdf9d1XD/ + V9Nq/03RYv9E0Fj/Ps1R/zrJTf8vsEb/IH9D/xFbVf8Ke5X/BprH/wKy6v8Avv3/Abbx/xJnW/8ZYjv/ + Cn2W/wC+/f8IiKv/EVJW/xFdZv8NkKr/LIc//z+7Qf9DxUT/NJtF/xZnav8Avv3/B5rG/yRwQf88uEH/ + QcVC/y+ZQv8Sa3D/AL79/waVwP8ecj3/L7Q5/y68N/8egTr/CH+W/wl4hf8VeTb/EGc3/wOaxv8Avv3/ + EWV7/xhbYf8mcGH/QIhh/2Kzdv9+0Yr/nOGl/7/qxf/H8s3/htiQ/1nBZv91w3/wxPLKKQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4y4YCKKY2rACzCf8QxiL/JLQ3/2jmfv+v6L// + n+ag/5jloP+R36r/gNyN/3fief9u3YD/aNt5/1/Ycv9V1Wj/UNVh/0jPW/85q1H/HXJe/wOt5P8Avv3/ + AL79/wGy7P8EnMn/DW95/x13O/8bcjn/CX2V/wC+/f8Dp9n/Bo+1/waVv/8LjKn/KIM7/zm4O/89wTz/ + MZk//xVnaP8Avv3/BpnG/yJvPf84tT3/OsA9/yuUPv8Qam//AL79/waQtf8ddjr/LLY2/yu9NP8chDf/ + CICV/wl4hf8TeDX/EGY4/wOaxv8Avv3/DniY/wmWxP8Dsuv/E4qt/0N7a/99xI7/rOWy/8b0y/+k563/ + aMh0/1SvYP+n266o4P/lBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QKNKLg6uGPQHxBT/G7Yu/ynHPv+s67T/tPG6/6fdsP+o5bb/memj/4vokv+D4ZH/fN+L/3Pcg/9o23n/ + Y9lz/1nSav8/nlv/FYCS/wC+/f8HmMT/E1pj/xdRRf8VUkL/GWhB/yCPO/8aejj/CH6V/wC+/f8GgJ7/ + DkU7/xBNPf8Kg43/HHo3/ySbNP8opzT/Iow3/w9lZP8Avv3/BJnF/xhoOf8moDX/JqM4/x1/Ov8MZm3/ + AL79/wSPtP8Wdjb/IbUw/yG8L/8VgzT/BoCU/wZ3hP8PeDP/DmY4/wOaxv8Avv3/E2N4/xxGTv8Sepz/ + AL38/x9/oP90rI3/tOW9/7fvvv971ob/W75o/3/DiPLh9ucUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcsV5AjOuO5sEpxD/Ebok/w/AI/9gzmL/rfjA/7zsyv+26rP/ + ruyx/6Dnsf+W46D/kOOc/4fgk/983or/ddyD/2nUef9Ko2X/G32Q/wC+/f8QaH7/GlJI/x5oSf8UYVr/ + DIqW/xmBPf8Scjn/BX2V/wC+/f8Df53/B1A3/wheNf8HWUD/B1o4/wZ0WP8Hdkb/B2My/wRcYP8Avv3/ + AZjE/wVQNP8HbC//BYVs/wVUNf8DYGr/AL79/wKPtP8IbDH/DK0n/wy0Jv8Jei//A32T/wN0hP8IbTP/ + CV43/wOaxv8Avv3/E2N5/x1GUP8YaYT/AL79/xKRwf9vnIv/ruO4/5fkof9WvmT/bcF4+Lzpwnfw+/MA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHzCfCAtpzb3 + BbQS/xTFJv8Wuh//bt58/8P7zv/H7sr/uea+/7fuvv+p6rH/pOmt/5rnpf+P5Jr/iOKU/33eiv9iu3f/ + Nnps/weq3/8ImMb/GFJc/xhPUv8MfJz/CZO4/xtuQf8UYD3/B32Y/wC+/f8EgqL/B0M6/wdFOf8Dg6H/ + BFpi/wNxhf8EZHH/BUA3/wRaYv8Avv3/AZjE/wQ/N/8EQjj/ApG4/wRBOP8DZHH/AL79/wGYwv8GWzT/ + C5wp/wukKP8HZzL/An2X/wJ2jf8GUTb/CEo5/wOcyP8Avv3/FGR7/x1NW/8MlsT/AL79/x2Nt/95o5L/ + mNqk/2/RfP9SvGD/ldSeu+P86AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABnvmWMGawi/wy4If8JvBn/IL4g/43nl//b9Oj/0+3W/8T0x/+68MX/ + t/C7/63rq/+h6KP/muik/4/lnP9+1Ir/YKt5/zl4bv8Xiqv/Cp/P/wig0v8LmsX/GYSN/yh7Sv8Xe2z/ + CJG2/wSfzv8En87/A5/N/wKfzf8CoMz/BWFl/wRvfP8Cn8z/Ap7M/wGey/8Bnsv/AJ7L/wGezP8Bnsz/ + ApW+/wNXW/8ChKP/AZ7M/wKXv/8Ee2//CZEr/wmXKP8FfWD/ApO2/wKPsf8GWlT/B298/wWYxf8Gn9D/ + CKDR/wmg0/8Mn9P/IIuz/1SDgf+AvpP/d82C/1e8Y/92yYHpxPbMOAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC73b0bb8V33g+iGP8OtxP/ + Brsb/x+2Mf+n56D/6fzo/9bv4f/O7tP/y/LM/73su/+37rj/r+qz/6Dip/+Z4aL/itKW/3G2hf9WlHP/ + SIBp/z96Yv9AhGD/RZlg/0KlWv8zkVD/J3hK/yBtRf8dbEP/GWw//xVsO/8QdDb/D38y/w96Mv8NbjL/ + Cmgy/whnMP8FZS7/A2Us/wZmMP8IZzD/CGsw/whvLv8IbC//CGgv/wltL/8Jgij/CJ0h/wihIf8Iiij/ + CHMu/whwMP8QdzX/GnU+/yVvS/8ublT/NnRa/z12YP9QfnD/apeE/3Oyhf9nyXf/XsFp/3vCgPS04LpT + 5/vsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAsOy2PV29ZOIIsA7/DKcr/wqxGP8isx3/meGd/+b15//r8eX/3/jk/9H32//B7sn/ + wevC/7ztvf+s6rL/pOes/5ffof+H05T/fcuM/3THg/9wyH3/as14/2HMbv9TwmT/TLtd/0G1VP88slD/ + NrFJ/y2vQf8lsTn/IbQ2/xqtMP8XqS7/FKYs/w+lJ/8KpCP/BqMg/wmjI/8JpCL/CKUg/wilHv8HpB7/ + CKQe/w2lI/8LqB//C64e/wyxH/8PrSP/EKon/xKnK/8dqjT/LqxD/0OyVv9St2X/YLtx/2u+ef9zyYH/ + eNKH/2/Kev9hvm3/dL177KrerVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKzjtSZDrUjODZkJ/waxF/8BqBH/ + H60g/4Tbiv/c9eb/7Pro/+v13//i9t7/0vXe/8Tv0f/B7cT/uuu9/6/otP+k5av/nOOk/5XgnP+N3JT/ + hdqN/3rWg/9u0nj/aNBy/1zKZ/9Vx2D/TMZY/0LCT/83wEX/Mr1B/yi6Of8kuDX/HrYw/xi2K/8StCT/ + DbMh/wqzHf8Ksxz/CLIZ/wexFv8FsBT/BrEV/w2yHP8OsRv/D7Ac/xKyH/8Ytib/HLcp/yG1Mf8uuj3/ + QsFP/1jIY/9mznH/dc99/3vRgf9y2nz/ZtVz/16+af9zwX7aks+YOQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACGvH8YOpw4pgaNCvwLpRf/AqUI/wutD/9gwGX/zfHO//r5+P/19PX/2Pvd/8320f/W7tb/ + zezP/8Lpxf+357v/sOS1/6ngrv+i3Kb/m9uf/5DWlP+E0on/fdGE/3LLef9qx3L/YMVq/1TAYP9JvlT/ + QrpP/zu6SP84uET/MLY+/yi0Nv8isjD/HLAr/xKvIv8RriD/Dqwc/wyqGf8JqBT/CqkU/wysGP8Oqhr/ + Eakc/xerIv8fsCn/JrEw/zS0QP9Bu0z/UsJc/2PIa/9ty3b/dsx9/3rQgf9ty3X/W7dl/Wi0cbuQzZkg + t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcK56CDiXM3ALjhT0B5wV/wqnCf8Onwv/ + RKxN/6bftP/p/PD/7Pfm/+r04f/o9Of/3/Pf/9Tv1v/K7Mz/wunG/7zlv/+14Lf/rt+x/6Lapf+X15v/ + kNWV/4fRjf+Azob/dMp9/2fFcf9bwGb/Vb5g/068VP9JuU//QrZI/zm0QP8ysDn/LK80/x2sKv8aqib/ + F6gj/xSlHv8Soxr/D6MY/wqnFv8NpBj/EqQb/xymJP8kqyv/Lq82/0O3TP9Qvln/XsNm/2vGcf9xxXb/ + ccl3/2vHcv9ksWn3baxziIjAjw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjmzgzGoQbwh2AGf0MnRD/ApcE/xegGf95x3n/0ejQ//n3+P/4/Pj/8Pfw/+bz5//c9N// + 0/TW/8zxzv/F7MX/vOe9/7Titf+s3q3/pdil/5janP+Q2ZX/hdOM/3rOgf9vyHb/acVx/1+9Y/9bu13/ + VLhX/0u0T/9BsEX/Oq0//yusNP8oqi//I6Yq/x+jJv8anx//Fp4b/w6lFv8QoRf/F6Ac/yGkKP8sqDH/ + O65A/1S4Wv9dvWH/ZcFq/2zDcP9twXL/ZLtr/lWqXdJYnV5AiLmMAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATIVKDyd3JXQHgAbpAosD/weaC/8Igwn/ + O5w5/5/Snf/j8+P/+Pv3//T08v/w9u7/6/rr/9/33v/V8tH/zOvI/8nrxv/D58D/tdqy/6vbq/+l2qf/ + nNOe/5LMlP+Kxoz/hcSJ/2+8df9nuW3/YLZl/1i0XP9TtFf/T7RT/z2pQf85qDz/NKY2/y+kL/8ooin/ + IqAk/xeeHv8anSH/IJom/ymcMP89qUT/ULJU/2K2Yv9kuGX/YbVk/2i6bP9kuGjuWqhgh2edbhYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAcgRwoCG0IoAaCCfgHkAv/BIUF/xSAFf9Dl0P/mdGX/97w2//3+vT//fT4//nu9v/z7PD/ + 6ezn/9/w4P/R79P/wOfE/8TgxP/D3cT/uNi5/6vRrf+dyp//lsaZ/4fMi/+AyYP/dMN3/2i9av9dtl7/ + VrNY/1exW/9OrFL/Q6dG/zijOf8vojL/K6Eu/x+SKP8gkCr/K5c0/zqjRf9CqE//SKlR/1OtVv9gsmL/ + Zaxo/FmZXLFlpGcxZ6xrAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5FCAQpqCy4DcAOqBn0G9AaEBf8Hgwb/ + EXoQ/zOCMf+Atn7/v+S9/+f55//3+/j/8fXy/+nv6v/i7eT/3+vh/8vkzf/C4sT/uuG+/7DgtP+k26n/ + mteh/57Ln/+dyZv/lMeT/4nBh/99unr/dbZy/2iyav9js2b/WK9b/0OkRv8pkiv/H4oh/zCSL/81lTT/ + PJs+/0ejSf9RrFX/WbBc/1mqW/hWnle0VZFVPmqXaQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQZxAECV8JMQZqBpUHcAXoBnAF/gNyBP8Hcwj/HH8d/06YT/98uH7/qtmr/9Xx1f/v+O3/ + 9fbz/+rv5v/l7uH/4e7e/9jp1f/J38n/wNjA/7nUtv+xz63/p8mh/5vElv+Uwo3/kMKJ/3bCdv9brFz/ + PpM+/yyGK/8piCj/Lo4r/zWRLP8/lzf/TZ5G/1agTv9QlknsSY9FpFKSUztQjlEGAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZxwbA1YEaANkAsEFdAb7 + B3YG/wVqBP8HaQf/GnMZ/zN+MP9WkVD/dahu/5/Dmv+v0Kv/vtu5/8jjw//M48b/y+HF/7Tgsf+p2qb/ + mc+V/4C9fP9nqWL/U5lO/yJ+If8fehz/IHsc/yZ/If8vhij/NIwu/zSNM/9AkD/8Q4hBzUaBQXVVikwg + Wo9TAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUgCF8GagZlAq4EaADiB2sC/AJoAP8AZAD/BGgD/wpmCf8MaQz/ + EXER/xh1Gf8edR7/H3Me/yJ4I/8fdR//F3EX/xJvEP8QcA3/D3MN/xF7Dv8WexH/HHwW/yN8HP4sfSHl + M4Mrtit/M3Ukcy0mLnQ2AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJAAIATwAS + CF0INgJcAWMBWwCbAFsAvgFgAd4BXwHrAV0B8gFcAfgBXwH8AmIC/gNlAv8DZAH8AmMB+QVlAvMMagbs + D20K4QhjA8MQaQmfHXMWaiR3Hz0YZxETDF0GBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVeFAcRWxAYClcJJgVVBTICVQI6 + A1cEPwZYAz8HVwM7ClkGMxBcCygZYhUaHmcaCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////// + ////////////////////////////////+AAAP///////////wAAAB//////////+AAAAAH/////////w + AAAAAB/////////gAAAAAAf///////+AAAAAAAH///////4AAAAAAAD///////wAAAAAAAA///////gA + AAAAAAAf/////+AAAAAAAAAH/////8AAAAAAAAAH/////4AAAAAAAAAB/////wAAAAAAAAAA/////gAA + AAAAAAAAf////AAAAAAAAAAAf///+AAAAAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAD///4AAA + AAAAAAAAB///wAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAAAAAAAAAAAf//gAAAAAAAAAAAAf//AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAH/+AAAAAAAAAAAAAH/8AAAAAAAAAAAAAH/8AAAAAAAAAAAAAD/8AAAA + AAAAAAAAAD/4AAAAAAAAAAAAAD/4AAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAAAAAAAAAAAB/wAAAA + AAAAAAAAAB/wAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAAAAAAAAA/4AAAAAAAAAAAAAB/4AAAA + AAAAAAAAAB/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAB/+AAAAAAAAAAAAAD/+AAAA + AAAAAAAAAP/+AAAAAAAAAAAAAf//AAAAAAAAAAAAAf//AAAAAAAAAAAAA///gAAAAAAAAAAAA///gAAA + AAAAAAAAA///gAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAAAAAAAAAAB///wAAA + AAAAAAAAB///wAAAAAAAAAAAB///4AAAAAAAAAAAD///4AAAAAAAAAAAD///4AAAAAAAAAAAD///8AAA + AAAAAAAAH///8AAAAAAAAAAAH///8AAAAAAAAAAAH///+AAAAAAAAAAAP///+AAAAAAAAAAAP////AAA + AAAAAAAAf////gAAAAAAAAAA/////gAAAAAAAAAA/////wAAAAAAAAAD/////4AAAAAAAAAH/////8AA + AAAAAAAH/////+AAAAAAAAAf//////gAAAAAAAA///////wAAAAAAAD///////8AAAAAAAH///////+A + AAAAAAf////////gAAAAAB/////////8AAAAAH//////////gAAAA///////////4AAAH/////////// + /4AH//////////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAA + AAAAAABAAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkpKED09PSY1NTU2 + LS0tPi0tLT06OjozS0tLIVhYWAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAPJSUlTiQkJIwjIyPA + IyMj6SwsLP84ODj/QEBA/0dHR/9FRUX/Ojo6/ywsLP8nJyf8Jycn4SwsLLMqKip9Ojo6PVZWVgYAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpChkZGVksLCy1 + Nzc39lBQUP9jY2P/c3Nz/4KCgv+Li4v/k5OT/5iYmP+ZmZn/nZ2d/6Kiov+jo6P/np6e/5qamv+Dg4P/ + Xl5e/0VFRf8pKSntJSUlnzY2NkFXV1cDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4U + ICAggjQ0NOpTU1P/b29v/3Z2dv9/f3//h4eH/5CQkP+dnZ3/paWl/7CwsP+6urr/wMDA/8DAwP/AwMD/ + wMDA/8DAwP+6urr/tLS0/7W1tf+qqqr/oqKi/3p6ev9AQED/JSUl1ScnJ2RPT08HAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACYmJgooKCh7PDw88WRkZP9ubm7/d3d3/4eHh/+RkZH/q6ur/8nJyf/e3t7/7Ozs//Ly8v/39/f/ + +/v7//v7+//6+vr/+fn5//n5+f/x8fH/7+/v/+np6f/g4OD/1dXV/8PDw/+6urr/r6+v/5SUlP9OTk7/ + IyMj3CwsLFhEREQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACIiIkU9PT3bXV1d/2VlZf9tbW3/h4eH/62trf/R0dH/7+/v//v7+//+/v7/ + +/v7//39/f/+/v7//v7+//39/f/9/f3//f39//7+/v///////v7+///////+/v7//v7+//n5+f/y8vL/ + 5ubm/9DQ0P/BwcH/tLS0/5OTk/9ISEj/IiIivCwsLCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMjBzMzM49RUVH8ZmZm/29vb/+Hh4f/ubm5/9zc3P/z8/P/ + +Pj4//b29v/y8vL/7Ozs/+fn5//k5OT/5OTk/+bm5v/n5+f/6+vr/+7u7v/09PT/+fn5//n5+f/9/f3/ + /v7+//7+/v/7+/v/+/v7//z8/P/5+fn/8fHx/9vb2/+/v7//sbGx/4GBgf8xMTHyIiIiYAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSkpGUBAQMRZWVn/YWFh/3t7e/+srKz/ + 39/f/+7u7v/s7Oz/4ODg/87Ozv/Hx8f/yMjI/8jIyP/Ozs7/1NTU/9jY2P/e3t7/5OTk/+np6f/t7e3/ + 8fHx//X19f/29vb//Pz8//7+/v/8/Pz/+/v7//39/f/8/Pz//v7+//z8/P/6+vr/6urq/9XV1f+6urr/ + oaGh/0tLS/8jIyOXNTU1BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExJ0ZGRt5iYmL/ + aWlp/5aWlv/MzMz/5ubm/9ra2v/IyMj/ubm5/7a2tv+9vb3/xcXF/83Nzf/b29v/3Nzc/9ra2v/c3Nz/ + 29vb/9ra2v/W1tb/1NTU/9bW1v/Y2Nj/39/f/9/f3//h4eH/6urq//Pz8//8/Pz//v7+//39/f/4+Pj/ + +/v7//z8/P/6+vr/5eXl/8jIyP+2trb/YmJi/yEhIbgxMTENAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MTExKklJSeZcXFz/cnJy/62trf/d3d3/0dHR/7m4uP+pqaj/r6+v/7q6uv/Ozs7/2NjY/9ra2v/P0ND/ + t7e3/5ydnv+Fh4j/dXh6/2lsbv9cX2H/WVxf/11hY/9obG3/c3V2/4GBgf+RkpL/q6ys/8HDw//V1tb/ + 39/g/+np6v/y8vL//Pz8//7+/v/8/Pz/+fn5//b29v/p6en/1tbW/7i4uP9tbW3/IyMjwkRERA4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAOzs7IEtLS+NdXV3/eHh4/8DAwP/S0tL/tLS0/6Wlpf+rqqr/t7e3/9jY2P/g39// + xcXF/5ydnf9tb3D/UlRW/zo7QP8yMzr/MDM6/y00Of8vNj3/MztC/zc9RP8vOD7/Mzo//zw+Qf8/P0H/ + Pz9C/zg+RP88RU7/WmJn/4OJiv+1uLf/2NrX/+Dg4P/w8PD/+vr6//r6+v/19fX/9fX1//X19f/Y2Nj/ + vb29/3Nzc/8nJye8TU1NBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyEEJCQtNbW1v/goKC/8DAwP+/v7//nJyc/52dnf+1tLT/ + 19bW/9HR0f+kpKP/bGxr/0NDQ/8pKiv/MzU1/09RT/91d3X/l5mX/6+1sv+3w7//vsrH/8bRzv/J0tD/ + xs/O/7/Ix/+8xMP/rLOz/5afnf9tfXv/PFRS/yQ0Ov8gLTT/OEBF/2Zoa/+en5//0dHR/+Tj4//v7u7/ + +vr6//n5+f/u7u7/8vLy/97e3v+6urr/bGxs/zExMaFsbGwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAjw8PK1dXV3/fHx8/7m5uf+np6f/ + j4+P/6Wlpf/T09P/0tLS/6Cgn/9iYWH/OTg3/ycpJf9UWFT/mJyZ/8XHx//RztT/0dPW/9HX1//R2Nj/ + 1tzc/9jf3P/X4dv/2N/d/9ff4P/W3t//1N3e/9PZ2//W2Nv/0tTV/9HQ0f+6wsH/j5ud/09bYP84PEL/ + PDs8/2FgYP+bmpr/0tLS/+np6f/29vb/+Pj4//Ly8v/s7Oz/3Nzc/7q6uv9WVlb/REREbwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3N2pUVFT/ + eXl5/62trf+hoaH/lZWV/7Kxsv/Z2dn/ra2t/2xsa/83Nzb/Li0t/3Z3df+4vrj/z9XQ/8PKxP/P1s// + 0tzS/8/g0v/D3Mn/tda+/6/Uuf+n0LH/os+s/6LQsP+cz7H/nNGy/6XWuP+u2sD/u97I/8jg0P/Q4Nb/ + x9PJ/8vWz//P2NT/usDB/3x7fP88Ojr/PDw7/2ZmZv+zsrP/3t7e//Hy8f/5+fr/8fHx/+np6f/S0tL/ + rq6u/0pKSvhpaWkxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADg4OCRJSUnzZmZm/5iYmP+Tk5P/k5OT/8HEv//Ky8j/jYuK/09MTv8uKzb/cnFt/7/Au//KzMv/ + v8a7/77Mvv+1y7r/pcSq/5bDmP+Kv4r/gL+B/3a5ff9ss3z/aLR8/2Kzef9csHv/TrB8/061gP9SuoL/ + XcCF/2HAgv9vx43/ec2V/5bNpP+s1bX/vtfH/8POy//K1sz/ycjG/3hzdf80NjP/RkpF/42Ojv/Mysv/ + 8u7s//j4+P/t7e3/4uLi/87Ozv+Wlpb/WFhY0Z6engYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0OzXl5e/4GBgf+Tk5P/k5OT/8bGx/+2t7j/dnZ3/zw8PP9JSEb/ + sLOq/8DHwf+0wrf/q8Kx/5K5m/+Csn3/ebRq/22nXf9hk17/T4Bc/0p6YP9BfmH/PoVi/z+Mav9Dk3D/ + QJly/yeYbf8al2v/EZdn/xeYZP8dmWD/LKRk/0C0b/9QwXL/W8Rz/3jOjf+N0p7/rda0/77Qvv/Q0s// + rq2u/09NTP88Njz/dXBz/8vIxP/p6en/+Pj4/+np6f/Z2dn/u7u7/3Fxcf+KiopzAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDxGUFBQ/3R0dP+Tk5P/jo6O/8fHx/+sq6z/ + cGxy/zg5O/9vdXT/u8K9/6+2rv+btaL/iLOD/3msZ/9qnl3/UHtK/z1bO/84XD7/Qm5M/0uIV/9Xm2D/ + WKdq/1ivdP9YtHj/Wrp8/1i6g/87tYL/KLSB/yKzf/8js3v/H7Bt/yCtZ/8RoVj/FqVS/x+nUP8+t2H/ + Xcl1/33Qi/+d1p7/rc6s/7vJuv/Cw73/bmxt/zY0Nv9wbmv/uLi4/+7u7v/z8/P/6Ojo/9DQ0P+np6f/ + f39/8M7OzhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKSkoBRkZGyGZmZv+Li4v/ + iIiI/8TExP+kpKT/bWxt/z46O/+IjYj/uca7/56vnv+Nrov/aqVk/12VU/9BYjj/KUAn/y9PKP9BczX/ + SodB/1KcUf9aqGL/X7Bs/2K2e/9kvIf/ZcGO/23HlP9qyZn/R8iZ/yjEkf8dwof/IcKE/yLCf/8txIP/ + I792/yK5bv8hsmP/JKxc/yirVf9DvV7/ddZ2/4bSgv+c0Zn/sMyt/77Pv/+EiIf/NTA0/2xsbP+5uLj/ + 6+vr/+/v7//e3t7/xsbG/4qKiv+ysrKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QEBAQ1dXV/94eHj/i4uL/7GzsP+trqr/cW9u/0hER/+PlIr/t7+o/5aykP9vonb/YpxU/0BrOP8dNBn/ + JEUh/zBoJP9AfzD/SZE3/06bQ/9YqVj/YLZr/2TAev9txIv/ccaX/3LKn/92zaL/dNCs/03Nqv8uyKL/ + Lcqh/yvNmv820p3/OtOY/zLSi/8ny33/Lcp5/zLEdP8wvGj/MLZY/0u1UP9rymD/dddt/4rTg/+fyqP/ + wNC9/5GRif88Pz3/b3Nw/7u8vP/x7vD/6Ojo/9DQ0P+rq6v/pqam8fPz8xEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAEhISLJmZmb/jo6O/52dnf+5urn/dXV1/05OT/+Hh4f/rbmw/4ekjf9sn2b/ + UY09/yRGHv8WLxP/IlYd/ytwJP8ugSb/P480/0qYPv9SnEr/Xp9e/2qkdv90qov/dbGZ/3K4pf90vq7/ + d8S2/3DEuP9UwLn/O724/zvAu/8zwK3/Qcay/0zJr/9HyKL/P9SX/zjUiv870oD/O9Jy/zvKYv9Vw1j/ + V7pL/1W/Tf9t1Gb/gtF//5rJkP+3xbf/f4B//0FBQP+AgID/0M/Q//Dw7//f39//xMTE/5ycnP/i4uJe + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKShlOTk76dXV1/4uLi//CwsL/f32A/1ZWW/9yeHb/ + rbqr/4Gjhf9go1r/PXs2/xYsEP8RLg//IFga/yZ0G/8tgCL/PIUv/0KEN/9Jgj//UYVJ/2OSW/9up3b/ + gb6X/47Lq/+R07r/j9bC/43ZyP+I2cr/d9bO/1XQy/9Fy8X/QcnB/0LHvP9Oyb3/Tsew/0zEq/8/wJT/ + SMeI/1DPe/9J0mX/YtVh/2DKU/9UvUz/SL4//2HUVv992G7/lsmb/7nJtv9rbmj/VVRU/4yRjv/i4uL/ + 7u7u/8/Pz/+lpaX/x8fHdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBvXV1d/4WFhf+np6f/ + mpqZ/2tpZ/9dX2L/orCh/42ogP9Zm1n/OWss/wwlB/8TKxL/FVgO/yN0Fv8seR7/MXEk/zh0LP9Cfzb/ + WJdI/2utW/98uWv/hcSE/4/Ppf+X07b/m9fD/5nZyv+V2c3/kdnQ/4HX1v9aztD/QMfL/z/Hyv9Cycf/ + SMnB/0zJvf9BwrD/Obyb/zi4hv89tXb/Prpo/2LQaf9r1ln/YtFS/1PBQf9Cvjz/VdFK/3XYbf+Vz5P/ + p76k/0pLSv9na2n/p6en/+7u7v/X19f/vLy8/8TExNPy8vIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCvm9vb/+Ojo7/tLS0/2trav9cXFn/mJya/42nif9onln/OX0y/wwXCv8OLwf/F14P/yFwEf8caxD/ + ImgX/zV3Kf9JlDr/WKJI/2GoUf9hp1H/a6NZ/3Wqc/+Lv6T/nMy9/6PUyf+n2dL/q97a/6je3P+X2+H/ + as7Z/0TC1P85wND/N77N/zu7yP83t7//IbSs/x2wnP8dqYH/KKpy/y+sZP9HtGD/X8Fd/2fPV/9W0kX/ + S8FA/0K8N/9X2k3/e9dz/5/RnP+Rm5H/UU1Q/3d3d//U1NT/4uLi/8XFxf/ExMT/8fHxEAAAAAAAAAAA + AAAAAAAAAAAAAAAAampqAUhISPd2dnb/oqKi/46Ojv9hYWH/cHFu/5itmf9un2r/QIM2/xArCf8JIgX/ + GFQK/xdmD/8XYw3/JnEX/zeCJ/9FkTb/RpM3/0qQO/9WlkX/YJxN/2mcVf9wpGf/ebCG/6XSxP+03s// + yufe/9Ds5P/C6Of/qOPn/3rX5P9Ty9r/N8LR/y67zP8zusz/NrbH/yKrtv8WoaD/F5uI/xmVbv8bmFn/ + IJhU/0WuXP9hu1b/V8VJ/1XOR/9BwDH/QsEx/2LbWP+B1H3/qcio/2VkYv9lZWX/oKCg/+jo6P/Nzc3/ + xcXF/+3t7RMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSUlL/hYWF/6mpqf9iYmL/ZGRk/5agk/9woG7/ + RYtC/xhME/8JFwT/CkoI/w1eBv8ZZQr/IHEY/y1+IP80hSH/OIcm/0SOM/9RlT7/U5I9/1iRP/9mmlD/ + c6Rl/36ugv+gzrz/yOfY/+Pv5P/q8+r/3PPw/7zp7f9/2OT/ZNLj/0nM3P9CxNn/Or/P/zG3xf8nrbv/ + HqWr/xibk/8Wknb/GI5d/xyPU/85lE7/XKZT/1+vVP9Ov0P/Sck6/0G5LP9C0Dj/beNm/5zbl/+OoIv/ + Wlla/3Nzc//d3d3/0tLS/8bGxv/k5OQfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX19f/5OTk/+ZmZn/ + Wlpa/3Fxcf+Oo4r/UpZN/ytvJf8IGwX/BzoC/w1gB/8SaBX/H3gQ/yF4Ev8rgRz/MoYi/zqIJ/9HjDH/ + TIwz/1SPOP9glUT/aptV/3enbf+BtIv/ptLD/9Tr4P/n8ef/7fXt/+n39P/V8vL/m+Tx/2jU5/9Uz9// + V8ze/03H2P83vcr/K7TB/ySstf8cpJ//F5qC/xeQZf88m2D/XKFe/1yeVP9Tmkv/TqFE/0q0QP9Bwjf/ + OL4q/2HkVP+D3Xz/o8qg/2hmaP9hYWH/vLy8/9vb2//Gxsb/3NzcKAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGlpaf+Xl5r/g4WA/1hbXP+BioD/b5hp/z2MM/8QPA7/CTMG/wdcAv8Tbw3/GHoX/xZ9Df8jgRb/ + LIUe/zOIJP85iCT/Q4oo/02OL/9Wkzn/Y5pI/2ygW/94rHf/g7qT/53PvP/b7uP/7PPq//H38f/z+fT/ + 6vn0/6zq8v9l1uj/V9Pg/2bV5P9b0OH/OcTP/zO7x/8vtL7/I62q/xmhhP8emWz/X6xx/2qqY/9hpFv/ + UJlK/0yYRv9Bmj3/OaU2/z+/KP9FzDr/e+dw/5/Ymv98inn/XVZc/5OWlP/i5OL/ycnJ/9zc3CkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABubm7/nZ+h/2xuaP9bX2D/f5d+/1iRUv8keR3/AzgF/wpTCf8ObQz/ + F3oU/xeAEv8Vfw3/IYEW/ymEGv8yiB//OIkh/0OMJ/9OkTH/V5Y9/2KdTf9rpGL/ea9+/4S8l/+Tzbz/ + 1Ovh/+316//x+PP/9vr1//f7+P/J9Pf/Z9rm/1vV4f9j2eb/UNLh/znH1P83v8r/NbjD/yWvr/8cpI3/ + OqV4/3CzeP9vrmj/Y6de/1OeTv9Gl0L/PJQ5/zOPMP85pSz/N7gq/3rxZ/+X4pT/mLKT/15VXf90enf/ + 293b/83Nzf/f398mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1/5+jpf9ZV1T/ZGpm/3Kabv9BiTf/ + EGMO/wlSB/8RcBT/FX8W/xmCF/8YgxX/GYIT/yGDF/8ohRn/MYgd/zuLI/9Ejyr/T5M1/1qZQv9kn1P/ + bKdn/3uxgv+GvZn/icm7/8Lm3v/p9e3/8Pj0//T79v/6+/r/2/f3/43m6/+B4uz/cN/s/0XR3f85yNf/ + OMHN/zW7xP8ps7X/Kqya/1mxgP93tHb/cK5p/2OnXf9VoVH/SJlD/zqRN/8wjC//K4Er/zGlJP9t5lf/ + jOaN/6zNqP9fXF7/XGJf/9nZ2f/R0dH/4eHhIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fP+Um5z/ + V1JR/252bf9hmFr/L4Uj/wpjDP8VcAv/Cn8R/w+EE/8ShBP/GIUX/x2HGf8ihhn/KYgc/zKLH/87jiT/ + RZIt/1GWOP9bm0X/ZqJW/26pa/98s4b/hr6d/4jIt/+j3Nj/2fPt//L59f/z/Pf/+fz4/+f7+v/C9fb/ + qO/x/5Dn8P9X1+H/O83Z/znFz/82vsX/Lbi6/zizoP9ktYH/eLRz/26vaf9iqV3/VaJR/0qdRv8+ljv/ + NJEz/y2MLv8afRn/Vr9J/5Hrjv+t2Kv/aWpp/01TUP/W09X/1dXV/+Tk5B8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAB9fX3ylJmb/05PTv9ud2n/UJRI/yZ/Hf8JbQ3/D30R/wuGE/8PhRT/EoYW/xeHGf8ciRv/ + IYkb/yiLHf8wjiD/OpEm/0WVLv9RmTn/W55H/2alWf9uq27/fLWI/4O+nv+My7n/ldzi/8Dr5//z+fb/ + 8vz3//n99//w/fn/1/j5/7Hy8P+m7PT/ad7k/z7S2v87ytL/N8LH/y68vP80t6j/X7WE/3Wzcf9tsWj/ + X6pc/1OkUP9In0X/P5s9/zSWNP8tlSz/H4Ql/y+ML/+c7Zf/sd+u/291cP9OT0z/ysrM/9TU1OPq6uoO + +Pj4AgAAAAAAAAAAAAAAAAAAAAAAAAAAiIiImZiam/9HTUv/aXRl/0mTQ/8adRX/C3gQ/w2HGP8Qihj/ + EYkY/xSKGf8Xihr/G4sb/yGNHP8ojx7/MJEh/zqUJ/9FmC//UJw6/1uhSP9lp1n/ba1u/3q2h/+Cv57/ + icm3/4/b3v+p5eH/8Pj1//b8+P/5/fn/9v75/+X8+v+89fP/ou3y/3Xj6v9D1N3/O87U/zbGxf8zwLz/ + Mbqv/1G1if9tsm3/a7Bj/1+qWP9SpEz/RqBD/z6dPf80mTX/L5gx/yeRLf8Vdhn/eMp1/7nntf9xeXT/ + S0lG/9PU1v/W1tbH7+/vAfj4+AEAAAAAAAAAAAAAAAAAAAAAAAAAAIyLjDObmZv/S05O/2NwYP9AjTz/ + DnQQ/xCEGv8Rjx3/E48a/xKNGv8Vjhv/GI8c/xyQHf8hkR7/KJMg/zCVI/86mCn/RZsx/1CfO/9ao0f/ + ZKlY/2qtbP93tYT/f76Z/4TGsP+R2tf/n+Th/+X28//3+vj/+f35//n++f/x/fj/z/j2/5nu7/9s4eL/ + Vdjf/0fR1P9Aycf/Q8O//zzAtf9QuY//X61g/2KqUv9Wpkf/TaJB/0WgP/8+nz7/NZs3/zCbMv8llCz/ + Io0p/zCNLv/A7bz/aXBs/1JPTP/W1tj/3Nzbkfb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + qKKlzFRVVP9ZaFj/MIIx/w9/Fv8RjR//DI0Z/xWTG/8Tkhz/FZId/xiTHf8clB7/IZUg/yiXIf8wmST/ + Opwp/0SeMf9PoDv/WaRG/2OqVf9qrmj/dbR//32/lf+Gxq3/jdTO/6Lk5P/W8/P/8Pr4//n9+P/5/vn/ + +fz6/9z4+f+l7/D/e+Xn/2vd3/9Z1dX/VNDP/1zLxP9YxrP/YL2M/1mqUv9eqEb/UqQ7/0igN/9Bnzf/ + PJ43/zKbMv8vmjD/LaA1/ySWLf8bgh3/pdKg/11lYP9eXFn/2tvd/93d3UUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALKvr2ZhXWH/UltS/yR+KP8Pjh3/EJIf/w2RG/8TlB7/FJYd/xaWHv8Zlx7/ + HZgg/yKZIf8omiP/L5wk/zieKf9DoTH/TaI5/1elQ/9hqVD/aK9j/3K1ev96vZD/icWp/4rPxP+l4+X/ + uern/+f59v/4/PX/+Pz5//j8+//e+Pn/re7t/5Do5/+N5OX/d9vZ/3LTzP94yrH/cMST/2q4cf9dq0n/ + Vqg9/0ukMv9CoS//P6Ay/zmeMv8wmy3/MaAz/y2gNP8qnTf/HY4o/2+tb/9QUE3/gn5+/9zd3NDm5uYQ + +Pj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0tbMNiIGJ9EJMQ/8dgST/D5Uc/xCVHf8Rlh7/ + E5cf/xOZH/8VmR//GJog/xyaIf8gmyL/Jp0k/y2eJv82oSr/PqIv/0mlN/9Tp0H/XKtO/2WvX/9xtXP/ + d7yI/4TDof+Fyrf/k9fS/6Ph4P/X8/L/9/v0//f8+P/k9/X/1fT2/7vu8v+l5+j/nePf/5Tc0/94yKX/ + ZbZ1/2SzYf9fr1H/W6xF/1CpO/9HpjH/P6It/zifLf84oDD/Mp8v/zKiNv8zpTv/MaI//yWYNP84hzz/ + NzUy/7Gtrv/Y2deB+Pj4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqlraY2SDn/ + EoIb/xCYHv8RmR//Epog/xSbIf8TnCH/FZwi/xidIv8bnSP/H54k/yWgJv8roSj/M6Mr/zulMP9GqDb/ + TqtA/1iuTf9hslz/bbdt/3O8gf99wpf/hMiu/43Rx/+W2dj/u+bi/+/59f/z+vb/wevk/6rh2/+m39v/ + lNnL/4nSuf94x5z/c76E/3C4cf9os17/X7BQ/1etRP9Nqjr/Racy/z2kLv83oi//NqQy/zWkNf85pz7/ + O6pE/zuqSf8zpUH/KoQy/zxCOv/W1NXI2t3bBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAADLydBMUWtY/xGMHv8QnB7/EZwf/xOdIP8UniH/E54k/xSfJP8XnyX/GqAm/x6hJ/8joij/ + KaQq/zClLf83pzD/Qak3/0qsP/9UsEr/XLNY/2i4aP9vvXr/esOQ/4HIpv+Lz73/mNfQ/6/i3P/W8e3/ + 8Pr1/8bv7P+s5d//ntzS/4/Vv/+Hzqr/e8WU/3K/fv9quWz/ZLVb/1yyT/9Ur0P/S6w6/0KpM/85pC7/ + NqUx/zeoNf83qjv/PqpF/0OvTP9GsVP/Pa5M/yuRNv9ufHD08e7wJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7/FBoqjj+wMkhv/E6Ik/xOiI/8ToSP/E6Ej/xShJf8VoiX/ + F6Im/xqiJv8eoyb/IqQn/yilKf8upyz/Nakw/z6rNf9HrTz/UbFH/1q1VP9kuWP/a75z/3XDh/97yJv/ + hc2x/5PVwv+h3tb/uOfg/+f47//J8Or/q+Xa/5rcyP+J1bT/gM2g/3TFi/9uvnb/Zrll/2G1Vv9Zskv/ + UbBA/0itOP8/qjH/Nqgt/zWpMf86rDv/Pa1B/0StRv9LtVf/Ubhh/1C3Xf8tmjr/m7qfqgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7n3+ZCZQZ/xKiJP8SoiT/ + EqEj/xKhI/8UoyX/FaQl/xekJv8ZpCb/HKQn/yCmKP8mpyv/K6kt/zKqMP87rTX/RK87/02xRP9TtU// + Xbpc/2W/bP9wxX7/eMqS/4HPpv+N1Lf/l9rI/6bi1f/G7uP/vOzk/6bi0v+Z3cD/i9iu/4PRm/93yYb/ + bsFx/2W6X/9dtlH/VbNG/02wPf9Frjf/PKwx/zSrLv82rDX/Pa5A/0SwSP9Ls07/UrVd/2C+cP9iwW7/ + M6BA/5PBl4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + X5tnRAmVGv8QoSL/EqIk/xSkJv8WpSf/FKYo/xWmKP8Xpyj/Gacp/xunKf8fqCr/JKos/yqrLv8wrDH/ + OK40/0CwOP9IskD/TrVI/1a6VP9gv2P/bMZ1/3XMif990Jv/hNOq/43Xt/+U3MP/meHM/5Hgyv+P3cD/ + jtmv/4jWof+D0pP/ecyC/2vDbf9eu1z/WLZO/1CzRP9HsDz/Qa83/zquNP83rjX/PrFB/0W0TP9MuVT/ + U7xc/164Z/95zIP/ccl8/zqmSf+ayJ96AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG2wdQoLlhz6FKUm/xenKf8aqyz/Ha0v/xSoKv8VqSv/F6or/xipK/8aqSv/ + Haos/yKrLf8mrC//LK0x/zKvNP85sTf/QbQ8/0u5Rf9YwVP/ZMhi/3HNdP94zoP/fNKO/3vWmf+A16X/ + htqw/4nduf993bT/gdut/4PYnv+B1JH/etGG/2/Kdv9kw2X/Wr1X/1O5S/9LuEP/RLY9/z6yOP86sDj/ + QLND/0i3Tv9MulX/T71b/1W/ZP9wwnb/lNya/3nLhf89qU7/rN61aAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZwfyxOrKP8brTL/LKxA/ym0O/8erDT/ + G6wx/xesLf8WrCr/GKwq/xusLP8frC3/JK0u/ymuMP8vrjH/NK80/z2zOf9JvET/V8dR/1zNWf9jzmT/ + bs9z/27Sef9t1X//c9iL/3jalv992qH/e9yn/3XYmv901ov/c9WD/3HSef9pzm3/Ycpf/1jGU/9OwUf/ + Rb5A/0C6PP87sjr/O7E9/z60Rf9EuE7/TbxY/1W/Yf9ew2z/gc2J/67ds/9uy3z/RKhV/sfwzzoAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+VHpENqST/ + F7Ax/0S8Wf89v0//NbhJ/y23Qv8ktTn/HrMz/xqvLf8cry3/Hq4u/yKvL/8mqDH/JpQ1/yWDN/8tizz/ + O6lB/0vASP9FsEv/PJNN/z+PU/9DkVn/SZth/129cP9kxXr/VqZ4/02Yev9Ppnj/YcZ3/2fTdP9hymr/ + T65c/0CVUv88kkz/PaRD/z21Pv82pj7/K4g//yeCP/8qkz//OrBI/06+Wv9dw2f/a8d2/5LWm/+76MP/ + XsRt/2OzcPHc++IOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAXgiVXEKYl/w20Kf9T0Wn/XM5t/0rFXf9BwlX/NrxK/y26Q/8nuTr/JLc3/yO2NP8itDL/ + HYw0/wqGk/8HiKr/CYem/xODhf8ujUH/JXtT/wegzv8Li7H/DoGi/wyWvv86iV3/TKli/x1+jv8IoNP/ + GX6O/06wY/9ZyWL/PZFX/xWHnP8InMr/B5zL/xKFkf8phT3/I4dH/wmFpP8Gmcb/G3hk/zuvTf9TxWH/ + Y8tv/3zQh/+t4bT/sfK7/1a6Zf+RyZjHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWKtjHRepK/8GuiP/Ss1h/3rbiP9l13f/WtFt/0zLYP9Dx1f/ + OcZM/zHFRf8owjz/Ir41/xd8Nv8GiKf/FWA8/xdWQP8Fm8j/EnZ5/xtZP/8Bu/j/EG+B/yRlQ/8YcXP/ + MoxY/0ayU/8gbWj/AL79/xttZf9IulP/R7ZR/xeCiv8Buvf/E2No/x5eRf8Od47/EX59/x9/Of8IgJj/ + BKrf/yd1Sv9EwFb/Ws1p/2rUd/+R4J3/xuvN/4zhmv9YvGf/vt++aAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaoym7CcIg/y++RP+H55X/ + gd+R/3TdjP9p3HP/XtBv/03PYf9Czlb/NctK/y3GQf8nnkD/FWtR/xdiSP8QanL/A6rf/wqEm/8XVDz/ + Abv4/w5uf/8dXED/H31l/zypRP9EvUn/IHJg/wC+/f8ecl7/Q75G/zqpRf8Nhp7/BKfb/yJ5P/8wsjv/ + GmdB/wiMp/8XfDb/B4OX/wSq3/8hYEz/P6Fa/2DFcv951oT/qOax/8vx0f9s0Hr/bMR45+X74gkAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Oa9KNQewE/4YwCv/Xdlx/6XlsP+U5Z3/h92c/3Tdev9p23v/Xddw/0/UYv9Gz1n/MZ5N/wyFnf8Buvf/ + Abn1/wSg0P8WdFb/F2E6/wC7+P8Glb7/CIeo/xODhf83rjz/PLs//x1xW/8Avv3/G3FZ/zq7Pv8xoj// + C4af/wSgz/8ihzr/Lb41/xhwOf8GjKj/E3g1/weDl/8Eqt//Dnqb/w+TuP8/hHP/h9CU/8Duxf+c4qX/ + Wblm/5vVo4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAarCSsC7sZ/x/BNP+j66r/sOW6/6nosv+T6J3/huGU/3reif9s23v/ + YNRw/zeIWf8CtfD/DXiU/xhZSf8UYFT/HIU//xRoOf8Au/j/B2t8/w1SOv8McVz/Gogz/x2XMv8PaVT/ + AL79/w5pU/8clzL/F343/waCnf8Cn8z/FIYy/xu8LP8PbzT/BIuo/w13M/8Gg5f/BKrg/xtFTv8NjLb/ + EpjG/4S6mf+17Lz/ast3/3vFhefh9ucJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWrdeKBipI/wOwCD/OsdE/7b2xP+/67// + s+u8/6PorP+Y5aP/ieKV/3vdiP9Som3/DZ3J/w93lf8bVE7/Coiq/xhwUP8RWTz/ALz5/wRsfv8HTDj/ + BHGA/wRjav8FXVn/BFNT/wC+/f8DUlL/BFxX/wNiaf8CgZ7/AaPT/wdxMP8LqSf/Bl4z/wKLrf8HWDb/ + BX+Z/wSq4P8dSVX/CprK/xGf0f+Dspn/hdqR/1y8aP666sJGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABat1uc + D7Af/wy7Fv9W0l//2/Pg/8zz0f+/8cj/tOyw/6Xppv+W5aP/gNCN/1CSdf8jh5v/Fouq/xqLnf8tglX/ + Gnxs/wuHoP8Jhp//B4ad/wWDjf8HZFT/BIeZ/wOEmf8ChJj/AoSY/wOFmf8EY2H/BHuH/wODk/8Gf0n/ + CZom/wV8Xf8DgY3/CWFQ/w18jv8Rh6b/FYqp/yKKrf9TjYv/eMaJ/2C+av+M05ad3/7kAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAwPDEE1a9XtEIsBX/C64h/13KWP/c9OD/4vLg/8/11/+/78X/t+q4/6Xnrf+S2p7/ + ecOK/2q3ff9kvHb/W8Ns/0m0Xf88p1L/M6NL/ymhQf8fpjf/GaUx/xSbLv8PmCr/CJYk/weWJf8JlyX/ + CZoi/wiYIf8LmSX/C6Mh/wutH/8OpCX/D5sr/x6fN/83ok//TKhj/1+ucv9wvYL/c8aB/2PAb/+KyY6n + z/fUBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs47URO6U5tQajD/8FpxL/S8NP/8vv0f/y+Oj/ + 5Pfk/8fy1P/F7cf/tum7/6blrf+c4aL/kdyX/4LXiv9y0Xv/Zcxv/1jHYv9JwlX/Or5I/y+6P/8nuDj/ + HbUv/xSzJv8Nsh//C7Ec/wiwF/8GrhP/C7Aa/w6vG/8SsB//G7Un/yS1Mv84vEX/Vsdh/2vOdf97z4L/ + btZ4/16+afx6xISFw+bDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKLPqwQnjyd/ + CpYU+gemCf8tqS3/rd64/+z58P/i9tv/4fLi/9Pu1P/D6cb/ueW9/6/fsv+h2qT/kNWV/4TRi/94y3// + ZsVw/1W/YP9LvFX/Q7hL/ze0QP8tsDb/Hq0q/xerJP8Tpx7/D6QY/wunFv8OpRj/GKci/yOsLP88tUX/ + UL5Z/2bGbf9xx3f/cct4/2W1a+xvs3ZSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAByRJzoffhzVB5QJ/wycDv9quGr/3e/b//n8+f/t8+3/4Pbi/9H10//G7sX/ + u+a5/7Der/+g2aH/kdmW/4HQh/90x3r/Z79s/126Yf9StVb/RbBJ/zSsO/8sqTH/JKQp/xyeIP8Sohn/ + FKAa/yGhJ/8zqjj/VbZZ/2G9ZP9pwW3/aL1t/1qsYbNYnl8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP5A+CAl5CXcHhQrwBokI/yeOJv+AvYD/ + 3fHa//j49P/18fL/6ezm/9zu2//J68r/vN+9/7rZu/+p0Kr/mMea/4bGiv92w3r/Zbto/1m2W/9RsFX/ + RqlJ/zikOf8uozD/H5gn/yGUKv8ynjv/Q6pO/1WvWP9is2T/YKZj22StaFOEvIoBAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + C2sMFQR0BIYGfAbvB34G/x17HP9nqGb/uOC4/+Lz5P/q9Ov/6vLr/9rp2v/K5cv/vOO+/6narf+k0KX/ + oMme/5DAjP+Bun3/c7lz/2CxY/9DoEX/JY0n/y2PK/86mDj/SqNJ/1KoU/9XplnbVZtXZ1uNWQcAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YDDgtlCmgCZwPHBXYF/QtuC/8jeyT/V5xW/4y2hv+zz67/ + xt3B/9DlzP/P4sr/vt66/6rXp/+QxYz/drFw/0iZRf8shir/JX4h/zCJKv80jjD/QpI+90uNRbJMikRN + Pnc7BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVZBCAHZANr + BWcBrQNmAeUBYwD/BmcF/wlpCf8Pbg//FW8U/xdyF/8UcBT/Dm4M/w9xC/8OdQv/FncQ/CF7G9ksfSGd + L4IyWCVzLRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAVWxAABE8BGANWAj0FWQVbAlYCbwJaAnsEXgN/BVwCeQhdBWsPZAtW + C1wFMxBYCQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////////wD////////gAAf/// + ///wAAAP/////8AAAAP/////AAAAAP////4AAAAAf///+AAAAAA////wAAAAAA///+AAAAAAB///wAAA + AAAD//+AAAAAAAH//wAAAAAAAP/+AAAAAAAA//4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gAAAAAAAAf + 8AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAP4AAAAAAAAA/gAAAAAAAAB+AAAAAAAAAHwAAAAAAAAAfgAAAA + AAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAA+AAAAAAAAAD + 4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAH8AAAAAAAAA/4AAAAAAAAH/gAAAAAAAA/+AAAAAAAAH/8AAAA + AAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAP/+AAAAAAAA//8AAAAAAAD/ + /wAAAAAAAf//gAAAAAAB//+AAAAAAAP//8AAAAAAA///wAAAAAAH///gAAAAAA////AAAAAAP////AAA + AAB////+AAAAAP////+AAAAD/////+AAAA///////AAAf///////gAf///////////////////////// + KAAAADAAAABgAAAAAQAgAAAAAAAAJAAAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAMDAwCCQkJEIkJCR9IyMjqjAwMM48PDziQUFB7UBAQOw1NTXfKioqyCgoKKMtLS1y + MjIyNlZWVgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAGxsbAx4eHkQwMDCmRkZG8l1dXf9xcXH/goKC/4+Pj/+YmJj/nZ2d/6Kiov+mpqb/ + pKSk/52dnf9/f3//YWFh/zw8POgnJyeULy8vMklJSQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACsrKwMmJiZSQUFBzllZWf93d3f/fHx8/5GRkf+qqqr/wsLC/87Ozv/c3Nz/ + 4uLi/+Dg4P/f39//29vb/9PT0//Jycn/vr6+/7W1tf+Wlpb/W1tb/SsrK7opKSk7VlZWAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiJ0JCQr1ZWVn+bGxs/4eHh/+wsLD/2tra//Ly8v/6+vr/ + /f39//7+/v/+/v7//f39//7+/v///////v7+//7+/v/8/Pz/9/f3/+jo6P/T09P/wMDA/6Kiov9cXFz7 + JycnoiwsLBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwI4ODhkUFBQ82pqav+FhYX/vb29/+Xl5f/09PT/ + 7u7u/+fn5//h4eH/4ODg/+Li4v/m5ub/6+vr//Dw8P/39/f/+fn5//39/f/+/v7/+/v7//v7+//7+/v/ + 9fX1/93d3f+8vLz/lpaW/0JCQuUmJiZFREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqBD8/P5NcXFz+cXFx/6ysrP/f39// + 5OTk/9HR0f/CwsL/wsLC/8nJyf/Q0ND/1NTU/9ra2v/f39//4eHh/+Li4v/m5ub/6urq/+/v7//09PT/ + +vr6//7+/v/+/v7/+vr6//v7+//x8fH/1dXV/7CwsP9fX1/4ISEhbEtLSwEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8GREREpVxcXP+EhIT/ + ysrK/9PT0/+4t7f/sLCw/7q6uv/Nzc3/1dXV/8/P0P+4ubn/n6Gi/42Pkf9+gIL/dXh5/3l8fv+GiIn/ + lJWV/6enp//AwcH/1tbW/+fo6P/y8vL/+/v7//39/f/7+/v/9vb2/+Pj4/++vr7/bm5u/iUlJXtiYmIB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwNHR0ed + XV1d/5OTk//Nzc3/sbGx/6alpf+6urn/09PT/8jHyP+YmJj/YmRk/0RHSP83OTz/PkFH/0VNUv9QWV7/ + WF9k/1BZXf9QVVj/TE1P/z9DRf8zPkX/RVBV/3R6fP+ztrT/1tfW/+zt7P/5+fn/9/f3//X19f/r6+v/ + x8fH/29vb/4xMTFxWFhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAD09PXlaWlr+l5eX/7a2tv+ampr/r6+v/9DQ0P+3trb/cnJx/zg4Nv8+QD//cHJy/6Cgof/AwsH/ + zdLQ/8/Y1v/P2db/0drY/9DY2f/P2Nn/ztXW/8TKyv+hq6n/cX1//z1KUP82PEL/YGBi/6SkpP/Y2Nj/ + 8PDw//j4+P/z8/P/6+vr/8XFxf9nZ2f6PT09TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAANzc3PVZWVvqNjY3/qqqq/5iXmP/AwMD/wMDA/3R0c/84Nzb/V1dV/6CmoP/Hzcj/ + 0dfS/8/X0f/L3dD/wNrI/7rYw/+z1rz/sda7/63Wvv+w2cH/ud3I/8Tezv/M2tH/zdfQ/83Y0v+vtrf/ + c3R0/z89Pf9gX1//s7Kz/+bm5v/39/f/8fHx/+Xl5f+9vb3/VlZW62lpaRwAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0MSkpK2nR0dP+YmJj/mJiX/8fJxv+enpz/TUpL/1FPVP+mp6L/ + x8vJ/7rHuv+vyK//nMGd/429jP97tX//a6x3/1+ldP9ap3X/VKZ2/0Cndv9ArXn/SbR7/1m7fv9uyY7/ + hcuY/6LTrf+408L/xdXJ/8DAvf9qaGj/PkI9/4WFhv/c2Nf/9vX0/+7u7v/b29v/p6en/19fX7Svr68C + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQ0N/Y2Nj/4yMjP+YmJj/w8PE/4aEiP9ERUb/ + fYB+/7vBt/+lu6r/kriN/3esdP9jlVv/UH5K/0h1T/9IfVf/TY9j/0ucbP9NpnT/Tqt7/y+oeP8fp3b/ + GqVw/xadYP8gol//Ka1c/z+6Yf9oy4D/jdGa/7TUs//Dy8L/m5mY/0U/Q/91cnD/zMvL//X19f/o6Oj/ + zMzM/4SEhP6YmJhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQBdSUlLvgYGB/5GRkf+/v7// + fn5+/0lGSP+Zopv/qbiq/4ytjP9rpGX/UXpF/zRPL/82Wy7/RXo//1GYVP9bqWX/YLN1/2O7hf9mw43/ + aMaU/z/ElP8jwYr/IMCC/yTAff8ov3r/H7Zp/x+sXf8rrVv/Rr1j/37Vff+Y0JX/ss6v/666sP9LSUr/ + bGts/83MzP/w8fD/39/f/7i4uP+SkpLR1tbWBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEpKSoFra2v/ + ioqL/7m7uP+CgoD/U1BS/6KnnP+htJf/b6Jw/1KGRv8nRSL/JEgg/zJxJv9EizT/TptC/1urXf9muXb/ + bcCL/3DDmv90yaT/dM2s/0TIqv8uxqf/LMqe/zrRof870pf/Ls+E/zDMfP8zw3D/Mrpe/1C4Uv9tzmP/ + gdV5/5/Lof+0vq3/U1RS/3J1c//U0dL/7Ozs/9DQ0P+bm5v/1tbWUAAAAAAAAAAAAAAAAAAAAAAAAAAA + T09PBVJSUuV/f3//qqqq/4+OkP9WV1n/l5yX/5Cqlf9knWT/PGot/xUxE/8fVRn/Kngh/zeILP9Hjjz/ + T49H/2CUX/9xp4P/gLef/4DDsP+Ayrz/fM3C/2HJw/9CxMH/OsG5/0TFuP9Px7H/Rcmh/zzMjf9H04D/ + QtFm/13MWv9Uu0r/VsVP/3bVbf+ay5X/qrOq/09PTv+Ji4r/5OXk/+Li4v+xsbH/vr6+kQAAAAAAAAAA + AAAAAAAAAAAAAAAAQUFBR2FhYf+Pj4//qKio/2lnZ/96gX7/lq2N/1yZWf8mVRv/ECQP/xdXEf8odxr/ + MHYj/zp3Lv9Khj3/Y6BU/3m0bP+IypT/ldSy/5rZxP+X28v/ktvP/3vY1f9Nzcz/QsrK/0PJxP9Kyb3/ + SMWz/zy7l/8+uX3/Qr5q/2TTZf9l0lX/U8JD/0jFQf9s1mP/lc+T/46di/9TVVT/o6Sk/+vr6//IyMj/ + u7u7zvLy8gQAAAAAAAAAAAAAAAAAAAAAREREl3Z2dv+np6f/dnZ2/2lpZ/+YqZn/aJ1b/ylbI/8MHwb/ + FVoO/x5sEP8haxX/NXkp/0uWPP9aokv/YaVR/2uiW/9+tIr/l8q4/6bXzP+u3tn/reDe/5Pb4v9XyNb/ + OsDS/zW8zP86ucb/JbKx/xysmP8ipnn/Kahl/0ayXv9ixlv/WtFJ/0rBPv9IyD3/cNln/5/Pnv9rbGn/ + b29v/9TU1P/V1dX/wsLC//Dw8AwAAAAAAAAAAAAAAAAAAAAATExMv4KCgv+bm5v/X19f/4mTh/9tnmz/ + M3Mt/wkcBP8PTAn/FmML/x5sFP8xgCL/Powt/0WQNv9Rkj7/W5ZF/2mdVv92qHH/msiz/8Xk1f/f7uT/ + 1O7r/6nj6P9p0uH/RMjX/zW90P81usr/J627/xigof8Wln//GZJe/x2SUv9RqVb/XLdP/1DKQv9Cvy// + TdBB/3/aev+btJj/XFxb/5ycnP/g4OD/xcXF/+jo6BIAAAAAAAAAAAAAAAAAAAAAXV1dv5eXl/93d3f/ + amlp/4Whgv9EjT//DzAL/wk8A/8NYgz/HHIQ/yN5Ff8vgyD/N4cl/0iNM/9Qjzb/XJNB/2ucV/98rHr/ + m8u2/9bs4P/q8+r/6fby/8jv8f962er/V9Dh/1TK3v8+wM//LLTB/yKpr/8YnY//FpBn/zyZXf9anlf/ + V55O/02pQ/9Gvjv/OcAs/2rlX/+X1JL/cnVy/29vb//c3Nz/yMjI/93d3R0AAAAAAAAAAAAAAAAAAAAA + ampqv5ucnf9gYmD/eYN6/2GWWv8jZR7/BzME/wpiBf8XdxP/Fn0P/ySCF/8vhyH/OIgj/0WLKf9SkTT/ + YJlG/26jYP9+s4b/l8u0/9/v5P/v9e//8/n0/+X49f+D3uv/V9Ti/2fW5f9Hytf/NL7J/y+0vf8dp5j/ + H5tx/2atcP9mp2D/VJxO/0mYQ/87mzn/Prcr/03RQ/+L4YL/jKOI/15ZXv/Gysf/zMzM/93d3R4AAAAA + AAAAAAAAAAAAAAAAcnFxv5eamv9YWFb/dI50/0SKPP8KUQj/DVwO/xR4Ev8ZgRb/FoAQ/yKCF/8thhv/ + OIoh/0WOK/9UlTn/YZ1N/26nav+Atoz/i8i1/9Lr4v/u9/D/9Pr1//b7+v+l6+7/atvm/1/Y5v8+zNv/ + OMHO/zO4wf8irKX/Q6uB/3Szdf9qq2P/V6FS/0SXQP81jzL/MI8r/0K+Mf+E7Xn/osmg/1lVWf+oran/ + 0dHR/+Dg4BsAAAAAAAAAAAAAAAAAAAAAe3t7v4qPj/9dW1n/ZpNh/yqAIv8MYQf/DXsR/xGEFP8WhBX/ + HIYY/yOGGf8tiRz/OY0j/0eSLv9WmD7/Y6BT/3Cqb/+CuJH/iMez/7Li3f/q9/L/8/v3//j8+f/O9vf/ + pu7x/4Lj7f9D0Nz/OcbQ/zS8w/8utK7/WbOF/3azcv9orGP/V6NT/0ebRP84kjb/Loov/yWMH/974nL/ + p9qm/11fXv+Vl5b/19fX/+Pj4xcAAAAAAAAAAAAAAAAAAAAAfn5+q4WKiv9ZW1j/V5FQ/x14GP8LdxD/ + DIUT/xCGFv8Uhxj/G4kb/yKKHP8sjR//OJEl/0eWMf9WnED/ZKRW/3Ctc/+AupT/i8m0/5bd4v/f9O// + 8/z3//n9+P/l+/n/ufTz/6Dr8/9P2N7/PMzU/zXCxv8turT/VbWM/3Szb/9lrWH/VaVS/0aeQ/86mTn/ + LpYu/yCEJf9guF3/sOSr/2VpZv+Li4v/1tbW5ezs7An4+PgBAAAAAAAAAAAAAAAAjIuMTIiJiv9UWFT/ + To1K/xF1Ef8Phhn/EYwZ/xKLGf8WjBr/G40b/yKPHf8skiD/OJYm/0eaMf9WoEH/YqdV/22ucf99upD/ + hcav/5Db2v/H7uv/9/v3//n9+v/0/fn/zvj1/5Ts7/9b2+D/QNDW/zjGw/83v7j/SbiU/2evZf9hqlX/ + UqRI/0SgQf85nDr/MJoy/yWQLP8jhCX/tOmv/2FmYv+Uk5P/2trbxvHx8QEAAAAAAAAAAAAAAAAAAAAA + iomLBJaTlOJNUk3/P4I+/xCBGP8NjBv/FJIb/xORHP8Wkh3/G5Me/yKVIP8smCL/OJso/0aeMv9UokD/ + YalS/2uvbf96uov/hMSp/5HY1P+87Oz/7vn3//n9+P/5/fn/4Pn5/5rt7v9u4OL/WtXW/1LOzP9Vx73/ + Wr6V/1uqUv9YpkL/S6E6/0GfOf84nTb/L5ox/yudNP8aiiD/jMKH/1VZVf+lpKP/2trafff39wAAAAAA + AAAAAAAAAAAAAAAAAAAAAKSio39QTFD/Lnoy/xCQHf8Okhz/EpQe/xSWHf8Xlx7/HJgg/yKaIf8rnCT/ + Np4o/0ShMv9RpD7/XqlN/2iwZv92uYT/hcOk/4zSyP+r5eX/3PXy//j89f/4/Pr/5Pn5/6rt7P+R5eX/ + gt3c/3HOvf9zw5j/Z7du/1yrRv9Ppjf/Q6Iv/z2gMv80nS//MZ8x/y6hN/8mmjP/UZxT/0pHRv/DwsH3 + 3NzdKPj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAL27viJiYGT7IHkn/xCXHf8Rlx7/E5gg/xOaIP8WmiH/ + Gpsi/yGdJP8onyb/M6Eq/z6kMf9MqDv/WKxL/2WxYP9zuXr/fsGX/4bLt/+U2NX/v+no//X79v/i9fH/ + wOrp/6/m5v+b39b/iNO6/3PAi/9qtWn/YbBT/1erQ/9Kpzb/P6Mu/zehLv81oTH/NKQ4/zenQf8xokD/ + LIg0/0tLSP/f396c5ebkAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa1ugGDi4nEFHsg/xCbH/8SnCD/ + FJ0h/xOeI/8WnyT/GqAl/x+hJ/8moyj/L6Us/zmnMf9Gqjv/U69J/1+0W/9sunL/eMKN/4PJq/+R08n/ + q+Da/+D08P/f9fH/r+Xh/5zbz/+K0rX/fseZ/3K+fP9ot2T/XrJR/1OuQv9Hqjb/O6Uu/zalMv83qTf/ + PKpC/0OvTf9CrlD/LJY4/3iDedvo6OkPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACutrFq + HI8q/xOiJP8ToiP/E6Ej/xShJP8WoiX/GqIm/x6jJv8lpSj/Lacr/zapMf9CrDn/T7BF/1q2Vf9nvGr/ + csKC/3vJnf+L0bj/nNzQ/73q4v/d9ez/r+bc/5fbxP+D0an/d8eN/22+cv9jt1z/WrNM/0+vPv9DrDT/ + N6kt/zaqM/88rT//RK5G/061W/9YvGb/NKBB/5u8n3oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACbq50ZG5Qq+BGhI/8SoiT/E6Ml/xSkJ/8WpSf/GKUo/xymKP8ipyv/Kqku/zOrMf8+rjf/ + SbFA/1K2Tf9evF//a8R2/3jMkf+E0qn/kdi8/5/gzv+s59v/nODN/5Patf+H1aD/fMyI/2vBbP9duFb/ + VLNH/0mwO/8/rjX/Nawx/zuuPP9Eskr/TrhU/1q3Zf9yy37/PqdL/5TCmGAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZciyxSkJv8YqCr/HKst/xSoKv8WqSr/GKkr/xupK/8gqi3/ + Jqsv/y6tMf83sDX/QbM8/025SP9dw1r/bstx/3jOhv9805b/gNam/4nbtf+F3bn/gtyy/4XXn/9/047/ + c8x7/2PCZP9WulH/TbdF/0O0PP88sTf/PbE+/0e2Tf9Nu1f/VL9h/3PDef+P25f/RKtT/6nasVAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ0fkROtKf8mrDz/LbRA/yGuN/8brjH/ + F60s/xisK/8drCz/I60u/yqtMP8wqzP/Oa44/0q9Rf9YyVT/XMhd/2fJb/9ozXb/btSF/3XXk/9005z/ + c9Oa/3HUh/9w1Hz/aM1t/1zFW/9RwEz/Rb5B/z22PP84rDv/Oq9C/0S3Tv9Tvl3/XsJr/43PlP+Z3KP/ + R61Z/cny0SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIoeVw2pJP8wvkn/ + TsZg/z6+Uv8xukb/Jrc7/x+zM/8fsjH/IrEx/yCVNv8VfmP/F4R1/yyQTP89pkj/Iop6/yCHhP8kioj/ + Q59v/1Gucv8ri4//Lo+L/1q/bf9axWb/OY9j/yGHgf8jhW3/M5o//yiRTv8WgXr/HYVg/z2yTf9ZxWX/ + bsp5/6fgr/+O3Jr/abh06Nv74gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QZpNHRKtKP8gvzv/dNuE/17Tcf9Py2P/QMVV/zTESP8rwT//I702/xKFW/8Ke4b/FWNU/waZwv8eaUX/ + Bp7L/xNvev8dZ1v/KI90/0ChVP8Mk7r/FIGN/0u7Vv82k1f/BLDn/xB5hv8SeIP/EYKD/xxxO/8CreP/ + HnZi/0bAWP9i0G//hduR/77sxv9ozHj/ls6bmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABOrI7sVviv/cd6C/4Xflv9y3YP/ZNRz/1DRY/9AzlT/M8hG/yWVR/8Sal7/ + DX+P/wKx6f8VY1D/BZ3J/xBseP8Yc2v/N55C/z6wR/8Mk7T/FoWF/0K/Rf8jg1r/A6vh/yaLPf8nlTv/ + CnyP/xVyN/8CrOH/GWdo/z2YX/9tynz/o+Ss/7Ppu/9fwm37reOzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6mOzcJuxb8NMZI/6zrs/+e4az/h+SP/3Xehf9k2XX/ + VdNm/yqPZ/8CsOn/C4ek/xBxcf8cfTr/BJ7J/wd/mv8LfIz/KJQ4/y6jOf8JkrH/EYKA/y+uOv8ZeVX/ + A6fZ/yCWNv8foDP/B3yN/xBvNv8CrOH/Em6J/wqdzP9Vmon/t+u+/3jRhP97w4Wr4P/lAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHLFeQEjqiysDr0g/2TXb/+/8MX/ + sOq4/53mp/+L4pf/edyG/z+Vdv8Imsj/GldQ/w1+kf8XcD3/A57K/wVlbP8GYFT/BWZe/wZfSP8Cja// + A3B8/wRxY/8EVlL/Aanc/wmELf8Kjiz/A3mP/whaNv8BreL/GFZo/wmf0P9Gl6X/k9ye/2fDdOy+6sQf + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0w3Mq + JrIy9w+7Gv+M3pT/1vPa/8PwyP+w67D/nuan/4DMj/9Gk4T/Jo6b/yqPhf8ti1j/FYWF/w+Fh/8KiIL/ + CnJR/waFf/8Egn3/A4J9/wWBev8FbVf/BYJ6/wiLOf8IkDT/BYFx/w5tUf8YhY3/IYuX/zqQnv9rr4T/ + acNz/JDVmV0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdsp9URenIfMNrxf/iNiM/+X25v/Y9Nj/xe/L/7LquP+c4KX/iNWU/3vThv9nzXP/ + VMJj/0W8VP8zuUT/JbY4/xuvMP8RrSb/Cqsg/wmrHv8Hqxn/Cqsd/w2uHf8RsSL/GK8r/y+0Qf9VwGT/ + b8Z6/3HTfv9owXP2hceLXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWgRDIPlRbYCKUN/2C/Y//g8uT/3/fd/9rw2//G68n/ + tuS6/6jdq/+T1pf/gdCI/3DJeP9YwWP/SLxT/zy3Rv8tsjj/Hq4r/xSrIf8Ppxn/DKgW/w+nGv8dqyf/ + M7M9/1C/Wv9rx3L/c8t6/2W5bd9vuHg6t+2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjmzgNH4AdkQWQB/kooSn/ + qdOn//H48f/q9Or/2vXb/8nsx/+75Lr/p9qo/5XWmf+Byob/b8F0/125Yv9Os1L/PK5C/y6oM/8koif/ + F6Ad/xieH/8tpDP/ULRU/2K7Zf9pvW37XbBkm1ieXxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAxxDTIGgQi0CYIJ/D2ZPP+iyZ//5/Dl//Hy8f/f7+D/y+XN/77ewP+n1qr/lc2Z/4nHiv9zu3L/ + Y7Nk/1OtVv81nzf/JpQp/y+WNP9Fp03/U6xX/V6oYLtcm185Z6xrAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQZxABB2cGMQdrBpoFcAXvHX4e/1KbU/+TvpD/vdS4/83iyf/N48r/ + vtu7/6fQov+Fu4D/X6db/zaNNP8rhSf/M44u/0SUP/JRlkqgTJBJOFCOUQEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGWAUIB2MDRgZnAokBYgC/ + BGMD5ghmCPcOag79EWwR/w9rDv0NbAn3DnAK6Bh3EsImex6NL4EtTCVzLQoAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFV4UAgxYDBADVQMbBVgEHwhYBBsUXg8QHmcaAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD//4AB//8AAP/8AAA//wAA//AAAA//AAD/4AAA + B/8AAP+AAAAB/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPAAAAAADwAA + 8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAAHAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAA + AAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAQAAwAAAAAADAADAAAAAAAMAAOAAAAAAAwAA + 4AAAAAAHAADgAAAAAA8AAPAAAAAAHwAA8AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAA + AD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAH8AAP4AAAAA/wAA/wAAAAH/AAD/gAAAAf8AAP/AAAAH/wAA + //AAAA//AAD/+AAAP/8AAP//AAH//wAA///wH///AAD///////8AACgAAAAoAAAAUAAAAAEAIAAAAAAA + ABkAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEVFRQQxMTEfMDAwOSkpKUYoKChENzc3NkBAQBpYWFgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwAjIyMhKysrdUBAQLxLS0vwV1dX/mlpaf9zc3P/ + dXV1/2lpaf9eXl79U1NT6jk5ObIoKChoPDw8F1dXVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + KSkpACUlJTw/Pz+0V1dX/HNzc/+Ghob/mJiY/62trf+8vLz/yMjI/8nJyf/Jycn/xMTE/7u7u/+wsLD/ + kJCQ/11dXfcyMjKjKioqKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiG0RERKtaWlr9dXV1/5ycnP/Jycn/ + 6Ojo//f39//9/f3//v7+//39/f/+/v7//v7+//z8/P/6+vr/8vLy/+Hh4f/IyMj/q6ur/2ZmZvktLS2U + LCwsDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAjIyMAOzs7T1FRUexvb2//oKCg/9nZ2f/v7+//6Ojo/+Hh4f/e3t7/39/f/+Xl5f/q6ur/ + 8vLy//n5+f/6+vr//v7+//v7+//8/Pz/+/v7/+7u7v/Ly8v/oqKi/0xMTN0oKCg2AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjIBQ0NDc1xcXPuEhIT/ + ysrK/9vb2//IyMj/vb29/8TExP/S0tL/2NjY/9XV1f/T09P/0NDQ/9HR0f/W1tb/4uLi/+np6f/w8PD/ + /Pz8//39/f/6+vr/+fn5/+bm5v++vr7/Z2dn9CQkJFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA3NzcARUVFeF1dXf6dnZ3/zMzM/7a1tf+ura3/ycnJ/9DQ0P+xsrL/ + iouM/2Rmaf9MUFT/P0RJ/zpARP87Qkb/TlBS/19fYP9xdHf/kpaZ/7/Bwv/l5eT/8/Pz//z8/P/39/f/ + 7+/v/8vLy/9zc3P5KCgoVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + Pz8/XV1dXf2jo6P/srKy/6Ojo//FxcX/v7+//4CAf/9DQ0P/R0pK/3R2df+Ulpb/qbKx/7W/vv++yMf/ + ucHC/7G5uv+co6P/e4eH/0pZXP8vO0H/YWRn/6enqP/e3t7/8/Pz//b29v/w8PD/zs7O/25ubvY5OTk8 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3KlhYWPSYmJj/oaGh/6qqq//ExMT/ + e3t6/z8+Pf9ucWz/r7Ww/9DV0f/O1tL/ydvQ/8Hayf+82cT/uNjB/7XYxf+528j/w93P/8rZ0P/O19H/ + wMvH/42SlP9QT0//XVxc/7SztP/r6+v/9vb2/+vr6//IyMj/X19f42lpaRMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAPj4+BUtLS8h9fX3/lJSU/7W2tP+oqaf/T01N/2tqa/+3urX/vMe//6vEqf+YwJX/ + g7WD/2+od/9dn3H/V6Jz/1Gjdf86pHX/Oap2/0iyd/9ev4P/esqS/5nRp/+00r7/x9PH/5SRkv9GSET/ + g4KD/+Pg3v/09PT/4+Pj/7Gxsf9lZWWkv7+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCQmJnZ2f/ + jo6O/7S0tP+TkZT/TU5P/5OZlf+tuq3/j7SN/3Ojaf9TfU3/RG1D/0Z5T/9RkV7/VKVu/1WveP9XtoH/ + M7KA/yCwfP8erXH/G6dj/xyoWP8xsVv/XMV2/5LTmf+yzrD/tLmx/1xaW/9xb23/1tbW//Dw8P/W1tb/ + kJCQ/aSkpD0AAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAZWVlbeg4OD/6mqqP+QkI//VlVU/6Wsnv+TsJX/ + bqBl/z5oN/8rTSX/OWwt/0uOPv9Xp1r/Ybhy/2rAiv9tx5f/cc2g/0DKn/8lx5T/KMqO/zHMjP8lxHj/ + KL1t/yq0Xv9Kv13/etBz/5bRkf+xyLP/aWhm/3Fycf/X19f/6ejo/7+/v/+enp679PT0AQAAAAAAAAAA + AAAAAAAAAABERERVbGxs/5ybnP+am5v/XFxd/5+moP+CpoP/UYhF/yBAHP8gUhv/LXol/0GONf9PlkX/ + YZ5j/3Otif94uqH/ecOy/3bIuv9Pw7v/OcG5/znFsP9My6//P8ya/zvRiP8/0Xb/Scdc/1m+Tv9hy1n/ + htGA/63Dqv9hYmD/hISE/+bm5v/Z2dn/q6ur/eTk5BsAAAAAAAAAAAAAAAAAAAAATU1NtIKCgv+oqKj/ + Z2Zn/4iSif99pnr/P3c1/xIqEP8ZVRL/Kncc/zZ4Kf9EgDf/XZlQ/3awbf+Ky53/mNa7/5fayf+R287/ + ddfT/0fMy/9Bycb/Scm+/0vGtP88u5P/Q714/1PLaP9m0lf/U8NF/1DKR/9903j/osCf/1dZV/+ho6L/ + 5+fn/7m5uf/Q0NBSAAAAAAAAAAAAAAAAT09PDVlZWfaampr/fX19/3R2c/+IpoX/RIE5/w4iCv8VVw3/ + HWsQ/yhwHP9CizT/VJxF/2CjUP9sol7/hLmX/6PTxv+x3tf/suHf/5Da4/9MxtX/Nb7O/zi6yP8psrX/ + G6mV/yKjcv8vqF3/Wb5d/1zOTP9JwT3/T85E/4TVfv+KmIn/aGdn/9PT0//Kysr/y8vLigAAAAAAAAAA + AAAAAEdHRyBqamr/m5ub/19fX/+KnYf/To5L/xExC/8LRgf/FmQK/yJzGP80hCP/P4wu/0+SO/9Yk0D/ + ap1X/3yuf/+23c//4e/j/9/y7f+p5Or/Y9Lh/0LG2f84vc3/KrC//xqhov8VlHj/Go9X/0CbU/9drlH/ + TcNA/0G+L/9b21L/m9KX/2ZpZf+bm5v/1tbW/8vLy5IAAAAAAAAAAAAAAABKSkogfn5//4KDgv9ucW// + bJlm/yJeHv8HNgP/EWcM/xp4Ev8lfxf/Moci/z+JKf9NjTH/XpVC/2+hYP+BtYz/v+HV/+rz6f/v+PL/ + 0PP0/27X6f9Z0N//Ucra/zG6x/8nrrT/GJ+I/zObaP9jpWD/VZtO/0yeRP8/tDf/RMk0/4Lgev+HmIX/ + b25v/9na2f/Ly8uZAAAAAAAAAAAAAAAAXFxcIIeIiv9tbmr/c4V0/0WLPf8JRgn/DmQM/xd8E/8WgA// + I4IX/zGHHv8+iyT/T5Ey/1+bSf9vqGv/g7uV/7Hc0P/s9ez/9Pn0/+z6+f963uf/ZNnl/0vQ3v83wc3/ + MLa9/yCmk/9arnr/bq1n/1ihU/9Dlj//NZEx/zarKv926Gf/m8WY/1tYXP/Iy8n/0dHRlwAAAAAAAAAA + AAAAAGtrayCMj5D/Yl9e/2iNZf8nfCD/DmUJ/w6AE/8VhBX/G4UX/ySGGf8wih7/QI8o/1GWOP9in1D/ + cqty/4W9mv+Y08n/3/Tu//P79v/1/Pr/ufLz/5Tp8f9Q1N//OcbS/zO7wf80sqH/b7R5/22uaP9ZpFX/ + RZlC/zSQM/8lhiT/Ys1V/6Pbov9YWln/u7u7/9fX15MAAAAAAAAAAAAAAAB3d3cQj5GS9lhaWf9bjFT/ + GHYV/wx+Ev8OhxX/E4cX/xuJGv8jixz/L48g/z+UKv9Smjv/YqNU/3Kvdv+Dvpz/j9TP/8Ls6f/0+/f/ + +P34/9v5+P+s8PL/ad7l/z3O1v80wsT/NLir/2m0ef9rsGb/V6ZT/0WeQv82mDX/KJAr/zmWOv+u56n/ + X2Je/7Gxsv/Y2Nht+Pj4AgAAAAAAAAAAAAAAAJyZnKZXWlj/T4ZL/w95E/8QjBv/Eo4a/xWOG/8ajxz/ + I5Ee/y+VIv9AmSz/UZ88/2GnU/9ur3P/f72Y/4rQxP+r5+X/9fr2//n9+v/x/fn/tPPz/2zh5P9J0tf/ + P8fE/z/AtP9Ys3b/YapT/1GkRf9CoD//Nps3/yuXL/8chSL/l9OT/1hcWP+8vLz/39/fQAAAAAAAAAAA + AAAAAAAAAACup6pAYGBg/zx5Pf8Rih3/DY8a/xSTHP8WlB3/G5Ue/yOXIP8vmiT/Pp4t/0+iO/9fqE7/ + bLBt/3y9kP+Jy7n/qOTl/+H29P/5/ff/9/z6/8Pz8/+G5uf/btvb/2bQyf9qx6r/YLJl/1inQP9IoTP/ + Pp81/zKbMP8vnzT/JZkv/2GnYP9SUlD/zc3N4uXl5QkAAAAAAAAAAAAAAAAAAAAAtLSyAnRuddgqcS// + D5Ud/xGXHv8TmB//FZkg/xqaIf8inCP/LJ8m/zqiLf9KpTj/WapK/2ixZP93u4X/hcar/5TX0v/C6+r/ + 9vv2/+L18//C7vD/oeTi/4/azf9wwZL/ZrRm/12tS/9PqDr/QaQu/zigL/80oDH/NKQ5/zCiPv8wjjn/ + W1hX/9/f3YD4+PgBAAAAAAAAAAAAAAAAAAAAAAAAAACWmJuBG3Ql/xCbH/8SnCD/E50i/xWeI/8ZnyX/ + IKEn/ymjKf81pi7/Q6k3/1KuSP9htF7/cLx6/37Fnf+N0ML/qd/a/+X28v/O8Oz/pN/Y/47Vv/9/yJ3/ + cb16/2a1Xv9ZsEn/S6s5/z2lL/83pTL/N6g5/z+rRv9Crk//L5k7/3yEfMrp6+kHAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAwsTFKTCUPP0ToiT/EqEj/xOhJP8WoiX/GaMm/x+jJ/8npin/Magu/z6sNv9NsEP/ + W7ZX/2m+cP93xo7/hc6v/5nazP/B6+L/zfDp/6Lgz/+J1bH/eciQ/2y9b/9gtlb/U7FE/0atN/83qi7/ + N6s1/0CuQ/9JsVD/WLxn/zulR/+avZ1iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTBwwEeli3P + EaEj/xSkJv8VpSf/FaYo/ximKf8cpyn/JKks/y2rL/85rjT/RrE+/1G3TP9gv2P/ccmA/3/Qnv+L1rT/ + md/I/5jizv+R3Ln/iNah/3zOh/9nwGj/WbdQ/0yyQP9Brzf/OK40/z+xQ/9Kt1L/V7lg/3fMgv9IrlX/ + mMeeTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpkekRapKf8grDP/Ha0x/xeqLf8Xqyv/ + Gqsr/yCsLf8orS//Ma8z/zyyOf9PvUn/Yctd/3HPdf9104X/d9iV/4Dbpv9+3a7/fNic/3rUif9vznb/ + YMVe/1G+S/9Fuj//PLM5/z6zQv9IuVH/Ub1d/2fEc/+b3KH/S69b/7bmvzQAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA+THlcOrCb/PLtT/zu9T/8ut0P/IbQ2/xywL/8fsC//JKsw/yKKOv8lhkv/ + O6dE/0KsUP82kGH/O5Fp/1Csb/9buHz/RZiE/1Kyev9l0HH/T6tf/zeRX/83mEn/N6s+/yaJUP8mjU7/ + QbVO/13DZ/9/0Ir/qeKy/1u2afTf/OUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kkEd + D64m/0LMWv9m03f/Uctk/z/DU/8xwkX/J786/x2hNP8Jg5b/EXJv/wyOpv8bcFj/BaLS/xlwbv8kjXz/ + O5VY/wWp3/8yjVv/Rq5U/wufxv8PhJb/DYSc/x5+R/8Ika7/GIWC/0jAWf9o0XT/p+Gv/4zfmf+Axom0 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGwIrsmwTv/ieSX/3zfj/9p1nb/ + UtJl/z/OU/8wt0b/FHRk/wuJnv8Ep9f/FGNS/wWi0v8TeHz/MpZF/ziiRv8Fo9T/MJRG/zGXQ/8Eptj/ + KJU8/xuFU/8Qf2X/B5Cl/xN+kP88mmz/e9GI/73sw/9ryHf/ldmeQwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAmpTE3D7gd/WLXcf+s6Lb/l+eg/4Dgjv9r2nv/TLZk/wihz/8Rcnz/ + FG5c/xR5UP8Dncr/CmVf/xl+Pf8dhzj/A6LT/xl9Ov8YeT//AqPT/xmbMf8RiEr/CXxl/wWPpP8SbYj/ + CpzN/3avmP+U3p3/d8WCvdP02QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + fsuAAC2vNKwTvCL/kueb/8Xtyv+u7LX/mOaf/3rSiv8rk5z/FHSM/xSDkf8VdWP/BJW+/wVvfv8Eb3v/ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHyU9PT2T + VVVV6m5ubv+JiYn/nZ2d/6urq/+wsLD/sLCw/6Ojo/+AgID/YWFh4jQ0NIYqKiobAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIhFGRkaY + XV1d+4aGhv+2trb/29vb//Dw8P/5+fn//Pz8//z8/P/6+vr/9fX1/+vr6//V1dX/tbW1/3FxcfY2NjaF + LCwsCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT05 + U1NT4n9/f//Dw8P/5+fn/+Hh4f/b29v/29vb/+Dg4P/o6Oj/8PDw//f39//9/f3//Pz8//z8/P/5+fn/ + 39/f/7CwsP9ZWVnUJCQkJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + QkJCTl5eXveioqL/z8/P/76+vv++vr7/zc3N/8vMzP+2t7f/paeo/5mbnP+cnp//q6ur/7/AwP/d3d3/ + 8fHx//n5+f/8/Pz/9PT0/8/Pz/9wcHDtJiYmNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAEFBQUFiYmL4rq6u/7Cvr/+3trb/wcHB/5WVlP9ZW1v/VFZW/2ptb/90fn//foeJ/3qChP95fX7/ + XmZn/z5MUP9ka27/r7Cw/+jo5//29vb/9fX1/9nZ2f91dXXuMzMzKwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAA3NzcbXFxc6qGhof+fn5//v7+//4aFhf9QT07/gYWA/7zBvf/R19T/x9jN/8HYyP+92MX/ + utfJ/77ZzP/L29L/yNHM/56pqP9qbW//XVxc/7W1tf/v7+//8vLy/9TU1P9qamrZaWlpDAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAE5OTrKFhYX/oKCg/66vrf9YV1b/hIWD/7rEu/+kv6T/kLqL/3Sld/9gnHD/ + VJ5x/1Cjdv83pXX/Nqp0/0axdf9ow4b/j9Cf/7LTuv+0t7L/Xl9c/4OAgv/n5uT/7Ozs/76+vv9tbW2S + AAAAAAAAAAAAAAAAAAAAAAAAAABDQ0NEbW1t/5ubm/+hoKH/W1tc/6Crov+QsJD/aJVd/0RqPf9AbDz/ + To5W/1yqbP9euID/YsGL/zS9i/8hu4H/JLl2/xuwZP8or1z/UcBt/5HTkP+yy6//en56/3Jxcf/h4eH/ + 4eHh/56envu2trYoAAAAAAAAAAAAAAAAAAAAAFZWVr2Li4z/o6Si/2RiY/+frJz/caBq/zdfL/8kUB// + N34s/02YQP9gqWb/b7iK/3LBov90ya//QsWv/zHGqf8/zab/OM6Q/zTNfv81w2X/Wb9V/3DPaf+ezZz/ + gYV//3t8e//m5eb/yMjI/62trZgAAAAAAAAAAAAAAABCQkIiaWlp/qOjo/9oZ2n/k6OQ/12TWf8dPhj/ + GlUT/yx4IP8+fzL/V5NL/3StcP+Ny6f/ldbC/4/ZzP9q08//QcjH/0fIwP9KxrL/Pr+P/0XEcP9k0V3/ + VMNI/13PU/+WzpX/bHNr/5+hoP/g4OD/ubm50vLy8gIAAAAAAAAAAEZGRm6FhYX/g4OD/3+Ff/9pmmD/ + FzgT/xVSDP8fbBL/NX0n/0yWPf9eoE3/bqNi/5HDq/+y3dL/ueTg/4nY4f9CxNT/NbvL/yyzuv8appH/ + I6Fn/0OvW/9dyE//ScM8/13TUv+XwpT/ZWRj/9DQ0P/Hx8f/7+/vCQAAAAAAAAAAWVlZf5eXl/9kZGT/ + ep52/yRYIP8KPwX/FmkN/yZ6Gf82hyT/So41/1iSPv9uoF7/kcGj/9rt4f/n9O//q+bt/1rQ4f9Ixdf/ + LrXD/x2kpP8Xk27/O5hY/1qjUf9Mt0D/P8Ix/3vgc/99inv/m5ub/8/Pz//f398SAAAAAAAAAABra2t/ + iYqJ/213b/9Ki0P/CT4I/xBtDP8XfhH/JoMZ/zWIIv9IjSz/XZhD/3KobP+Oxan/4vDm//P48//W9PX/ + X9bk/13U4/83wc3/K7K3/yOhff9qrm3/WqBU/0SXP/85pi7/XNdP/5O9j/9wb3H/1dbV/93d3RQAAAAA + AAAAAHl4eX95enn/aYRn/yJ1Hf8ObA7/FIIV/xmEFv8lhhn/Nosg/0qSMf9gnUz/dK13/4fDqv/K6uT/ + 8vr2/+36+f+e6+//Z9vm/znH0/8wub7/SLGP/3Oxb/9cpVf/Qpc//y+KL/9Esjf/nd2c/1xfXf/V1dX/ + 4+PjEAAAAAAAAAAAgYGBY3B0dP9chVb/FXYU/w6FFf8Rhxf/GYka/ySMHf81kSP/S5g0/2CiUP90sXv/ + h8Sr/6Pi4v/z+vb/9v34/8r39f+J5+3/PtDX/zPBwf9Ft5n/brFq/1mnVP9DnkD/MZcx/yKGJv+g35z/ + XmFe/9LS0+rt7e0FAAAAAAAAAACMi4wNdnV28kt6Sf8PgRj/EZAb/xSQG/8akR3/JZQg/zWZJv9Knjb/ + XqZO/3Cxdv+CwqP/mN3a/+j39f/5/fn/5fr4/4np6v9Y1tr/TcrG/1G/of9eqlL/T6M//0CfO/8xmzP/ + JpUu/2y0av9dYFz/2drbtfb29gAAAAAAAAAAAAAAAACAeoCZNWo4/w+SHf8RlR7/FJce/xqYIP8kmyL/ + Mp4n/0ajNP9aqEn/bLJs/3/Amf+R1cz/xu7s//f89v/k+Pj/p+vr/43f3P9yx6b/Z7hu/1eqQv9FozD/ + Op8w/zGfMf8voTn/OpZC/25sa//b3NtY+Pj4AAAAAAAAAAAAAAAAALSwuD0qcDP/EZof/xOcIP8UnSP/ + GZ4k/yGgJv8uoyr/Pqcz/1GtRv9ktWL/dr+I/4fMtv+m3tn/6vjz/7fo4/+a2s3/gcul/3C8eP9is1b/ + Uaw//z+mMP83pTL/Oag9/0CtS/8xmj3/f4Z/uNrd2wEAAAAAAAAAAAAAAAAAAAAAv7/FAT+ZSuESoiT/ + EqEj/xSiJf8Yoyb/H6Qn/yqnK/84qzP/Sq9B/1u3WP9twXn/fsyh/5bYxv/D7OL/tunf/5LZu/97y5P/ + ar1r/1u0Tv9Lrjv/Oaov/zmsOP9Er0f/VLhh/0WsUf+YvZxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FpcmkhSkJv8ZqCr/FKcp/xioKv8cqSv/Jasu/zGuMv9Bsjv/UrpN/2jHbP96z43/g9ao/4/dvv+H3bv/ + h9eg/3nOhP9iv2H/UbZI/0KyOv87sDn/RrVM/1G8XP93yX7/WLlm/6LSqTgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAOmR5XFKws/zW3Sf8nsjz/HLAw/xquLP8hri7/KaYy/zGcOP9Ju0f/ULdV/1ewZv9iwXf/ + bMiK/2O8jf9s0X7/YsZr/02uVP9DtkL/N6Y9/zKeQP9GuFL/X8Nq/5/apv9du2z7y/PSEgAAAAAAAAAA + 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 + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmUserInput.Designer.cs b/AllPurposeAutoSetup/frmUserInput.Designer.cs new file mode 100644 index 0000000..19907a6 --- /dev/null +++ b/AllPurposeAutoSetup/frmUserInput.Designer.cs @@ -0,0 +1,88 @@ +namespace All_Purpose_Auto_Setup +{ + partial class frmUserInput + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtBoxPassword = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.rTxtBoxDescription = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // txtBoxPassword + // + this.txtBoxPassword.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtBoxPassword.Location = new System.Drawing.Point(90, 86); + this.txtBoxPassword.Name = "txtBoxPassword"; + this.txtBoxPassword.PasswordChar = '*'; + this.txtBoxPassword.Size = new System.Drawing.Size(244, 26); + this.txtBoxPassword.TabIndex = 0; + this.txtBoxPassword.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtBoxPassword_KeyDown); + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(161, 117); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(95, 32); + this.btnOK.TabIndex = 1; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // rTxtBoxDescription + // + this.rTxtBoxDescription.BackColor = System.Drawing.SystemColors.Menu; + this.rTxtBoxDescription.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.rTxtBoxDescription.Location = new System.Drawing.Point(21, 8); + this.rTxtBoxDescription.Name = "rTxtBoxDescription"; + this.rTxtBoxDescription.Size = new System.Drawing.Size(359, 67); + this.rTxtBoxDescription.TabIndex = 2; + this.rTxtBoxDescription.Text = ""; + // + // frmUserInput + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(397, 158); + this.ControlBox = false; + this.Controls.Add(this.rTxtBoxDescription); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.txtBoxPassword); + this.Name = "frmUserInput"; + this.Text = "User Input"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtBoxPassword; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.RichTextBox rTxtBoxDescription; + } +} \ No newline at end of file diff --git a/AllPurposeAutoSetup/frmUserInput.cs b/AllPurposeAutoSetup/frmUserInput.cs new file mode 100644 index 0000000..502e4b1 --- /dev/null +++ b/AllPurposeAutoSetup/frmUserInput.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; + +using CommonLib.Windows.Forms; + +namespace All_Purpose_Auto_Setup +{ + public partial class frmUserInput : ChildForm + { + private frmMain frmParent = null; + + public frmUserInput(frmMain d_parentForm) + { + InitializeComponent(); + + frmParent = d_parentForm; + } + + public string getUserPassword() + { + return txtBoxPassword.Text; + } + + public void clearUserPassword() + { + txtBoxPassword.Clear(); + } + + public void richTxtBoxAppendText(string description) + { + rTxtBoxDescription.AppendText(description); + } + + public void richTxtBoxOverwriteText(string description) + { + rTxtBoxDescription.Clear(); + rTxtBoxDescription.AppendText("ddd"); + rTxtBoxDescription.Clear(); + rTxtBoxDescription.AppendText(description); + } + + private void btnOK_Click(object sender, EventArgs e) + { + txtBoxPassword.Focus(); + this.Hide(); + } + + private void txtBoxPassword_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + btnOK_Click(this, new EventArgs()); + } + } + + } +} diff --git a/AllPurposeAutoSetup/frmUserInput.resx b/AllPurposeAutoSetup/frmUserInput.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AllPurposeAutoSetup/frmUserInput.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/packages.config b/AllPurposeAutoSetup/packages.config new file mode 100644 index 0000000..6308515 --- /dev/null +++ b/AllPurposeAutoSetup/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/AllPurposeAutoSetup/sm3_setup.ico b/AllPurposeAutoSetup/sm3_setup.ico new file mode 100644 index 0000000..ff27951 Binary files /dev/null and b/AllPurposeAutoSetup/sm3_setup.ico differ