diff --git a/HudsonTrayTracker/Configuration.xml b/HudsonTrayTracker/Configuration.xml deleted file mode 100644 index db240c1..0000000 --- a/HudsonTrayTracker/Configuration.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/HudsonTrayTracker.Tests/HudsonTrayTracker.Tests.csproj b/JenkinsTray.Tests/JenkinsTray.Tests.csproj similarity index 94% rename from HudsonTrayTracker.Tests/HudsonTrayTracker.Tests.csproj rename to JenkinsTray.Tests/JenkinsTray.Tests.csproj index 47626d2..06ac729 100644 --- a/HudsonTrayTracker.Tests/HudsonTrayTracker.Tests.csproj +++ b/JenkinsTray.Tests/JenkinsTray.Tests.csproj @@ -1,91 +1,91 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0} - Library - Properties - HudsonTrayTracker.Tests - JenkinsTray.Tests - v4.0 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - 3.5 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - - - - False - ..\lib\NUnit\nunit.core.dll - - - False - ..\lib\NUnit\nunit.framework.dll - - - - 3.5 - - - - - - - Properties\VersionInfo.cs - - - - - - - {A54602CA-6823-4F2C-870F-1D464D9F4814} - JenkinsTray - - - - + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0} + Library + Properties + JenkinsTray.Tests + JenkinsTray.Tests + v4.0 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + 3.5 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + + + + False + ..\lib\NUnit\nunit.core.dll + + + False + ..\lib\NUnit\nunit.framework.dll + + + + 3.5 + + + + + + + Properties\VersionInfo.cs + + + + + + + {A54602CA-6823-4F2C-870F-1D464D9F4814} + JenkinsTray + + + + \ No newline at end of file diff --git a/HudsonTrayTracker.Tests/Properties/AssemblyInfo.cs b/JenkinsTray.Tests/Properties/AssemblyInfo.cs similarity index 97% rename from HudsonTrayTracker.Tests/Properties/AssemblyInfo.cs rename to JenkinsTray.Tests/Properties/AssemblyInfo.cs index c059266..3bafdfd 100644 --- a/HudsonTrayTracker.Tests/Properties/AssemblyInfo.cs +++ b/JenkinsTray.Tests/Properties/AssemblyInfo.cs @@ -1,20 +1,20 @@ -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("JenkinsTray.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM componenets. 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("30907250-fcf6-40bf-96a3-400c0c58d41d")] +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("JenkinsTray.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM componenets. 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("30907250-fcf6-40bf-96a3-400c0c58d41d")] diff --git a/HudsonTrayTracker.Tests/Utils/StringUtilsTests.cs b/JenkinsTray.Tests/Utils/StringUtilsTests.cs similarity index 91% rename from HudsonTrayTracker.Tests/Utils/StringUtilsTests.cs rename to JenkinsTray.Tests/Utils/StringUtilsTests.cs index 5a02a71..382d526 100644 --- a/HudsonTrayTracker.Tests/Utils/StringUtilsTests.cs +++ b/JenkinsTray.Tests/Utils/StringUtilsTests.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Hudson.TrayTracker.Utils; - -namespace HudsonTrayTracker.Tests.Utils -{ - [TestFixture] - public class StringUtilsTests - { - [Test] - public void TestSimpleName() - { - Assert.AreEqual("User", StringUtils.ExtractUserName("User")); - } - - [Test] - public void TestCompoundName() - { - Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name")); - } - - [Test] - public void TestNameWithDash() - { - Assert.AreEqual("User-Name", StringUtils.ExtractUserName("User-Name")); - } - - [Test] - public void TestTrimming() - { - Assert.AreEqual("User", StringUtils.ExtractUserName("User ")); - } - - [Test] - public void TestAngleBrackets() - { - Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name ")); - Assert.AreEqual("", StringUtils.ExtractUserName("")); - } - - [Test] - public void TestBrackets() - { - Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name (user@example.com)")); - Assert.AreEqual("(user@example.com)", StringUtils.ExtractUserName("(user@example.com)")); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Jenkins.Tray.Utils; + +namespace JenkinsTray.Tests.Utils +{ + [TestFixture] + public class StringUtilsTests + { + [Test] + public void TestSimpleName() + { + Assert.AreEqual("User", StringUtils.ExtractUserName("User")); + } + + [Test] + public void TestCompoundName() + { + Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name")); + } + + [Test] + public void TestNameWithDash() + { + Assert.AreEqual("User-Name", StringUtils.ExtractUserName("User-Name")); + } + + [Test] + public void TestTrimming() + { + Assert.AreEqual("User", StringUtils.ExtractUserName("User ")); + } + + [Test] + public void TestAngleBrackets() + { + Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name ")); + Assert.AreEqual("", StringUtils.ExtractUserName("")); + } + + [Test] + public void TestBrackets() + { + Assert.AreEqual("User Name", StringUtils.ExtractUserName("User Name (user@example.com)")); + Assert.AreEqual("(user@example.com)", StringUtils.ExtractUserName("(user@example.com)")); + } + } +} diff --git a/HudsonTrayTracker.sln b/JenkinsTray.sln similarity index 74% rename from HudsonTrayTracker.sln rename to JenkinsTray.sln index 4dd0c18..29f8019 100644 --- a/HudsonTrayTracker.sln +++ b/JenkinsTray.sln @@ -1,35 +1,35 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0D9F4EE0-5F25-432E-AF6C-5836AE260047}" - ProjectSection(SolutionItems) = preProject - HudsonTrayTracker.vsmdi = HudsonTrayTracker.vsmdi - LocalTestRun.testrunconfig = LocalTestRun.testrunconfig - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HudsonTrayTracker", "HudsonTrayTracker\HudsonTrayTracker.csproj", "{A54602CA-6823-4F2C-870F-1D464D9F4814}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HudsonTrayTracker.Tests", "HudsonTrayTracker.Tests\HudsonTrayTracker.Tests.csproj", "{B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}" -EndProject -Global - GlobalSection(TestCaseManagementSettings) = postSolution - CategoryFile = HudsonTrayTracker.vsmdi - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A54602CA-6823-4F2C-870F-1D464D9F4814}.Debug|x86.ActiveCfg = Debug|x86 - {A54602CA-6823-4F2C-870F-1D464D9F4814}.Debug|x86.Build.0 = Debug|x86 - {A54602CA-6823-4F2C-870F-1D464D9F4814}.Release|x86.ActiveCfg = Release|x86 - {A54602CA-6823-4F2C-870F-1D464D9F4814}.Release|x86.Build.0 = Release|x86 - {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Debug|x86.ActiveCfg = Debug|x86 - {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Debug|x86.Build.0 = Debug|x86 - {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Release|x86.ActiveCfg = Release|x86 - {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0D9F4EE0-5F25-432E-AF6C-5836AE260047}" + ProjectSection(SolutionItems) = preProject + JenkinsTray.vsmdi = JenkinsTray.vsmdi + LocalTestRun.testrunconfig = LocalTestRun.testrunconfig + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JenkinsTray", "JenkinsTray\JenkinsTray.csproj", "{A54602CA-6823-4F2C-870F-1D464D9F4814}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JenkinsTray.Tests", "JenkinsTray.Tests\JenkinsTray.Tests.csproj", "{B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}" +EndProject +Global + GlobalSection(TestCaseManagementSettings) = postSolution + CategoryFile = JenkinsTray.vsmdi + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A54602CA-6823-4F2C-870F-1D464D9F4814}.Debug|x86.ActiveCfg = Debug|x86 + {A54602CA-6823-4F2C-870F-1D464D9F4814}.Debug|x86.Build.0 = Debug|x86 + {A54602CA-6823-4F2C-870F-1D464D9F4814}.Release|x86.ActiveCfg = Release|x86 + {A54602CA-6823-4F2C-870F-1D464D9F4814}.Release|x86.Build.0 = Release|x86 + {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Debug|x86.ActiveCfg = Debug|x86 + {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Debug|x86.Build.0 = Debug|x86 + {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Release|x86.ActiveCfg = Release|x86 + {B7F74B87-21B6-4887-A41E-49CDF8EFB7E0}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/HudsonTrayTracker.vsmdi b/JenkinsTray.vsmdi similarity index 98% rename from HudsonTrayTracker.vsmdi rename to JenkinsTray.vsmdi index 106767f..c219c48 100644 --- a/HudsonTrayTracker.vsmdi +++ b/JenkinsTray.vsmdi @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/HudsonTrayTracker/App.config b/JenkinsTray/App.config similarity index 88% rename from HudsonTrayTracker/App.config rename to JenkinsTray/App.config index d80fb6f..491a17a 100644 --- a/HudsonTrayTracker/App.config +++ b/JenkinsTray/App.config @@ -1,24 +1,24 @@ - - - - -
- - -
- - - - - - - - - - - - - - - + + + + +
+ + +
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HudsonTrayTracker/BusinessComponents/AllServersStatus.cs b/JenkinsTray/BusinessComponents/AllServersStatus.cs similarity index 92% rename from HudsonTrayTracker/BusinessComponents/AllServersStatus.cs rename to JenkinsTray/BusinessComponents/AllServersStatus.cs index 4843df5..cc320a4 100644 --- a/HudsonTrayTracker/BusinessComponents/AllServersStatus.cs +++ b/JenkinsTray/BusinessComponents/AllServersStatus.cs @@ -1,84 +1,84 @@ -using System.Collections.Generic; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Utils; -using Hudson.TrayTracker.Utils.Collections; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class AllServersStatus - { - private ThreadSafeDictionary lastStatuses = new ThreadSafeDictionary(); - private ThreadSafeDictionary lastCompletedStatuses = new ThreadSafeDictionary(); - - public IEnumerable Servers { get; private set; } - - public List FailingProjects { get; private set; } - public List StillFailingProjects { get; private set; } - public List SucceedingProjects { get; private set; } - public List FixedProjects { get; private set; } - - public void Update(IEnumerable servers) - { - FailingProjects = new List(); - StillFailingProjects = new List(); - SucceedingProjects = new List(); - FixedProjects = new List(); - - foreach (var server in servers) - { - UpdateForServer(server); - } - } - - private void UpdateForServer(Server server) - { - foreach (var project in server.Projects) - { - UpdateForProject(project); - lastStatuses.SetOrAdd(project.Url, project.Status); - if (!project.Status.IsInProgress) - { - lastCompletedStatuses.SetOrAdd(project.Url, project.Status); - } - } - } - - private void UpdateForProject(Project project) - { - if (lastStatuses.ContainsKey(project.Url) && lastCompletedStatuses.ContainsKey(project.Url)) - { - if (lastStatuses[project.Url].IsInProgress) - { - if (project.StatusValue == BuildStatusEnum.Successful) - { - if (BuildStatusUtils.IsErrorBuild(lastCompletedStatuses[project.Url])) - { - FixedProjects.Add(project); - } - else - { - SucceedingProjects.Add(project); - } - } - else if (TreatAsFailure(project.Status)) - { - if (TreatAsFailure(lastCompletedStatuses[project.Url])) - { - StillFailingProjects.Add(project); - } - else - { - FailingProjects.Add(project); - } - } - } - } - } - - private bool TreatAsFailure(BuildStatus status) - { - return status.Value == BuildStatusEnum.Failed - || status.Value == BuildStatusEnum.Unstable; - } - } -} +using System.Collections.Generic; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Utils; +using Jenkins.Tray.Utils.Collections; + +namespace Jenkins.Tray.BusinessComponents +{ + public class AllServersStatus + { + private ThreadSafeDictionary lastStatuses = new ThreadSafeDictionary(); + private ThreadSafeDictionary lastCompletedStatuses = new ThreadSafeDictionary(); + + public IEnumerable Servers { get; private set; } + + public List FailingProjects { get; private set; } + public List StillFailingProjects { get; private set; } + public List SucceedingProjects { get; private set; } + public List FixedProjects { get; private set; } + + public void Update(IEnumerable servers) + { + FailingProjects = new List(); + StillFailingProjects = new List(); + SucceedingProjects = new List(); + FixedProjects = new List(); + + foreach (var server in servers) + { + UpdateForServer(server); + } + } + + private void UpdateForServer(Server server) + { + foreach (var project in server.Projects) + { + UpdateForProject(project); + lastStatuses.SetOrAdd(project.Url, project.Status); + if (!project.Status.IsInProgress) + { + lastCompletedStatuses.SetOrAdd(project.Url, project.Status); + } + } + } + + private void UpdateForProject(Project project) + { + if (lastStatuses.ContainsKey(project.Url) && lastCompletedStatuses.ContainsKey(project.Url)) + { + if (lastStatuses[project.Url].IsInProgress) + { + if (project.StatusValue == BuildStatusEnum.Successful) + { + if (BuildStatusUtils.IsErrorBuild(lastCompletedStatuses[project.Url])) + { + FixedProjects.Add(project); + } + else + { + SucceedingProjects.Add(project); + } + } + else if (TreatAsFailure(project.Status)) + { + if (TreatAsFailure(lastCompletedStatuses[project.Url])) + { + StillFailingProjects.Add(project); + } + else + { + FailingProjects.Add(project); + } + } + } + } + } + + private bool TreatAsFailure(BuildStatus status) + { + return status.Value == BuildStatusEnum.Failed + || status.Value == BuildStatusEnum.Unstable; + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/ApplicationUpdateService.cs b/JenkinsTray/BusinessComponents/ApplicationUpdateService.cs similarity index 94% rename from HudsonTrayTracker/BusinessComponents/ApplicationUpdateService.cs rename to JenkinsTray/BusinessComponents/ApplicationUpdateService.cs index 5238f45..49396b0 100644 --- a/HudsonTrayTracker/BusinessComponents/ApplicationUpdateService.cs +++ b/JenkinsTray/BusinessComponents/ApplicationUpdateService.cs @@ -1,194 +1,194 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Text; -using Common.Logging; -using System.Reflection; -using System.Threading; -using Hudson.TrayTracker.Utils.Logging; -using System.ComponentModel; -using System.Net; -using Hudson.TrayTracker.Utils.IO; -using Hudson.TrayTracker.Utils.Collections; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class ApplicationUpdateService - { - public enum UpdateSource - { - User, - Timer, - Program - } - - public delegate void NewVersionAvailableHandler(Version version, string installerUrl); - public event NewVersionAvailableHandler NewVersionAvailable; - - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - // every hour - static readonly int DEFAULT_UPDATE_PERIOD = 60 * 60 * 1000; - // 5 seconds delay for the 1st check on application start up - static readonly int DEFAULT_UPDATE_DELAY = 5 * 1000; - - static readonly String URL = "https://raw.githubusercontent.com/zionyx/jenkins-tray/master/scripts/version.properties"; - - static readonly String PROPERTY_VERSION_NUMBER = "version.number"; - static readonly String PROPERTY_INSTALLER_URL = "version.installerUrl"; - - public ConfigurationService ConfigurationService { get; set; } - - Timer timer; - int updatePeriod = DEFAULT_UPDATE_PERIOD; - bool updating; - bool timerEnabled; - - public ApplicationUpdateService() - { - timerEnabled = false; - updating = false; - } - - public void Initialize() - { - timer = new Timer(CheckForUpdates); - EnableTimer(ConfigurationService.GeneralSettings.CheckForUpdates); - } - - public void EnableTimer(bool enable) - { - if (timerEnabled && !enable) - { - // Disable timer - timer.Change(Timeout.Infinite, Timeout.Infinite); - timerEnabled = false; - } - else if (!timerEnabled && enable) - { - // Enable timer - timer.Change(DEFAULT_UPDATE_DELAY, updatePeriod); - timerEnabled = true; - } - } - - public void CheckForUpdates_Asynchronous(UpdateSource source) - { - BackgroundWorker worker = new BackgroundWorker(); - worker.DoWork += delegate - { - DoCheckForUpdates(source); - }; - worker.RunWorkerAsync(); - } - - public bool CheckForUpdates_Synchronous(UpdateSource source) - { - return DoCheckForUpdates(source); - } - - private void CheckForUpdates(object state) - { - // ignore errors - try - { - DoCheckForUpdates(UpdateSource.Timer); - } - catch { } - } - - // returns true if an update was found, false otherwise - private bool DoCheckForUpdates(UpdateSource source) - { - bool result = false; - - if (source == ApplicationUpdateService.UpdateSource.Timer && - ConfigurationService.GeneralSettings.CheckForUpdates == false) - { - logger.Info("Update check is already disabled in settings; stopping timer, from " + source); - // Methods should only have 1 return point! - EnableTimer(false); - } - else - { - logger.Info("Running update check from " + source); - - lock (this) - { - if (updating) - { - logger.Info("Already in update: skipping"); - return false; - } - updating = true; - } - - try - { - result = DoCheckForUpdatesInternal(); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - throw; - } - finally - { - lock (this) - { - updating = false; - } - } - - logger.Info("Done"); - } - return result; - } - - // returns true if an update was found, false otherwise - private bool DoCheckForUpdatesInternal() - { - bool result = false; - logger.Info("Checking for updates from " + URL); - - // download the properties file - WebClient webClient = new WebClient(); - String versionProperties = webClient.DownloadString(URL); - - // extract version details - IPropertiesContainer properties = PropertiesFile.ReadProperties(versionProperties, "version.properties"); - string versionStr = properties[PROPERTY_VERSION_NUMBER]; - string installerUrl = properties[PROPERTY_INSTALLER_URL]; - - Version version = new Version(versionStr); - Version currentVersion = GetCurrentVersion(); - - logger.Info("Current version: " + currentVersion); - logger.Info("Last version: " + version); - logger.Info("Installer URL: " + installerUrl); - - if (version <= currentVersion) - { - logger.Info("No updates"); - } - else - { - logger.Info("An update is available"); - - // disable the timer - EnableTimer(false); - - if (NewVersionAvailable != null) - NewVersionAvailable(version, installerUrl); - - result = true; - } - return result; - } - - private Version GetCurrentVersion() - { - return new Version(FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); - } - } -} +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using Common.Logging; +using System.Reflection; +using System.Threading; +using Jenkins.Tray.Utils.Logging; +using System.ComponentModel; +using System.Net; +using Jenkins.Tray.Utils.IO; +using Jenkins.Tray.Utils.Collections; + +namespace Jenkins.Tray.BusinessComponents +{ + public class ApplicationUpdateService + { + public enum UpdateSource + { + User, + Timer, + Program + } + + public delegate void NewVersionAvailableHandler(Version version, string installerUrl); + public event NewVersionAvailableHandler NewVersionAvailable; + + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + // every hour + static readonly int DEFAULT_UPDATE_PERIOD = 60 * 60 * 1000; + // 5 seconds delay for the 1st check on application start up + static readonly int DEFAULT_UPDATE_DELAY = 5 * 1000; + + static readonly String URL = "https://raw.githubusercontent.com/zionyx/jenkins-tray/master/scripts/version.properties"; + + static readonly String PROPERTY_VERSION_NUMBER = "version.number"; + static readonly String PROPERTY_INSTALLER_URL = "version.installerUrl"; + + public ConfigurationService ConfigurationService { get; set; } + + Timer timer; + int updatePeriod = DEFAULT_UPDATE_PERIOD; + bool updating; + bool timerEnabled; + + public ApplicationUpdateService() + { + timerEnabled = false; + updating = false; + } + + public void Initialize() + { + timer = new Timer(CheckForUpdates); + EnableTimer(ConfigurationService.GeneralSettings.CheckForUpdates); + } + + public void EnableTimer(bool enable) + { + if (timerEnabled && !enable) + { + // Disable timer + timer.Change(Timeout.Infinite, Timeout.Infinite); + timerEnabled = false; + } + else if (!timerEnabled && enable) + { + // Enable timer + timer.Change(DEFAULT_UPDATE_DELAY, updatePeriod); + timerEnabled = true; + } + } + + public void CheckForUpdates_Asynchronous(UpdateSource source) + { + BackgroundWorker worker = new BackgroundWorker(); + worker.DoWork += delegate + { + DoCheckForUpdates(source); + }; + worker.RunWorkerAsync(); + } + + public bool CheckForUpdates_Synchronous(UpdateSource source) + { + return DoCheckForUpdates(source); + } + + private void CheckForUpdates(object state) + { + // ignore errors + try + { + DoCheckForUpdates(UpdateSource.Timer); + } + catch { } + } + + // returns true if an update was found, false otherwise + private bool DoCheckForUpdates(UpdateSource source) + { + bool result = false; + + if (source == ApplicationUpdateService.UpdateSource.Timer && + ConfigurationService.GeneralSettings.CheckForUpdates == false) + { + logger.Info("Update check is already disabled in settings; stopping timer, from " + source); + // Methods should only have 1 return point! + EnableTimer(false); + } + else + { + logger.Info("Running update check from " + source); + + lock (this) + { + if (updating) + { + logger.Info("Already in update: skipping"); + return false; + } + updating = true; + } + + try + { + result = DoCheckForUpdatesInternal(); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + throw; + } + finally + { + lock (this) + { + updating = false; + } + } + + logger.Info("Done"); + } + return result; + } + + // returns true if an update was found, false otherwise + private bool DoCheckForUpdatesInternal() + { + bool result = false; + logger.Info("Checking for updates from " + URL); + + // download the properties file + WebClient webClient = new WebClient(); + String versionProperties = webClient.DownloadString(URL); + + // extract version details + IPropertiesContainer properties = PropertiesFile.ReadProperties(versionProperties, "version.properties"); + string versionStr = properties[PROPERTY_VERSION_NUMBER]; + string installerUrl = properties[PROPERTY_INSTALLER_URL]; + + Version version = new Version(versionStr); + Version currentVersion = GetCurrentVersion(); + + logger.Info("Current version: " + currentVersion); + logger.Info("Last version: " + version); + logger.Info("Installer URL: " + installerUrl); + + if (version <= currentVersion) + { + logger.Info("No updates"); + } + else + { + logger.Info("An update is available"); + + // disable the timer + EnableTimer(false); + + if (NewVersionAvailable != null) + NewVersionAvailable(version, installerUrl); + + result = true; + } + return result; + } + + private Version GetCurrentVersion() + { + return new Version(FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/ClaimService.cs b/JenkinsTray/BusinessComponents/ClaimService.cs similarity index 90% rename from HudsonTrayTracker/BusinessComponents/ClaimService.cs rename to JenkinsTray/BusinessComponents/ClaimService.cs index 45dbee7..3155580 100644 --- a/HudsonTrayTracker/BusinessComponents/ClaimService.cs +++ b/JenkinsTray/BusinessComponents/ClaimService.cs @@ -1,88 +1,88 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.Serialization; -using System.Net; -using System.IO; -using System.Runtime.Serialization.Json; -using System.Web; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Utils; -using System.Xml; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class ClaimService - { - public HudsonService HudsonService { get; set; } - - public static void FillInBuildDetails(BuildDetails res, XmlDocument xml) - { - XmlNode claimedNode = xml.SelectSingleNode("/*/action[claimed/text() = 'true']"); - if (claimedNode == null) - return; - - var reasonNode = claimedNode.SelectSingleNode("reason"); - var claimedByNode = claimedNode.SelectSingleNode("claimedBy"); - - ClaimDetails claimDetails = new ClaimDetails(); - claimDetails.User = claimedByNode.InnerText; - claimDetails.Reason = reasonNode != null ? reasonNode.InnerText : ""; - res.ClaimDetails = claimDetails; - } - - public void ClaimBuild(Project project, BuildDetails buildDetails, string reason, bool sticky) - { - string url = NetUtils.ConcatUrls(project.Url, buildDetails.Number.ToString(), "/claim/claim"); - var request = (HttpWebRequest)WebRequest.Create(url); - request.Method = "POST"; - request.ContentType = "application/x-www-form-urlencoded"; - - // we don't want to follow redirections - request.AllowAutoRedirect = false; - - var credentials = project.Server.Credentials; - if (credentials != null) - request.Credentials = new NetworkCredential(credentials.Username, credentials.Password); - - using (Stream postStream = request.GetRequestStream()) - { - var claim = new ClaimDetailsDto - { - Reason = reason, - Sticky = sticky - }; - - var stream = new MemoryStream(); - var serializer = new DataContractJsonSerializer(typeof(ClaimDetailsDto)); - serializer.WriteObject(stream, claim); - string json = Encoding.UTF8.GetString(stream.ToArray()); - - string postData = "json=" + HttpUtility.UrlEncode(json, Encoding.UTF8); - using (var writer = new StreamWriter(postStream)) - { - writer.Write(postData); - } - } - - using (var response = (HttpWebResponse)request.GetResponse()) - { - if (response.StatusCode != HttpStatusCode.Found && response.StatusCode != HttpStatusCode.OK) - throw new Exception("Received response code " + response.StatusCode); - } - - string buildUrl = NetUtils.ConcatUrls(project.Url, buildDetails.Number.ToString(), "/api/xml"); - HudsonService.RemoveFromCache(buildUrl); - } - - [DataContract] - protected class ClaimDetailsDto - { - [DataMember(Name = "reason")] - public string Reason { get; set; } - [DataMember(Name = "sticky")] - public bool Sticky { get; set; } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.Serialization; +using System.Net; +using System.IO; +using System.Runtime.Serialization.Json; +using System.Web; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Utils; +using System.Xml; + +namespace Jenkins.Tray.BusinessComponents +{ + public class ClaimService + { + public JenkinsService JenkinsService { get; set; } + + public static void FillInBuildDetails(BuildDetails res, XmlDocument xml) + { + XmlNode claimedNode = xml.SelectSingleNode("/*/action[claimed/text() = 'true']"); + if (claimedNode == null) + return; + + var reasonNode = claimedNode.SelectSingleNode("reason"); + var claimedByNode = claimedNode.SelectSingleNode("claimedBy"); + + ClaimDetails claimDetails = new ClaimDetails(); + claimDetails.User = claimedByNode.InnerText; + claimDetails.Reason = reasonNode != null ? reasonNode.InnerText : ""; + res.ClaimDetails = claimDetails; + } + + public void ClaimBuild(Project project, BuildDetails buildDetails, string reason, bool sticky) + { + string url = NetUtils.ConcatUrls(project.Url, buildDetails.Number.ToString(), "/claim/claim"); + var request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "POST"; + request.ContentType = "application/x-www-form-urlencoded"; + + // we don't want to follow redirections + request.AllowAutoRedirect = false; + + var credentials = project.Server.Credentials; + if (credentials != null) + request.Credentials = new NetworkCredential(credentials.Username, credentials.Password); + + using (Stream postStream = request.GetRequestStream()) + { + var claim = new ClaimDetailsDto + { + Reason = reason, + Sticky = sticky + }; + + var stream = new MemoryStream(); + var serializer = new DataContractJsonSerializer(typeof(ClaimDetailsDto)); + serializer.WriteObject(stream, claim); + string json = Encoding.UTF8.GetString(stream.ToArray()); + + string postData = "json=" + HttpUtility.UrlEncode(json, Encoding.UTF8); + using (var writer = new StreamWriter(postStream)) + { + writer.Write(postData); + } + } + + using (var response = (HttpWebResponse)request.GetResponse()) + { + if (response.StatusCode != HttpStatusCode.Found && response.StatusCode != HttpStatusCode.OK) + throw new Exception("Received response code " + response.StatusCode); + } + + string buildUrl = NetUtils.ConcatUrls(project.Url, buildDetails.Number.ToString(), "/api/xml"); + JenkinsService.RemoveFromCache(buildUrl); + } + + [DataContract] + protected class ClaimDetailsDto + { + [DataMember(Name = "reason")] + public string Reason { get; set; } + [DataMember(Name = "sticky")] + public bool Sticky { get; set; } + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/ConfigurationService.cs b/JenkinsTray/BusinessComponents/ConfigurationService.cs similarity index 94% rename from HudsonTrayTracker/BusinessComponents/ConfigurationService.cs rename to JenkinsTray/BusinessComponents/ConfigurationService.cs index ad2cffb..5231d95 100644 --- a/HudsonTrayTracker/BusinessComponents/ConfigurationService.cs +++ b/JenkinsTray/BusinessComponents/ConfigurationService.cs @@ -1,264 +1,264 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Hudson.TrayTracker.Entities; -using Iesi.Collections.Generic; -using Hudson.TrayTracker.Utils.IO; -using System.IO; -using System.Reflection; -using Common.Logging; -using Newtonsoft.Json; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class ConfigurationService - { - public delegate void ConfigurationUpdatedHandler(); - public event ConfigurationUpdatedHandler ConfigurationUpdated; - - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - const string HUDSON_TRAY_TRACKER_DIRECTORY = "Jenkins Tray"; - const string CONFIGURATION_FILE = "jenkins.configuration"; - - string userConfigurationFile; - Configuration configuration; - - public ISet Servers { get { return configuration.Servers; } } - public NotificationSettings NotificationSettings { get { return configuration.NotificationSettings; } } - public GeneralSettings GeneralSettings { get { return configuration.GeneralSettings; } } - - public void Initialize() - { - string userAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - string userAppDataPath = PathHelper.Combine(userAppDataDir, HUDSON_TRAY_TRACKER_DIRECTORY); - userConfigurationFile = PathHelper.Combine(userAppDataPath, CONFIGURATION_FILE); - - // create the directory in case it does not exist - Directory.CreateDirectory(userAppDataPath); - - LoadConfiguration(); - } - - private void LoadConfiguration() - { - if (File.Exists(userConfigurationFile)) - { - // read the JSON file - var streamReader = File.OpenText(userConfigurationFile); - var serializer = new JsonSerializer(); - using (var jsonReader = new JsonTextReader(streamReader)) - { - configuration = serializer.Deserialize(jsonReader); - } - - // link back projects to their server - foreach (Server server in configuration.Servers) - { - foreach (Project project in server.Projects) - project.Server = server; - } - } - else - { - // read the legacy properties file - var legacyReader = new LegacyConfigurationService(); - configuration = legacyReader.LoadConfiguration(); - } - } - - // Save settings on application exit. - public void SaveConfiguration() - { - var streamWriter = new StreamWriter(userConfigurationFile); - var serializer = new JsonSerializer(); - using (var jsonWriter = new JsonTextWriter(streamWriter)) - { - jsonWriter.Formatting = Formatting.Indented; - serializer.Serialize(jsonWriter, configuration); - } - - if (ConfigurationUpdated != null) - ConfigurationUpdated(); - } - - public Server AddServer(string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) - { - Server server = new Server(); - BindData(server, url, displayName, username, password, ignoreUntrustedCertificate); - Servers.Add(server); - SaveConfiguration(); - return server; - } - - public void UpdateServer(Server server, string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) - { - // note: we need to remove and re-add the server because its hash-code might change - string oldServerUrl = server.Url; - Servers.Remove(server); - BindData(server, url, displayName, username, password, ignoreUntrustedCertificate); - - // Update all projects with new server url - if (server.Url.ToUpper().CompareTo(oldServerUrl.ToUpper()) != 0) - { - logger.Info("Server Url updated: " + oldServerUrl + " -> " + server.Url); - foreach (Project project in server.Projects) - { - string updatedUrl = project.Url.Replace(oldServerUrl, server.Url); - logger.Info("Project Url updated: " + project.Url + " -> " + updatedUrl); - project.Url = updatedUrl; - } - } - Servers.Add(server); - SaveConfiguration(); - } - - private void BindData(Server server, string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) - { - server.Url = url; - server.DisplayName = displayName; - server.IgnoreUntrustedCertificate = ignoreUntrustedCertificate; - if (String.IsNullOrEmpty(username) == false) - server.Credentials = new Credentials(username, password); - else - server.Credentials = null; - } - - public void RemoveServer(Server server) - { - Servers.Remove(server); - SaveConfiguration(); - } - - public void AddProject(Project project) - { - DoAddProject(project); - SaveConfiguration(); - } - public void AddProjects(IList projects) - { - foreach (Project project in projects) - DoAddProject(project); - SaveConfiguration(); - } - private void DoAddProject(Project project) - { - Server server = project.Server; - server.Projects.Add(project); - } - - public void RemoveProject(Project project) - { - DoRemoveProject(project); - SaveConfiguration(); - } - public void RemoveProjects(IList projects) - { - foreach (Project project in projects) - DoRemoveProject(project); - SaveConfiguration(); - } - private void DoRemoveProject(Project project) - { - Server server = project.Server; - server.Projects.Remove(project); - } - - public IDictionary> GetProjects() - { - var res = new Dictionary>(); - foreach (Server server in Servers) - { - var projects = new HashedSet(); - foreach (Project project in server.Projects) - projects.Add(project); - res[server] = projects; - } - return res; - } - - public string GetSoundPath(string status) - { - PropertyInfo prop = NotificationSettings.GetType().GetProperty(status + "SoundPath"); - string res = (string)prop.GetValue(NotificationSettings, null); - return res; - } - - public void SetSoundPath(string status, string path) - { - PropertyInfo prop = NotificationSettings.GetType().GetProperty(status + "SoundPath"); - object obj = prop.GetValue(NotificationSettings, null); - - // obj == null, is to allow NOTHING to be set to the status. - if (obj == null || obj.ToString().CompareTo(path) != 0) - { - prop.SetValue(NotificationSettings, path, null); - SaveConfiguration(); - } - } - - public bool IsTreadUnstableAsFailed() - { - return NotificationSettings.TreatUnstableAsFailed; - } - - public bool IsSoundNotificationsEnabled() - { - return NotificationSettings.SoundNotifications; - } - - public void SetTreadUnstableAsFailed(bool value) - { - if (NotificationSettings.TreatUnstableAsFailed != value) - { - NotificationSettings.TreatUnstableAsFailed = value; - SaveConfiguration(); - } - } - - public void SetRefreshIntervalInSeconds(int value) - { - if (GeneralSettings.RefreshIntervalInSeconds != value) - { - GeneralSettings.RefreshIntervalInSeconds = value; - SaveConfiguration(); - } - } - - public void SetUpdateMainWindowIcon(bool value) - { - if (GeneralSettings.UpdateMainWindowIcon != value) - { - GeneralSettings.UpdateMainWindowIcon = value; - SaveConfiguration(); - } - } - - public void SetIntegrateWithClaimPlugin(bool value) - { - if (GeneralSettings.IntegrateWithClaimPlugin != value) - { - GeneralSettings.IntegrateWithClaimPlugin = value; - SaveConfiguration(); - } - } - - public void SetCheckForUpdates(bool value) - { - if (GeneralSettings.CheckForUpdates != value) - { - GeneralSettings.CheckForUpdates = value; - SaveConfiguration(); - } - } - - public void SetSoundNotifications(bool value) - { - if (NotificationSettings.SoundNotifications != value) - { - NotificationSettings.SoundNotifications = value; - SaveConfiguration(); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Jenkins.Tray.Entities; +using Iesi.Collections.Generic; +using Jenkins.Tray.Utils.IO; +using System.IO; +using System.Reflection; +using Common.Logging; +using Newtonsoft.Json; + +namespace Jenkins.Tray.BusinessComponents +{ + public class ConfigurationService + { + public delegate void ConfigurationUpdatedHandler(); + public event ConfigurationUpdatedHandler ConfigurationUpdated; + + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + const string JENKINS_TRAY_DIRECTORY = "Jenkins Tray"; + const string CONFIGURATION_FILE = "jenkins.configuration"; + + string userConfigurationFile; + Configuration configuration; + + public ISet Servers { get { return configuration.Servers; } } + public NotificationSettings NotificationSettings { get { return configuration.NotificationSettings; } } + public GeneralSettings GeneralSettings { get { return configuration.GeneralSettings; } } + + public void Initialize() + { + string userAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string userAppDataPath = PathHelper.Combine(userAppDataDir, JENKINS_TRAY_DIRECTORY); + userConfigurationFile = PathHelper.Combine(userAppDataPath, CONFIGURATION_FILE); + + // create the directory in case it does not exist + Directory.CreateDirectory(userAppDataPath); + + LoadConfiguration(); + } + + private void LoadConfiguration() + { + if (File.Exists(userConfigurationFile)) + { + // read the JSON file + var streamReader = File.OpenText(userConfigurationFile); + var serializer = new JsonSerializer(); + using (var jsonReader = new JsonTextReader(streamReader)) + { + configuration = serializer.Deserialize(jsonReader); + } + + // link back projects to their server + foreach (Server server in configuration.Servers) + { + foreach (Project project in server.Projects) + project.Server = server; + } + } + else + { + // read the legacy properties file + var legacyReader = new LegacyConfigurationService(); + configuration = legacyReader.LoadConfiguration(); + } + } + + // Save settings on application exit. + public void SaveConfiguration() + { + var streamWriter = new StreamWriter(userConfigurationFile); + var serializer = new JsonSerializer(); + using (var jsonWriter = new JsonTextWriter(streamWriter)) + { + jsonWriter.Formatting = Formatting.Indented; + serializer.Serialize(jsonWriter, configuration); + } + + if (ConfigurationUpdated != null) + ConfigurationUpdated(); + } + + public Server AddServer(string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) + { + Server server = new Server(); + BindData(server, url, displayName, username, password, ignoreUntrustedCertificate); + Servers.Add(server); + SaveConfiguration(); + return server; + } + + public void UpdateServer(Server server, string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) + { + // note: we need to remove and re-add the server because its hash-code might change + string oldServerUrl = server.Url; + Servers.Remove(server); + BindData(server, url, displayName, username, password, ignoreUntrustedCertificate); + + // Update all projects with new server url + if (server.Url.ToUpper().CompareTo(oldServerUrl.ToUpper()) != 0) + { + logger.Info("Server Url updated: " + oldServerUrl + " -> " + server.Url); + foreach (Project project in server.Projects) + { + string updatedUrl = project.Url.Replace(oldServerUrl, server.Url); + logger.Info("Project Url updated: " + project.Url + " -> " + updatedUrl); + project.Url = updatedUrl; + } + } + Servers.Add(server); + SaveConfiguration(); + } + + private void BindData(Server server, string url, string displayName, string username, string password, bool ignoreUntrustedCertificate) + { + server.Url = url; + server.DisplayName = displayName; + server.IgnoreUntrustedCertificate = ignoreUntrustedCertificate; + if (String.IsNullOrEmpty(username) == false) + server.Credentials = new Credentials(username, password); + else + server.Credentials = null; + } + + public void RemoveServer(Server server) + { + Servers.Remove(server); + SaveConfiguration(); + } + + public void AddProject(Project project) + { + DoAddProject(project); + SaveConfiguration(); + } + public void AddProjects(IList projects) + { + foreach (Project project in projects) + DoAddProject(project); + SaveConfiguration(); + } + private void DoAddProject(Project project) + { + Server server = project.Server; + server.Projects.Add(project); + } + + public void RemoveProject(Project project) + { + DoRemoveProject(project); + SaveConfiguration(); + } + public void RemoveProjects(IList projects) + { + foreach (Project project in projects) + DoRemoveProject(project); + SaveConfiguration(); + } + private void DoRemoveProject(Project project) + { + Server server = project.Server; + server.Projects.Remove(project); + } + + public IDictionary> GetProjects() + { + var res = new Dictionary>(); + foreach (Server server in Servers) + { + var projects = new HashedSet(); + foreach (Project project in server.Projects) + projects.Add(project); + res[server] = projects; + } + return res; + } + + public string GetSoundPath(string status) + { + PropertyInfo prop = NotificationSettings.GetType().GetProperty(status + "SoundPath"); + string res = (string)prop.GetValue(NotificationSettings, null); + return res; + } + + public void SetSoundPath(string status, string path) + { + PropertyInfo prop = NotificationSettings.GetType().GetProperty(status + "SoundPath"); + object obj = prop.GetValue(NotificationSettings, null); + + // obj == null, is to allow NOTHING to be set to the status. + if (obj == null || obj.ToString().CompareTo(path) != 0) + { + prop.SetValue(NotificationSettings, path, null); + SaveConfiguration(); + } + } + + public bool IsTreadUnstableAsFailed() + { + return NotificationSettings.TreatUnstableAsFailed; + } + + public bool IsSoundNotificationsEnabled() + { + return NotificationSettings.SoundNotifications; + } + + public void SetTreadUnstableAsFailed(bool value) + { + if (NotificationSettings.TreatUnstableAsFailed != value) + { + NotificationSettings.TreatUnstableAsFailed = value; + SaveConfiguration(); + } + } + + public void SetRefreshIntervalInSeconds(int value) + { + if (GeneralSettings.RefreshIntervalInSeconds != value) + { + GeneralSettings.RefreshIntervalInSeconds = value; + SaveConfiguration(); + } + } + + public void SetUpdateMainWindowIcon(bool value) + { + if (GeneralSettings.UpdateMainWindowIcon != value) + { + GeneralSettings.UpdateMainWindowIcon = value; + SaveConfiguration(); + } + } + + public void SetIntegrateWithClaimPlugin(bool value) + { + if (GeneralSettings.IntegrateWithClaimPlugin != value) + { + GeneralSettings.IntegrateWithClaimPlugin = value; + SaveConfiguration(); + } + } + + public void SetCheckForUpdates(bool value) + { + if (GeneralSettings.CheckForUpdates != value) + { + GeneralSettings.CheckForUpdates = value; + SaveConfiguration(); + } + } + + public void SetSoundNotifications(bool value) + { + if (NotificationSettings.SoundNotifications != value) + { + NotificationSettings.SoundNotifications = value; + SaveConfiguration(); + } + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/HudsonService.cs b/JenkinsTray/BusinessComponents/JenkinsService.cs similarity index 94% rename from HudsonTrayTracker/BusinessComponents/HudsonService.cs rename to JenkinsTray/BusinessComponents/JenkinsService.cs index b29c5c5..db7c980 100644 --- a/HudsonTrayTracker/BusinessComponents/HudsonService.cs +++ b/JenkinsTray/BusinessComponents/JenkinsService.cs @@ -1,401 +1,401 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Net; -using System.Web; -using System.Xml; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Utils; -using Common.Logging; -using System.Reflection; -using Hudson.TrayTracker.Utils.Logging; -using Iesi.Collections.Generic; -using Hudson.TrayTracker.Utils.Web; -using System.Threading; -using System.Security.Cryptography.X509Certificates; -using System.Net.Security; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class HudsonService - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - [ThreadStatic] - static WebClient threadWebClient; - - [ThreadStatic] - static bool ignoreUntrustedCertificate; - - // cache: key=url, value=xml - IDictionary cache = new Dictionary(); - // URLs visited between 2 calls to RecycleCache() - ISet visitedURLs = new HashedSet(); - - public ClaimService ClaimService { get; set; } - - public HudsonService() - { - ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate; - } - - public IList LoadProjects(Server server) - { - String url = NetUtils.ConcatUrls(server.Url, "/api/xml"); - - logger.Info("Loading projects from " + url); - - String xmlStr = DownloadString(server.Credentials, url, false, server.IgnoreUntrustedCertificate); - - if (logger.IsTraceEnabled) - logger.Trace("XML: " + xmlStr); - - XmlDocument xml = new XmlDocument(); - xml.LoadXml(xmlStr); - - XmlNodeList jobElements = xml.SelectNodes("/hudson/job"); - var projects = new List(); - foreach (XmlNode jobElement in jobElements) - { - string projectName = jobElement.SelectSingleNode("name").InnerText; - string projectUrl = jobElement.SelectSingleNode("url").InnerText; - - Project project = new Project(); - project.Server = server; - project.Name = projectName; - project.Url = projectUrl; - - if (logger.IsDebugEnabled) - logger.Debug("Found project " + projectName + " (" + projectUrl + ")"); - - projects.Add(project); - } - - logger.Info("Done loading projects"); - - return projects; - } - - public AllBuildDetails UpdateProject(Project project) - { - String url = NetUtils.ConcatUrls(project.Url, "/api/xml"); - - //logger.Info("Updating project from " + url); - - Credentials credentials = project.Server.Credentials; - bool ignoreUntrustedCertificate = project.Server.IgnoreUntrustedCertificate; - String xmlStr = DownloadString(credentials, url, false, ignoreUntrustedCertificate); - - if (logger.IsTraceEnabled) - logger.Trace("XML: " + xmlStr); - - XmlDocument xml = new XmlDocument(); - xml.LoadXml(xmlStr); - - bool? inQueue = XmlUtils.SelectSingleNodeBoolean(xml, "/*/inQueue"); - string inQueueSince = XmlUtils.SelectSingleNodeText(xml, "/*/queueItem/inQueueSince"); - string why = XmlUtils.SelectSingleNodeText(xml, "/*/queueItem/why"); - bool? stuck = XmlUtils.SelectSingleNodeBoolean(xml, "/*/queueItem/stuck"); - string status = xml.SelectSingleNode("/*/color").InnerText; - string lastBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastBuild/url"); - string lastCompletedBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastCompletedBuild/url"); - string lastSuccessfulBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastSuccessfulBuild/url"); - string lastFailedBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastFailedBuild/url"); - - project.Queue.InQueue = (inQueue.HasValue && inQueue.Value == true); - if (!String.IsNullOrEmpty(inQueueSince)) - { - TimeSpan ts = TimeSpan.FromSeconds(long.Parse(inQueueSince) / 1000); - DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - date = date.Add(ts); - project.Queue.InQueueSince = date; - } - if (!String.IsNullOrEmpty(why)) - { - project.Queue.Why = why; - } - - AllBuildDetails res = new AllBuildDetails(); - res.Status = GetStatus(status, stuck); - res.LastBuild = GetBuildDetails(credentials, lastBuildUrl, ignoreUntrustedCertificate); - res.LastCompletedBuild = GetBuildDetails(credentials, lastCompletedBuildUrl, ignoreUntrustedCertificate); - res.LastSuccessfulBuild = GetBuildDetails(credentials, lastSuccessfulBuildUrl, ignoreUntrustedCertificate); - res.LastFailedBuild = GetBuildDetails(credentials, lastFailedBuildUrl, ignoreUntrustedCertificate); - - //logger.Info("Done updating project"); - return res; - } - - // http://javadoc.jenkins-ci.org/hudson/model/BallColor.html - private BuildStatus GetStatus(string status, bool? stuck) - { - BuildStatusEnum value; - if (status.StartsWith("grey")) - value = BuildStatusEnum.Indeterminate; - else if (status.StartsWith("blue") || status.StartsWith("green")) - value = BuildStatusEnum.Successful; - else if (status.StartsWith("yellow")) - value = BuildStatusEnum.Unstable; - else if (status.StartsWith("red")) - value = BuildStatusEnum.Failed; - else if (status.StartsWith("aborted")) - value = BuildStatusEnum.Aborted; - else if (status.StartsWith("disabled")) - value = BuildStatusEnum.Disabled; - else - value = BuildStatusEnum.Unknown; - - bool isInProgress = status.EndsWith("_anime"); - bool isStuck = (stuck.HasValue && stuck.Value == true); - return new BuildStatus(value, isInProgress, isStuck); - } - - private BuildDetails GetBuildDetails(Credentials credentials, string buildUrl, bool ignoreUntrustedCertificate) - { - if (buildUrl == null) - return null; - - String url = NetUtils.ConcatUrls(buildUrl, "/api/xml"); - - if (logger.IsDebugEnabled) - logger.Debug("Getting build details from " + url); - - String xmlStr = DownloadString(credentials, url, true, ignoreUntrustedCertificate); - - if (logger.IsTraceEnabled) - logger.Trace("XML: " + xmlStr); - - XmlDocument xml = new XmlDocument(); - xml.LoadXml(xmlStr); - - string number = xml.SelectSingleNode("/*/number").InnerText; - string fullDisplayName = xml.SelectSingleNode("/*/fullDisplayName").InnerText; - string timestamp = xml.SelectSingleNode("/*/timestamp").InnerText; - string estimatedDuration = xml.SelectSingleNode("/*/estimatedDuration").InnerText; - string duration = xml.SelectSingleNode("/*/duration").InnerText; - XmlNode xmlResult = xml.SelectSingleNode("/*/result"); - string result = xmlResult == null ? string.Empty : xmlResult.InnerText; - XmlNodeList userNodes = xml.SelectNodes("/*/culprit/fullName"); - - TimeSpan ts = TimeSpan.FromSeconds(long.Parse(timestamp) / 1000); - DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - date = date.Add(ts); - TimeSpan estimatedts = TimeSpan.FromSeconds(long.Parse(estimatedDuration) / 1000); - TimeSpan durationts = TimeSpan.FromSeconds(long.Parse(estimatedDuration) / 1000); - - ISet users = new HashedSet(); - foreach (XmlNode userNode in userNodes) - { - string userName = StringUtils.ExtractUserName(userNode.InnerText); - users.Add(userName); - } - - BuildDetails res = new BuildDetails(); - BuildCauses.FillInBuildCauses(res, xml); - res.Number = int.Parse(number); - res.DisplayName = fullDisplayName; - res.Time = date; - res.EstimatedDuration = estimatedts; - res.Duration = durationts; - res.Result = BuildStatus.StringToBuildStatus(result); - res.Users = users; - - ClaimService.FillInBuildDetails(res, xml); - - if (logger.IsDebugEnabled) - logger.Debug("Done getting build details"); - - return res; - } - - public void SafeRunBuild(Project project) - { - try - { - RunBuild(project); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - throw ex; - } - } - - public void RunBuild(Project project) - { - String url = NetUtils.ConcatUrls(project.Url, "/build?delay=0sec"); - - if (!string.IsNullOrEmpty(project.AuthenticationToken)) - { - url = NetUtils.ConcatUrlsWithoutTrailingSlash(url, "&token=", HttpUtility.UrlEncodeUnicode(project.AuthenticationToken)); - if (!string.IsNullOrEmpty(project.CauseText)) - { - url = NetUtils.ConcatUrlsWithoutTrailingSlash(url, "&cause=", HttpUtility.UrlEncodeUnicode(project.CauseText)); - } - } - logger.Info("Running build at " + url); - - Credentials credentials = project.Server.Credentials; - String str = UploadString(credentials, url, project.Server.IgnoreUntrustedCertificate); - - if (logger.IsTraceEnabled) - logger.Trace("Result: " + str); - - logger.Info("Done running build"); - } - - private String DownloadString(Credentials credentials, string url, bool cacheable, - bool ignoreUntrustedCertificate) - { - string res; - - if (logger.IsTraceEnabled) - logger.Trace("Downloading: " + url); - - if (cacheable) - { - lock (this) - { - // mark the URL as visited - visitedURLs.Add(url); - // perform a lookup in the cache - if (cache.TryGetValue(url, out res)) - { - if (logger.IsTraceEnabled) - logger.Trace("Cache hit: " + url); - return res; - } - } - - if (logger.IsTraceEnabled) - logger.Trace("Cache miss: " + url); - } - - // set the thread-static field - HudsonService.ignoreUntrustedCertificate = ignoreUntrustedCertificate; - - WebClient webClient = GetWebClient(credentials); - res = webClient.DownloadString(url); - - if (logger.IsTraceEnabled) - logger.Trace("Downloaded: " + res); - - if (cacheable) - { - lock (this) - { - // store in cache - cache[url] = res; - } - } - - return res; - } - - private String UploadString(Credentials credentials, string url, bool ignoreUntrustedCertificate) - { - string res; - - if (logger.IsTraceEnabled) - logger.Trace("Uploading: " + url); - - // set the thread-static field - HudsonService.ignoreUntrustedCertificate = ignoreUntrustedCertificate; - - WebClient webClient = GetWebClient(credentials); - webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; - res = webClient.UploadString(url,""); - - if (logger.IsTraceEnabled) - logger.Trace("Uploaded: " + res); - - return res; - } - - private WebClient GetWebClient(Credentials credentials) - { - if (threadWebClient == null) - { - logger.Info("Creating web client in thread " + Thread.CurrentThread.ManagedThreadId - + " (" + Thread.CurrentThread.Name + ")"); - threadWebClient = new CookieAwareWebClient(); - threadWebClient.Encoding = Encoding.UTF8; - } - - // reinitialize HTTP headers - threadWebClient.Headers = new WebHeaderCollection(); - - // credentials - if (credentials != null) - { - string authentication = "Basic " + Convert.ToBase64String( - Encoding.ASCII.GetBytes(credentials.Username + ":" + credentials.Password)); - threadWebClient.Headers.Add("Authorization", authentication); - } - - return threadWebClient; - } - - public void RecycleCache() - { - lock (this) - { - if (logger.IsTraceEnabled) - logger.Trace("Recycling cache: " + cache.Keys.Count + " items in cache"); - - var newCache = new Dictionary(); - - foreach (string visitedURL in visitedURLs) - { - string value; - if (cache.TryGetValue(visitedURL, out value)) - newCache.Add(visitedURL, value); - } - - cache = newCache; - visitedURLs.Clear(); - - if (logger.IsTraceEnabled) - logger.Trace("Recycling cache: " + cache.Keys.Count + " items in cache"); - } - } - - public void RemoveFromCache(string url) - { - lock (this) - { - cache.Remove(url); - } - } - - public string GetConsolePage(Project project) - { - string res = project.Url; - bool hasBuild = HasBuild(project.AllBuildDetails); - if (hasBuild) - res += "lastBuild/console"; - return res; - } - - private bool HasBuild(AllBuildDetails allBuildDetails) - { - // no details, there is no build - if (allBuildDetails == null) - return false; - // if there is a completed build, there is a build - if (allBuildDetails.LastCompletedBuild != null) - return true; - // if there is a build in progress, there is a build - bool buildInProgress = allBuildDetails.Status.IsInProgress; - return buildInProgress; - } - - private bool ValidateServerCertificate(object sender, X509Certificate certificate, - X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - if (ignoreUntrustedCertificate == true) - return true; - return sslPolicyErrors == SslPolicyErrors.None; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; +using System.Web; +using System.Xml; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Utils; +using Common.Logging; +using System.Reflection; +using Jenkins.Tray.Utils.Logging; +using Iesi.Collections.Generic; +using Jenkins.Tray.Utils.Web; +using System.Threading; +using System.Security.Cryptography.X509Certificates; +using System.Net.Security; + +namespace Jenkins.Tray.BusinessComponents +{ + public class JenkinsService + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + [ThreadStatic] + static WebClient threadWebClient; + + [ThreadStatic] + static bool ignoreUntrustedCertificate; + + // cache: key=url, value=xml + IDictionary cache = new Dictionary(); + // URLs visited between 2 calls to RecycleCache() + ISet visitedURLs = new HashedSet(); + + public ClaimService ClaimService { get; set; } + + public JenkinsService() + { + ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate; + } + + public IList LoadProjects(Server server) + { + String url = NetUtils.ConcatUrls(server.Url, "/api/xml"); + + logger.Info("Loading projects from " + url); + + String xmlStr = DownloadString(server.Credentials, url, false, server.IgnoreUntrustedCertificate); + + if (logger.IsTraceEnabled) + logger.Trace("XML: " + xmlStr); + + XmlDocument xml = new XmlDocument(); + xml.LoadXml(xmlStr); + + XmlNodeList jobElements = xml.SelectNodes("/hudson/job"); + var projects = new List(); + foreach (XmlNode jobElement in jobElements) + { + string projectName = jobElement.SelectSingleNode("name").InnerText; + string projectUrl = jobElement.SelectSingleNode("url").InnerText; + + Project project = new Project(); + project.Server = server; + project.Name = projectName; + project.Url = projectUrl; + + if (logger.IsDebugEnabled) + logger.Debug("Found project " + projectName + " (" + projectUrl + ")"); + + projects.Add(project); + } + + logger.Info("Done loading projects"); + + return projects; + } + + public AllBuildDetails UpdateProject(Project project) + { + String url = NetUtils.ConcatUrls(project.Url, "/api/xml"); + + //logger.Info("Updating project from " + url); + + Credentials credentials = project.Server.Credentials; + bool ignoreUntrustedCertificate = project.Server.IgnoreUntrustedCertificate; + String xmlStr = DownloadString(credentials, url, false, ignoreUntrustedCertificate); + + if (logger.IsTraceEnabled) + logger.Trace("XML: " + xmlStr); + + XmlDocument xml = new XmlDocument(); + xml.LoadXml(xmlStr); + + bool? inQueue = XmlUtils.SelectSingleNodeBoolean(xml, "/*/inQueue"); + string inQueueSince = XmlUtils.SelectSingleNodeText(xml, "/*/queueItem/inQueueSince"); + string why = XmlUtils.SelectSingleNodeText(xml, "/*/queueItem/why"); + bool? stuck = XmlUtils.SelectSingleNodeBoolean(xml, "/*/queueItem/stuck"); + string status = xml.SelectSingleNode("/*/color").InnerText; + string lastBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastBuild/url"); + string lastCompletedBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastCompletedBuild/url"); + string lastSuccessfulBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastSuccessfulBuild/url"); + string lastFailedBuildUrl = XmlUtils.SelectSingleNodeText(xml, "/*/lastFailedBuild/url"); + + project.Queue.InQueue = (inQueue.HasValue && inQueue.Value == true); + if (!String.IsNullOrEmpty(inQueueSince)) + { + TimeSpan ts = TimeSpan.FromSeconds(long.Parse(inQueueSince) / 1000); + DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + date = date.Add(ts); + project.Queue.InQueueSince = date; + } + if (!String.IsNullOrEmpty(why)) + { + project.Queue.Why = why; + } + + AllBuildDetails res = new AllBuildDetails(); + res.Status = GetStatus(status, stuck); + res.LastBuild = GetBuildDetails(credentials, lastBuildUrl, ignoreUntrustedCertificate); + res.LastCompletedBuild = GetBuildDetails(credentials, lastCompletedBuildUrl, ignoreUntrustedCertificate); + res.LastSuccessfulBuild = GetBuildDetails(credentials, lastSuccessfulBuildUrl, ignoreUntrustedCertificate); + res.LastFailedBuild = GetBuildDetails(credentials, lastFailedBuildUrl, ignoreUntrustedCertificate); + + //logger.Info("Done updating project"); + return res; + } + + // http://javadoc.jenkins-ci.org/hudson/model/BallColor.html + private BuildStatus GetStatus(string status, bool? stuck) + { + BuildStatusEnum value; + if (status.StartsWith("grey")) + value = BuildStatusEnum.Indeterminate; + else if (status.StartsWith("blue") || status.StartsWith("green")) + value = BuildStatusEnum.Successful; + else if (status.StartsWith("yellow")) + value = BuildStatusEnum.Unstable; + else if (status.StartsWith("red")) + value = BuildStatusEnum.Failed; + else if (status.StartsWith("aborted")) + value = BuildStatusEnum.Aborted; + else if (status.StartsWith("disabled")) + value = BuildStatusEnum.Disabled; + else + value = BuildStatusEnum.Unknown; + + bool isInProgress = status.EndsWith("_anime"); + bool isStuck = (stuck.HasValue && stuck.Value == true); + return new BuildStatus(value, isInProgress, isStuck); + } + + private BuildDetails GetBuildDetails(Credentials credentials, string buildUrl, bool ignoreUntrustedCertificate) + { + if (buildUrl == null) + return null; + + String url = NetUtils.ConcatUrls(buildUrl, "/api/xml"); + + if (logger.IsDebugEnabled) + logger.Debug("Getting build details from " + url); + + String xmlStr = DownloadString(credentials, url, true, ignoreUntrustedCertificate); + + if (logger.IsTraceEnabled) + logger.Trace("XML: " + xmlStr); + + XmlDocument xml = new XmlDocument(); + xml.LoadXml(xmlStr); + + string number = xml.SelectSingleNode("/*/number").InnerText; + string fullDisplayName = xml.SelectSingleNode("/*/fullDisplayName").InnerText; + string timestamp = xml.SelectSingleNode("/*/timestamp").InnerText; + string estimatedDuration = xml.SelectSingleNode("/*/estimatedDuration").InnerText; + string duration = xml.SelectSingleNode("/*/duration").InnerText; + XmlNode xmlResult = xml.SelectSingleNode("/*/result"); + string result = xmlResult == null ? string.Empty : xmlResult.InnerText; + XmlNodeList userNodes = xml.SelectNodes("/*/culprit/fullName"); + + TimeSpan ts = TimeSpan.FromSeconds(long.Parse(timestamp) / 1000); + DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + date = date.Add(ts); + TimeSpan estimatedts = TimeSpan.FromSeconds(long.Parse(estimatedDuration) / 1000); + TimeSpan durationts = TimeSpan.FromSeconds(long.Parse(estimatedDuration) / 1000); + + ISet users = new HashedSet(); + foreach (XmlNode userNode in userNodes) + { + string userName = StringUtils.ExtractUserName(userNode.InnerText); + users.Add(userName); + } + + BuildDetails res = new BuildDetails(); + BuildCauses.FillInBuildCauses(res, xml); + res.Number = int.Parse(number); + res.DisplayName = fullDisplayName; + res.Time = date; + res.EstimatedDuration = estimatedts; + res.Duration = durationts; + res.Result = BuildStatus.StringToBuildStatus(result); + res.Users = users; + + ClaimService.FillInBuildDetails(res, xml); + + if (logger.IsDebugEnabled) + logger.Debug("Done getting build details"); + + return res; + } + + public void SafeRunBuild(Project project) + { + try + { + RunBuild(project); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + throw ex; + } + } + + public void RunBuild(Project project) + { + String url = NetUtils.ConcatUrls(project.Url, "/build?delay=0sec"); + + if (!string.IsNullOrEmpty(project.AuthenticationToken)) + { + url = NetUtils.ConcatUrlsWithoutTrailingSlash(url, "&token=", HttpUtility.UrlEncodeUnicode(project.AuthenticationToken)); + if (!string.IsNullOrEmpty(project.CauseText)) + { + url = NetUtils.ConcatUrlsWithoutTrailingSlash(url, "&cause=", HttpUtility.UrlEncodeUnicode(project.CauseText)); + } + } + logger.Info("Running build at " + url); + + Credentials credentials = project.Server.Credentials; + String str = UploadString(credentials, url, project.Server.IgnoreUntrustedCertificate); + + if (logger.IsTraceEnabled) + logger.Trace("Result: " + str); + + logger.Info("Done running build"); + } + + private String DownloadString(Credentials credentials, string url, bool cacheable, + bool ignoreUntrustedCertificate) + { + string res; + + if (logger.IsTraceEnabled) + logger.Trace("Downloading: " + url); + + if (cacheable) + { + lock (this) + { + // mark the URL as visited + visitedURLs.Add(url); + // perform a lookup in the cache + if (cache.TryGetValue(url, out res)) + { + if (logger.IsTraceEnabled) + logger.Trace("Cache hit: " + url); + return res; + } + } + + if (logger.IsTraceEnabled) + logger.Trace("Cache miss: " + url); + } + + // set the thread-static field + JenkinsService.ignoreUntrustedCertificate = ignoreUntrustedCertificate; + + WebClient webClient = GetWebClient(credentials); + res = webClient.DownloadString(url); + + if (logger.IsTraceEnabled) + logger.Trace("Downloaded: " + res); + + if (cacheable) + { + lock (this) + { + // store in cache + cache[url] = res; + } + } + + return res; + } + + private String UploadString(Credentials credentials, string url, bool ignoreUntrustedCertificate) + { + string res; + + if (logger.IsTraceEnabled) + logger.Trace("Uploading: " + url); + + // set the thread-static field + JenkinsService.ignoreUntrustedCertificate = ignoreUntrustedCertificate; + + WebClient webClient = GetWebClient(credentials); + webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; + res = webClient.UploadString(url,""); + + if (logger.IsTraceEnabled) + logger.Trace("Uploaded: " + res); + + return res; + } + + private WebClient GetWebClient(Credentials credentials) + { + if (threadWebClient == null) + { + logger.Info("Creating web client in thread " + Thread.CurrentThread.ManagedThreadId + + " (" + Thread.CurrentThread.Name + ")"); + threadWebClient = new CookieAwareWebClient(); + threadWebClient.Encoding = Encoding.UTF8; + } + + // reinitialize HTTP headers + threadWebClient.Headers = new WebHeaderCollection(); + + // credentials + if (credentials != null) + { + string authentication = "Basic " + Convert.ToBase64String( + Encoding.ASCII.GetBytes(credentials.Username + ":" + credentials.Password)); + threadWebClient.Headers.Add("Authorization", authentication); + } + + return threadWebClient; + } + + public void RecycleCache() + { + lock (this) + { + if (logger.IsTraceEnabled) + logger.Trace("Recycling cache: " + cache.Keys.Count + " items in cache"); + + var newCache = new Dictionary(); + + foreach (string visitedURL in visitedURLs) + { + string value; + if (cache.TryGetValue(visitedURL, out value)) + newCache.Add(visitedURL, value); + } + + cache = newCache; + visitedURLs.Clear(); + + if (logger.IsTraceEnabled) + logger.Trace("Recycling cache: " + cache.Keys.Count + " items in cache"); + } + } + + public void RemoveFromCache(string url) + { + lock (this) + { + cache.Remove(url); + } + } + + public string GetConsolePage(Project project) + { + string res = project.Url; + bool hasBuild = HasBuild(project.AllBuildDetails); + if (hasBuild) + res += "lastBuild/console"; + return res; + } + + private bool HasBuild(AllBuildDetails allBuildDetails) + { + // no details, there is no build + if (allBuildDetails == null) + return false; + // if there is a completed build, there is a build + if (allBuildDetails.LastCompletedBuild != null) + return true; + // if there is a build in progress, there is a build + bool buildInProgress = allBuildDetails.Status.IsInProgress; + return buildInProgress; + } + + private bool ValidateServerCertificate(object sender, X509Certificate certificate, + X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + if (ignoreUntrustedCertificate == true) + return true; + return sslPolicyErrors == SslPolicyErrors.None; + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/NotificationService.cs b/JenkinsTray/BusinessComponents/NotificationService.cs similarity index 93% rename from HudsonTrayTracker/BusinessComponents/NotificationService.cs rename to JenkinsTray/BusinessComponents/NotificationService.cs index 2e184c9..234c075 100644 --- a/HudsonTrayTracker/BusinessComponents/NotificationService.cs +++ b/JenkinsTray/BusinessComponents/NotificationService.cs @@ -1,53 +1,53 @@ -using System; -using System.ComponentModel; -using Hudson.TrayTracker.Entities; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class NotificationService : Component - { - private AllServersStatus allServersStatus = new AllServersStatus(); - - public ConfigurationService ConfigurationService { get; set; } - public ProjectsUpdateService UpdateService { private get; set; } - - public void Initialize() - { - ConfigurationService.ConfigurationUpdated += Execute; - UpdateService.ProjectsUpdated += Execute; - Disposed += delegate - { - ConfigurationService.ConfigurationUpdated -= Execute; - UpdateService.ProjectsUpdated -= Execute; - }; - - //Execute(); - } - - public void Execute() - { - allServersStatus.Update(ConfigurationService.Servers); - - if (ConfigurationService.NotificationSettings.SoundNotifications) - { - string fileToPlay = null; - if (allServersStatus.StillFailingProjects.Count > 0) - fileToPlay = ConfigurationService.NotificationSettings.StillFailingSoundPath; - else if (allServersStatus.FailingProjects.Count > 0) - fileToPlay = ConfigurationService.NotificationSettings.FailedSoundPath; - else if (allServersStatus.FixedProjects.Count > 0) - fileToPlay = ConfigurationService.NotificationSettings.FixedSoundPath; - else if (allServersStatus.SucceedingProjects.Count > 0) - fileToPlay = ConfigurationService.NotificationSettings.SucceededSoundPath; - if (fileToPlay != null) - SoundPlayer.PlayFile(fileToPlay); - } - } - - private bool TreatAsFailure(BuildStatusEnum status) - { - return status == BuildStatusEnum.Failed - || (status == BuildStatusEnum.Unstable && ConfigurationService.NotificationSettings.TreatUnstableAsFailed); - } - } +using System; +using System.ComponentModel; +using Jenkins.Tray.Entities; + +namespace Jenkins.Tray.BusinessComponents +{ + public class NotificationService : Component + { + private AllServersStatus allServersStatus = new AllServersStatus(); + + public ConfigurationService ConfigurationService { get; set; } + public ProjectsUpdateService UpdateService { private get; set; } + + public void Initialize() + { + ConfigurationService.ConfigurationUpdated += Execute; + UpdateService.ProjectsUpdated += Execute; + Disposed += delegate + { + ConfigurationService.ConfigurationUpdated -= Execute; + UpdateService.ProjectsUpdated -= Execute; + }; + + //Execute(); + } + + public void Execute() + { + allServersStatus.Update(ConfigurationService.Servers); + + if (ConfigurationService.NotificationSettings.SoundNotifications) + { + string fileToPlay = null; + if (allServersStatus.StillFailingProjects.Count > 0) + fileToPlay = ConfigurationService.NotificationSettings.StillFailingSoundPath; + else if (allServersStatus.FailingProjects.Count > 0) + fileToPlay = ConfigurationService.NotificationSettings.FailedSoundPath; + else if (allServersStatus.FixedProjects.Count > 0) + fileToPlay = ConfigurationService.NotificationSettings.FixedSoundPath; + else if (allServersStatus.SucceedingProjects.Count > 0) + fileToPlay = ConfigurationService.NotificationSettings.SucceededSoundPath; + if (fileToPlay != null) + SoundPlayer.PlayFile(fileToPlay); + } + } + + private bool TreatAsFailure(BuildStatusEnum status) + { + return status == BuildStatusEnum.Failed + || (status == BuildStatusEnum.Unstable && ConfigurationService.NotificationSettings.TreatUnstableAsFailed); + } + } } \ No newline at end of file diff --git a/HudsonTrayTracker/BusinessComponents/ProjectsUpdateService.cs b/JenkinsTray/BusinessComponents/ProjectsUpdateService.cs similarity index 92% rename from HudsonTrayTracker/BusinessComponents/ProjectsUpdateService.cs rename to JenkinsTray/BusinessComponents/ProjectsUpdateService.cs index 8e35a23..50f8e4d 100644 --- a/HudsonTrayTracker/BusinessComponents/ProjectsUpdateService.cs +++ b/JenkinsTray/BusinessComponents/ProjectsUpdateService.cs @@ -1,185 +1,185 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using Common.Logging; -using System.Reflection; -using Hudson.TrayTracker.Entities; -using System.ComponentModel; -using Hudson.TrayTracker.Utils.Logging; -using Iesi.Collections.Generic; -using Amib.Threading; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public class ProjectsUpdateService - { - public enum UpdateSource - { - User, - Timer, - Program - } - - public delegate void ProjectsUpdatedHandler(); - public event ProjectsUpdatedHandler ProjectsUpdated; - - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - -#if !DEBUG - const int TOTAL_THREAD_COUNT = 8; - const int THREAD_COUNT_BY_DOMAIN = 4; -#else - const int TOTAL_THREAD_COUNT = 1; - const int THREAD_COUNT_BY_DOMAIN = 1; -#endif - - SmartThreadPool threadPool = new SmartThreadPool(3600, TOTAL_THREAD_COUNT, TOTAL_THREAD_COUNT); - - Timer timer; - bool updating; - - public ConfigurationService ConfigurationService { get; set; } - public HudsonService HudsonService { get; set; } - - public ProjectsUpdateService() - { - } - - public void Initialize() - { - timer = new Timer(UpdateProjects, null, 0, Timeout.Infinite); - } - - public void UpdateProjects() - { - var worker = new BackgroundWorker(); - worker.DoWork += delegate - { - DoUpdateProjects(UpdateSource.User); - }; - worker.RunWorkerAsync(); - } - - private void UpdateProjects(object state) - { - DoUpdateProjects(UpdateSource.Timer); - - int timeBetweenUpdates = ConfigurationService.GeneralSettings.RefreshIntervalInSeconds * 1000; - timer.Change(timeBetweenUpdates, Timeout.Infinite); - } - - private void DoUpdateProjects(UpdateSource source) - { - logger.Info("Running update from " + source); - - lock (this) - { - if (updating) - { - logger.Info("Already in update: skipping"); - return; - } - updating = true; - } - - try - { - DoUpdateProjectsInternal(); - HudsonService.RecycleCache(); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - throw; - } - finally - { - lock (this) - { - updating = false; - } - } - - logger.Info("Done"); - } - - private void DoUpdateProjectsInternal() - { - IDictionary> projectsByServer = ConfigurationService.GetProjects(); - var allWorkItemsGroup = new List(); - var allFutureBuildDetails = new Dictionary(); - - foreach (KeyValuePair> pair in projectsByServer) - { - Server server = pair.Key; - ISet projects = pair.Value; - - IWorkItemsGroup workItemsGroup = threadPool.CreateWorkItemsGroup(THREAD_COUNT_BY_DOMAIN); - allWorkItemsGroup.Add(workItemsGroup); - - foreach (Project project in projects) - { - WorkItemCallback work = delegate(object state) - { - AllBuildDetails newBuildDetail = null; - try - { - Project project_ = (Project)state; - newBuildDetail = HudsonService.UpdateProject(project_); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - } - return newBuildDetail; - }; - IWorkItemResult futureRes = workItemsGroup.QueueWorkItem(work, project); - allFutureBuildDetails[project] = futureRes; - } - } - - foreach (IWorkItemsGroup workItemsGroup in allWorkItemsGroup) - { - workItemsGroup.WaitForIdle(); - } - - foreach (ISet projects in projectsByServer.Values) - { - foreach (Project project in projects) - { - IWorkItemResult newStatus; - allFutureBuildDetails.TryGetValue(project, out newStatus); - AllBuildDetails previousAllBuildDetails = project.AllBuildDetails; - if (newStatus != null) - { - project.AllBuildDetails = (AllBuildDetails)newStatus.Result; - project.Activity.HasNewBuild = false; - - if (previousAllBuildDetails != null && project.AllBuildDetails != null ) - { - project.PreviousStatus = previousAllBuildDetails.Status; - - if (previousAllBuildDetails.LastBuild != null && project.AllBuildDetails.LastBuild != null) - { - // Has existing LastBuilds - if (previousAllBuildDetails.LastBuild.Number != project.AllBuildDetails.LastBuild.Number) - { - project.Activity.HasNewBuild = true; - } - } - else if (previousAllBuildDetails.LastBuild == null && project.AllBuildDetails.LastBuild != null) - { - // 1st new LastBuild is found - project.Activity.HasNewBuild = true; - } - } - } - } - } - - if (ProjectsUpdated != null) - ProjectsUpdated(); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using Common.Logging; +using System.Reflection; +using Jenkins.Tray.Entities; +using System.ComponentModel; +using Jenkins.Tray.Utils.Logging; +using Iesi.Collections.Generic; +using Amib.Threading; + +namespace Jenkins.Tray.BusinessComponents +{ + public class ProjectsUpdateService + { + public enum UpdateSource + { + User, + Timer, + Program + } + + public delegate void ProjectsUpdatedHandler(); + public event ProjectsUpdatedHandler ProjectsUpdated; + + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + +#if !DEBUG + const int TOTAL_THREAD_COUNT = 8; + const int THREAD_COUNT_BY_DOMAIN = 4; +#else + const int TOTAL_THREAD_COUNT = 1; + const int THREAD_COUNT_BY_DOMAIN = 1; +#endif + + SmartThreadPool threadPool = new SmartThreadPool(3600, TOTAL_THREAD_COUNT, TOTAL_THREAD_COUNT); + + Timer timer; + bool updating; + + public ConfigurationService ConfigurationService { get; set; } + public JenkinsService JenkinsService { get; set; } + + public ProjectsUpdateService() + { + } + + public void Initialize() + { + timer = new Timer(UpdateProjects, null, 0, Timeout.Infinite); + } + + public void UpdateProjects() + { + var worker = new BackgroundWorker(); + worker.DoWork += delegate + { + DoUpdateProjects(UpdateSource.User); + }; + worker.RunWorkerAsync(); + } + + private void UpdateProjects(object state) + { + DoUpdateProjects(UpdateSource.Timer); + + int timeBetweenUpdates = ConfigurationService.GeneralSettings.RefreshIntervalInSeconds * 1000; + timer.Change(timeBetweenUpdates, Timeout.Infinite); + } + + private void DoUpdateProjects(UpdateSource source) + { + logger.Info("Running update from " + source); + + lock (this) + { + if (updating) + { + logger.Info("Already in update: skipping"); + return; + } + updating = true; + } + + try + { + DoUpdateProjectsInternal(); + JenkinsService.RecycleCache(); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + throw; + } + finally + { + lock (this) + { + updating = false; + } + } + + logger.Info("Done"); + } + + private void DoUpdateProjectsInternal() + { + IDictionary> projectsByServer = ConfigurationService.GetProjects(); + var allWorkItemsGroup = new List(); + var allFutureBuildDetails = new Dictionary(); + + foreach (KeyValuePair> pair in projectsByServer) + { + Server server = pair.Key; + ISet projects = pair.Value; + + IWorkItemsGroup workItemsGroup = threadPool.CreateWorkItemsGroup(THREAD_COUNT_BY_DOMAIN); + allWorkItemsGroup.Add(workItemsGroup); + + foreach (Project project in projects) + { + WorkItemCallback work = delegate(object state) + { + AllBuildDetails newBuildDetail = null; + try + { + Project project_ = (Project)state; + newBuildDetail = JenkinsService.UpdateProject(project_); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + } + return newBuildDetail; + }; + IWorkItemResult futureRes = workItemsGroup.QueueWorkItem(work, project); + allFutureBuildDetails[project] = futureRes; + } + } + + foreach (IWorkItemsGroup workItemsGroup in allWorkItemsGroup) + { + workItemsGroup.WaitForIdle(); + } + + foreach (ISet projects in projectsByServer.Values) + { + foreach (Project project in projects) + { + IWorkItemResult newStatus; + allFutureBuildDetails.TryGetValue(project, out newStatus); + AllBuildDetails previousAllBuildDetails = project.AllBuildDetails; + if (newStatus != null) + { + project.AllBuildDetails = (AllBuildDetails)newStatus.Result; + project.Activity.HasNewBuild = false; + + if (previousAllBuildDetails != null && project.AllBuildDetails != null ) + { + project.PreviousStatus = previousAllBuildDetails.Status; + + if (previousAllBuildDetails.LastBuild != null && project.AllBuildDetails.LastBuild != null) + { + // Has existing LastBuilds + if (previousAllBuildDetails.LastBuild.Number != project.AllBuildDetails.LastBuild.Number) + { + project.Activity.HasNewBuild = true; + } + } + else if (previousAllBuildDetails.LastBuild == null && project.AllBuildDetails.LastBuild != null) + { + // 1st new LastBuild is found + project.Activity.HasNewBuild = true; + } + } + } + } + } + + if (ProjectsUpdated != null) + ProjectsUpdated(); + } + } +} diff --git a/HudsonTrayTracker/BusinessComponents/SoundPlayer.cs b/JenkinsTray/BusinessComponents/SoundPlayer.cs similarity index 94% rename from HudsonTrayTracker/BusinessComponents/SoundPlayer.cs rename to JenkinsTray/BusinessComponents/SoundPlayer.cs index c0ea061..f768142 100644 --- a/HudsonTrayTracker/BusinessComponents/SoundPlayer.cs +++ b/JenkinsTray/BusinessComponents/SoundPlayer.cs @@ -1,40 +1,40 @@ -using System.IO; -using System.Runtime.InteropServices; -using Common.Logging; -using System.Reflection; - -namespace Hudson.TrayTracker.BusinessComponents -{ - public static class SoundPlayer - { - private enum Flags - { - SND_SYNC = 0x0000, /* play synchronously (default) */ - SND_ASYNC = 0x0001, /* play asynchronously */ - SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */ - SND_MEMORY = 0x0004, /* pszSound points to a memory file */ - SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */ - SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */ - SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */ - SND_ALIAS = 0x00010000, /* name is a registry alias */ - SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */ - SND_FILENAME = 0x00020000, /* name is file name */ - SND_RESOURCE = 0x00040004 /* name is resource name or atom */ - } - - [DllImport("winmm.dll")] - static extern bool PlaySound(string file, int module, int flags); - - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public static void PlayFile(string filePath) - { - logger.Debug("Playing sound: " + filePath); - - if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) - { - PlaySound(filePath, 0, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME)); - } - } - } +using System.IO; +using System.Runtime.InteropServices; +using Common.Logging; +using System.Reflection; + +namespace Jenkins.Tray.BusinessComponents +{ + public static class SoundPlayer + { + private enum Flags + { + SND_SYNC = 0x0000, /* play synchronously (default) */ + SND_ASYNC = 0x0001, /* play asynchronously */ + SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */ + SND_MEMORY = 0x0004, /* pszSound points to a memory file */ + SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */ + SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */ + SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */ + SND_ALIAS = 0x00010000, /* name is a registry alias */ + SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */ + SND_FILENAME = 0x00020000, /* name is file name */ + SND_RESOURCE = 0x00040004 /* name is resource name or atom */ + } + + [DllImport("winmm.dll")] + static extern bool PlaySound(string file, int module, int flags); + + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public static void PlayFile(string filePath) + { + logger.Debug("Playing sound: " + filePath); + + if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath)) + { + PlaySound(filePath, 0, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME)); + } + } + } } \ No newline at end of file diff --git a/JenkinsTray/Configuration.xml b/JenkinsTray/Configuration.xml new file mode 100644 index 0000000..c2b8562 --- /dev/null +++ b/JenkinsTray/Configuration.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HudsonTrayTracker/Entities/AllBuildDetails.cs b/JenkinsTray/Entities/AllBuildDetails.cs similarity index 89% rename from HudsonTrayTracker/Entities/AllBuildDetails.cs rename to JenkinsTray/Entities/AllBuildDetails.cs index 1ad8ccd..38a84ef 100644 --- a/HudsonTrayTracker/Entities/AllBuildDetails.cs +++ b/JenkinsTray/Entities/AllBuildDetails.cs @@ -1,16 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Hudson.TrayTracker.Entities -{ - public class AllBuildDetails - { - public BuildStatus Status { get; set; } - public BuildStatus PreviousStatus { get; set; } - public BuildDetails LastBuild { get; set; } - public BuildDetails LastCompletedBuild { get; set; } - public BuildDetails LastSuccessfulBuild { get; set; } - public BuildDetails LastFailedBuild { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace Jenkins.Tray.Entities +{ + public class AllBuildDetails + { + public BuildStatus Status { get; set; } + public BuildStatus PreviousStatus { get; set; } + public BuildDetails LastBuild { get; set; } + public BuildDetails LastCompletedBuild { get; set; } + public BuildDetails LastSuccessfulBuild { get; set; } + public BuildDetails LastFailedBuild { get; set; } + } +} diff --git a/HudsonTrayTracker/Entities/BuildCause.cs b/JenkinsTray/Entities/BuildCause.cs similarity index 96% rename from HudsonTrayTracker/Entities/BuildCause.cs rename to JenkinsTray/Entities/BuildCause.cs index 8be8082..6e5a962 100644 --- a/HudsonTrayTracker/Entities/BuildCause.cs +++ b/JenkinsTray/Entities/BuildCause.cs @@ -1,131 +1,131 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using Iesi.Collections.Generic; - -namespace Hudson.TrayTracker.Entities -{ - public enum BuildCauseEnum - { - Unknown, - SCM, - Timer, - User, - UpstreamProject, - RemoteHost - } - - public class BuildCause - { - public string ShortDescription { get; set; } - public string Starter { get; set; } - public string UserID { get; set; } - public BuildCauseEnum Cause; - - public BuildCause() - { - - } - } - - public class BuildCauses - { - public ISet Causes; - public bool? HasUniqueCauses { get; set; } - - public BuildCauses() - { - Causes = new HashedSet(); - HasUniqueCauses = null; - } - - public BuildCause FirstBuildCause - { - get - { - BuildCause first = null; - if (HasUniqueCauses == true) - { - using (IEnumerator enumer = Causes.GetEnumerator()) - { - if (enumer.MoveNext()) - first = enumer.Current; - } - } - return first; - } - } - - public static void FillInBuildCauses(BuildDetails res, XmlDocument xml) - { - XmlNodeList causes = xml.SelectNodes("/*/action/cause"); - res.Causes = new BuildCauses(); - res.Causes.HasUniqueCauses = null; - BuildCauseEnum causeEnum = BuildCauseEnum.Unknown; - - foreach (XmlNode causeNode in causes) - { - string causeShortDesc = causeNode["shortDescription"].InnerText; - BuildCause cause = new BuildCause(); - cause.ShortDescription = causeShortDesc; - - if (causeShortDesc.StartsWith("Started by user")) - { - cause.Cause = BuildCauseEnum.User; - var userName = causeNode["userName"]; - if (userName != null && userName.InnerText.Length > 0) - { - cause.Starter = userName.InnerText.ToString(); - } - var userID = causeNode["userId"]; - if (userID != null && userID.InnerText.Length > 0) - { - cause.UserID = userID.InnerText.ToString(); - } - } - else if (causeShortDesc.StartsWith("Started by Timer", StringComparison.CurrentCultureIgnoreCase)) - { - cause.Cause = BuildCauseEnum.Timer; - } - else if (causeShortDesc.StartsWith("Started by Upstream Project", StringComparison.CurrentCultureIgnoreCase)) - { - cause.Cause = BuildCauseEnum.UpstreamProject; - var upstreamProject = causeNode["upstreamProject"]; - if (upstreamProject != null && upstreamProject.InnerText.Length > 0) - { - cause.Starter = upstreamProject.InnerText.ToString(); - } - } - else if (causeShortDesc.StartsWith("Started by an SCM change", StringComparison.CurrentCultureIgnoreCase)) - { - cause.Cause = BuildCauseEnum.SCM; - } - else if (causeShortDesc.StartsWith("Started by remote host", StringComparison.CurrentCultureIgnoreCase)) - { - cause.Cause = BuildCauseEnum.RemoteHost; - string startedBy = @"Started by remote host "; - string remoteHost = causeShortDesc.Remove(0, startedBy.Length); - int index = remoteHost.IndexOf(" with note: "); - cause.Starter = index > 0 ? remoteHost.Remove(index) : remoteHost; - } - else - { - cause.Cause = BuildCauseEnum.Unknown; - } - if (res.Causes.HasUniqueCauses == null) - { - causeEnum = cause.Cause; - res.Causes.HasUniqueCauses = true; - } - else - { - if (cause.Cause != causeEnum) - res.Causes.HasUniqueCauses = false; - } - res.Causes.Causes.Add(cause); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using Iesi.Collections.Generic; + +namespace Jenkins.Tray.Entities +{ + public enum BuildCauseEnum + { + Unknown, + SCM, + Timer, + User, + UpstreamProject, + RemoteHost + } + + public class BuildCause + { + public string ShortDescription { get; set; } + public string Starter { get; set; } + public string UserID { get; set; } + public BuildCauseEnum Cause; + + public BuildCause() + { + + } + } + + public class BuildCauses + { + public ISet Causes; + public bool? HasUniqueCauses { get; set; } + + public BuildCauses() + { + Causes = new HashedSet(); + HasUniqueCauses = null; + } + + public BuildCause FirstBuildCause + { + get + { + BuildCause first = null; + if (HasUniqueCauses == true) + { + using (IEnumerator enumer = Causes.GetEnumerator()) + { + if (enumer.MoveNext()) + first = enumer.Current; + } + } + return first; + } + } + + public static void FillInBuildCauses(BuildDetails res, XmlDocument xml) + { + XmlNodeList causes = xml.SelectNodes("/*/action/cause"); + res.Causes = new BuildCauses(); + res.Causes.HasUniqueCauses = null; + BuildCauseEnum causeEnum = BuildCauseEnum.Unknown; + + foreach (XmlNode causeNode in causes) + { + string causeShortDesc = causeNode["shortDescription"].InnerText; + BuildCause cause = new BuildCause(); + cause.ShortDescription = causeShortDesc; + + if (causeShortDesc.StartsWith("Started by user")) + { + cause.Cause = BuildCauseEnum.User; + var userName = causeNode["userName"]; + if (userName != null && userName.InnerText.Length > 0) + { + cause.Starter = userName.InnerText.ToString(); + } + var userID = causeNode["userId"]; + if (userID != null && userID.InnerText.Length > 0) + { + cause.UserID = userID.InnerText.ToString(); + } + } + else if (causeShortDesc.StartsWith("Started by Timer", StringComparison.CurrentCultureIgnoreCase)) + { + cause.Cause = BuildCauseEnum.Timer; + } + else if (causeShortDesc.StartsWith("Started by Upstream Project", StringComparison.CurrentCultureIgnoreCase)) + { + cause.Cause = BuildCauseEnum.UpstreamProject; + var upstreamProject = causeNode["upstreamProject"]; + if (upstreamProject != null && upstreamProject.InnerText.Length > 0) + { + cause.Starter = upstreamProject.InnerText.ToString(); + } + } + else if (causeShortDesc.StartsWith("Started by an SCM change", StringComparison.CurrentCultureIgnoreCase)) + { + cause.Cause = BuildCauseEnum.SCM; + } + else if (causeShortDesc.StartsWith("Started by remote host", StringComparison.CurrentCultureIgnoreCase)) + { + cause.Cause = BuildCauseEnum.RemoteHost; + string startedBy = @"Started by remote host "; + string remoteHost = causeShortDesc.Remove(0, startedBy.Length); + int index = remoteHost.IndexOf(" with note: "); + cause.Starter = index > 0 ? remoteHost.Remove(index) : remoteHost; + } + else + { + cause.Cause = BuildCauseEnum.Unknown; + } + if (res.Causes.HasUniqueCauses == null) + { + causeEnum = cause.Cause; + res.Causes.HasUniqueCauses = true; + } + else + { + if (cause.Cause != causeEnum) + res.Causes.HasUniqueCauses = false; + } + res.Causes.Causes.Add(cause); + } + } + } +} diff --git a/HudsonTrayTracker/Entities/BuildDetails.cs b/JenkinsTray/Entities/BuildDetails.cs similarity index 92% rename from HudsonTrayTracker/Entities/BuildDetails.cs rename to JenkinsTray/Entities/BuildDetails.cs index 9b0e954..4cf7198 100644 --- a/HudsonTrayTracker/Entities/BuildDetails.cs +++ b/JenkinsTray/Entities/BuildDetails.cs @@ -1,23 +1,23 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Diagnostics; -using Iesi.Collections.Generic; - -namespace Hudson.TrayTracker.Entities -{ - [DebuggerDisplay("BuildNumber={Number}, Result={Result}")] - public class BuildDetails - { - public BuildCauses Causes { get; set; } - public int Number { get; set; } - public string Url { get; set; } - public string DisplayName { get; set; } - public DateTime Time { get; set; } - public TimeSpan EstimatedDuration { get; set; } - public TimeSpan Duration { get; set; } - public BuildStatusEnum Result { get; set; } - public ISet Users { get; set; } - public ClaimDetails ClaimDetails { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; +using Iesi.Collections.Generic; + +namespace Jenkins.Tray.Entities +{ + [DebuggerDisplay("BuildNumber={Number}, Result={Result}")] + public class BuildDetails + { + public BuildCauses Causes { get; set; } + public int Number { get; set; } + public string Url { get; set; } + public string DisplayName { get; set; } + public DateTime Time { get; set; } + public TimeSpan EstimatedDuration { get; set; } + public TimeSpan Duration { get; set; } + public BuildStatusEnum Result { get; set; } + public ISet Users { get; set; } + public ClaimDetails ClaimDetails { get; set; } + } +} diff --git a/HudsonTrayTracker/Entities/BuildStatus.cs b/JenkinsTray/Entities/BuildStatus.cs similarity index 95% rename from HudsonTrayTracker/Entities/BuildStatus.cs rename to JenkinsTray/Entities/BuildStatus.cs index 83248e1..dc2b272 100644 --- a/HudsonTrayTracker/Entities/BuildStatus.cs +++ b/JenkinsTray/Entities/BuildStatus.cs @@ -1,126 +1,126 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Diagnostics; - -namespace Hudson.TrayTracker.Entities -{ - public enum BuildStatusEnum - { - Unknown, - Disabled, - Aborted, - Successful, - Indeterminate, - Unstable, - Failed, - } - - [DebuggerDisplay("Status={Value}, InProgress={IsInProgress}, Stuck={IsStuck}")] - public class BuildStatus - { - public static readonly BuildStatus UNKNOWN_BUILD_STATUS = new BuildStatus(BuildStatusEnum.Unknown, false, false); - - public readonly BuildStatusEnum Value; - public readonly bool IsInProgress; - public readonly bool IsStuck; - - private static readonly string SUCCESS = "success"; - private static readonly string FAILURE = "failure"; - private static readonly string UNSTABLE = "unstable"; - private static readonly string ABORTED = "aborted"; - - public BuildStatus(BuildStatusEnum value, bool isInProgress, bool isStuck) - { - this.Value = value; - this.IsInProgress = isInProgress; - this.IsStuck = isStuck; - } - - // http://javadoc.jenkins-ci.org/hudson/model/Result.html - public static BuildStatusEnum StringToBuildStatus(string result) - { - BuildStatusEnum status = BuildStatusEnum.Unknown; - - result = result.ToLower(); - if (result == SUCCESS) - { - status = BuildStatusEnum.Successful; - } - else if (result == FAILURE) - { - status = BuildStatusEnum.Failed; - } - else if (result == UNSTABLE) - { - status = BuildStatusEnum.Unstable; - } - else if (result == ABORTED) - { - status = BuildStatusEnum.Aborted; - } - return status; - } - - public string Key - { - get - { - string res = Value.ToString(); - if (IsInProgress) - res += "_BuildInProgress"; - if (IsStuck) - res += "_Stuck"; - return res; - } - } - - public override string ToString() - { - string toString = null; - - switch (this.Value) - { - case BuildStatusEnum.Successful: - toString = SUCCESS; - break; - case BuildStatusEnum.Failed: - toString = FAILURE; - break; - case BuildStatusEnum.Unstable: - toString = UNSTABLE; - break; - case BuildStatusEnum.Aborted: - toString = ABORTED; - break; - default: - toString = base.ToString(); - break; - } - return toString; - } - } - - public static class BuildStatusUtils - { - public static bool IsWorse(BuildStatus status, BuildStatus thanStatus) - { - bool res = status.Value > thanStatus.Value; - return res; - } - - public static BuildStatus DegradeStatus(BuildStatus status) - { - return new BuildStatus(status.Value, false, status.IsStuck); - } - - public static bool IsErrorBuild(BuildStatus status) - { - return IsErrorBuild(status.Value); - } - public static bool IsErrorBuild(BuildStatusEnum status) - { - return status == BuildStatusEnum.Failed; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +namespace Jenkins.Tray.Entities +{ + public enum BuildStatusEnum + { + Unknown, + Disabled, + Aborted, + Successful, + Indeterminate, + Unstable, + Failed, + } + + [DebuggerDisplay("Status={Value}, InProgress={IsInProgress}, Stuck={IsStuck}")] + public class BuildStatus + { + public static readonly BuildStatus UNKNOWN_BUILD_STATUS = new BuildStatus(BuildStatusEnum.Unknown, false, false); + + public readonly BuildStatusEnum Value; + public readonly bool IsInProgress; + public readonly bool IsStuck; + + private static readonly string SUCCESS = "success"; + private static readonly string FAILURE = "failure"; + private static readonly string UNSTABLE = "unstable"; + private static readonly string ABORTED = "aborted"; + + public BuildStatus(BuildStatusEnum value, bool isInProgress, bool isStuck) + { + this.Value = value; + this.IsInProgress = isInProgress; + this.IsStuck = isStuck; + } + + // http://javadoc.jenkins-ci.org/hudson/model/Result.html + public static BuildStatusEnum StringToBuildStatus(string result) + { + BuildStatusEnum status = BuildStatusEnum.Unknown; + + result = result.ToLower(); + if (result == SUCCESS) + { + status = BuildStatusEnum.Successful; + } + else if (result == FAILURE) + { + status = BuildStatusEnum.Failed; + } + else if (result == UNSTABLE) + { + status = BuildStatusEnum.Unstable; + } + else if (result == ABORTED) + { + status = BuildStatusEnum.Aborted; + } + return status; + } + + public string Key + { + get + { + string res = Value.ToString(); + if (IsInProgress) + res += "_BuildInProgress"; + if (IsStuck) + res += "_Stuck"; + return res; + } + } + + public override string ToString() + { + string toString = null; + + switch (this.Value) + { + case BuildStatusEnum.Successful: + toString = SUCCESS; + break; + case BuildStatusEnum.Failed: + toString = FAILURE; + break; + case BuildStatusEnum.Unstable: + toString = UNSTABLE; + break; + case BuildStatusEnum.Aborted: + toString = ABORTED; + break; + default: + toString = base.ToString(); + break; + } + return toString; + } + } + + public static class BuildStatusUtils + { + public static bool IsWorse(BuildStatus status, BuildStatus thanStatus) + { + bool res = status.Value > thanStatus.Value; + return res; + } + + public static BuildStatus DegradeStatus(BuildStatus status) + { + return new BuildStatus(status.Value, false, status.IsStuck); + } + + public static bool IsErrorBuild(BuildStatus status) + { + return IsErrorBuild(status.Value); + } + public static bool IsErrorBuild(BuildStatusEnum status) + { + return status == BuildStatusEnum.Failed; + } + } +} diff --git a/HudsonTrayTracker/Entities/BuildTransition.cs b/JenkinsTray/Entities/BuildTransition.cs similarity index 98% rename from HudsonTrayTracker/Entities/BuildTransition.cs rename to JenkinsTray/Entities/BuildTransition.cs index d7abf58..c58b427 100644 --- a/HudsonTrayTracker/Entities/BuildTransition.cs +++ b/JenkinsTray/Entities/BuildTransition.cs @@ -4,7 +4,7 @@ using System.Text; using System.Windows.Forms; -namespace Hudson.TrayTracker.Entities +namespace Jenkins.Tray.Entities { public class BuildTransition { diff --git a/HudsonTrayTracker/Entities/ClaimDetails.cs b/JenkinsTray/Entities/ClaimDetails.cs similarity index 82% rename from HudsonTrayTracker/Entities/ClaimDetails.cs rename to JenkinsTray/Entities/ClaimDetails.cs index 9fc136e..cce2ab3 100644 --- a/HudsonTrayTracker/Entities/ClaimDetails.cs +++ b/JenkinsTray/Entities/ClaimDetails.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Iesi.Collections.Generic; - -namespace Hudson.TrayTracker.Entities -{ - public class ClaimDetails - { - public string User { get; set; } - public string Reason { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Iesi.Collections.Generic; + +namespace Jenkins.Tray.Entities +{ + public class ClaimDetails + { + public string User { get; set; } + public string Reason { get; set; } + } +} diff --git a/HudsonTrayTracker/Entities/Configuration.cs b/JenkinsTray/Entities/Configuration.cs similarity index 86% rename from HudsonTrayTracker/Entities/Configuration.cs rename to JenkinsTray/Entities/Configuration.cs index b404ffa..dece249 100644 --- a/HudsonTrayTracker/Entities/Configuration.cs +++ b/JenkinsTray/Entities/Configuration.cs @@ -1,30 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Iesi.Collections.Generic; -using Newtonsoft.Json; -using Hudson.TrayTracker.Utils.Serialization; - -namespace Hudson.TrayTracker.Entities -{ - [JsonObject(MemberSerialization.OptIn)] - public class Configuration - { - [JsonProperty("servers")] - public ISet Servers { get; set; } - - [JsonProperty("notificationSettings")] - public NotificationSettings NotificationSettings { get; set; } - - [JsonProperty("generalSettings")] - public GeneralSettings GeneralSettings { get; set; } - - public Configuration() - { - Servers = new HashedSet(); - NotificationSettings = new NotificationSettings(); - GeneralSettings = new GeneralSettings(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Iesi.Collections.Generic; +using Newtonsoft.Json; +using Jenkins.Tray.Utils.Serialization; + +namespace Jenkins.Tray.Entities +{ + [JsonObject(MemberSerialization.OptIn)] + public class Configuration + { + [JsonProperty("servers")] + public ISet Servers { get; set; } + + [JsonProperty("notificationSettings")] + public NotificationSettings NotificationSettings { get; set; } + + [JsonProperty("generalSettings")] + public GeneralSettings GeneralSettings { get; set; } + + public Configuration() + { + Servers = new HashedSet(); + NotificationSettings = new NotificationSettings(); + GeneralSettings = new GeneralSettings(); + } + } +} diff --git a/HudsonTrayTracker/Entities/Credentials.cs b/JenkinsTray/Entities/Credentials.cs similarity index 89% rename from HudsonTrayTracker/Entities/Credentials.cs rename to JenkinsTray/Entities/Credentials.cs index d876b5c..271415d 100644 --- a/HudsonTrayTracker/Entities/Credentials.cs +++ b/JenkinsTray/Entities/Credentials.cs @@ -1,26 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Hudson.TrayTracker.Entities -{ - public class Credentials - { - public string Username { get; set; } - public string Password { get; set; } - - public Credentials() - { - } - - public Credentials(string username, string password) - { - if (username == null) - throw new ArgumentNullException("username"); - if (password == null) - password = ""; - this.Username = username; - this.Password = password; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace Jenkins.Tray.Entities +{ + public class Credentials + { + public string Username { get; set; } + public string Password { get; set; } + + public Credentials() + { + } + + public Credentials(string username, string password) + { + if (username == null) + throw new ArgumentNullException("username"); + if (password == null) + password = ""; + this.Username = username; + this.Password = password; + } + } +} diff --git a/HudsonTrayTracker/Entities/GeneralSettings.cs b/JenkinsTray/Entities/GeneralSettings.cs similarity index 88% rename from HudsonTrayTracker/Entities/GeneralSettings.cs rename to JenkinsTray/Entities/GeneralSettings.cs index 9ac45a8..4956a04 100644 --- a/HudsonTrayTracker/Entities/GeneralSettings.cs +++ b/JenkinsTray/Entities/GeneralSettings.cs @@ -1,36 +1,36 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Newtonsoft.Json; -using Hudson.TrayTracker.BusinessComponents; - -namespace Hudson.TrayTracker.Entities -{ - [JsonObject(MemberSerialization.OptIn)] - public class GeneralSettings - { - // 15 seconds - const int DEFAULT_TIME_BETWEEN_UPDATES = 15; - - [JsonProperty("refreshIntervalInSeconds")] - public int RefreshIntervalInSeconds { get; set; } - - [JsonProperty("updateMainWindowIcon")] - public bool UpdateMainWindowIcon { get; set; } - - [JsonProperty("integrateWithClaimPlugin")] - public bool IntegrateWithClaimPlugin { get; set; } - - [JsonProperty("checkForUpdates")] - public bool CheckForUpdates { get; set; } - - public ApplicationUpdateService ApplicationUpdateService { get; set; } - - public GeneralSettings() - { - RefreshIntervalInSeconds = DEFAULT_TIME_BETWEEN_UPDATES; - CheckForUpdates = true; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using Jenkins.Tray.BusinessComponents; + +namespace Jenkins.Tray.Entities +{ + [JsonObject(MemberSerialization.OptIn)] + public class GeneralSettings + { + // 15 seconds + const int DEFAULT_TIME_BETWEEN_UPDATES = 15; + + [JsonProperty("refreshIntervalInSeconds")] + public int RefreshIntervalInSeconds { get; set; } + + [JsonProperty("updateMainWindowIcon")] + public bool UpdateMainWindowIcon { get; set; } + + [JsonProperty("integrateWithClaimPlugin")] + public bool IntegrateWithClaimPlugin { get; set; } + + [JsonProperty("checkForUpdates")] + public bool CheckForUpdates { get; set; } + + public ApplicationUpdateService ApplicationUpdateService { get; set; } + + public GeneralSettings() + { + RefreshIntervalInSeconds = DEFAULT_TIME_BETWEEN_UPDATES; + CheckForUpdates = true; + } + } +} diff --git a/HudsonTrayTracker/Entities/NotificationSettings.cs b/JenkinsTray/Entities/NotificationSettings.cs similarity index 91% rename from HudsonTrayTracker/Entities/NotificationSettings.cs rename to JenkinsTray/Entities/NotificationSettings.cs index 6d00678..ae06d9a 100644 --- a/HudsonTrayTracker/Entities/NotificationSettings.cs +++ b/JenkinsTray/Entities/NotificationSettings.cs @@ -1,25 +1,25 @@ -using Newtonsoft.Json; -namespace Hudson.TrayTracker.Entities -{ - [JsonObject(MemberSerialization.OptIn)] - public class NotificationSettings - { - [JsonProperty("soundNotifications")] - public bool SoundNotifications { get; set; } - - [JsonProperty("failedSoundPath")] - public string FailedSoundPath { get; set; } - - [JsonProperty("succeededSoundPath")] - public string SucceededSoundPath { get; set; } - - [JsonProperty("stillFailingSoundPath")] - public string StillFailingSoundPath { get; set; } - - [JsonProperty("fixedSoundPath")] - public string FixedSoundPath { get; set; } - - [JsonProperty("treatUnstableAsFailed")] - public bool TreatUnstableAsFailed { get; set; } - } -} +using Newtonsoft.Json; +namespace Jenkins.Tray.Entities +{ + [JsonObject(MemberSerialization.OptIn)] + public class NotificationSettings + { + [JsonProperty("soundNotifications")] + public bool SoundNotifications { get; set; } + + [JsonProperty("failedSoundPath")] + public string FailedSoundPath { get; set; } + + [JsonProperty("succeededSoundPath")] + public string SucceededSoundPath { get; set; } + + [JsonProperty("stillFailingSoundPath")] + public string StillFailingSoundPath { get; set; } + + [JsonProperty("fixedSoundPath")] + public string FixedSoundPath { get; set; } + + [JsonProperty("treatUnstableAsFailed")] + public bool TreatUnstableAsFailed { get; set; } + } +} diff --git a/HudsonTrayTracker/Entities/Project.cs b/JenkinsTray/Entities/Project.cs similarity index 95% rename from HudsonTrayTracker/Entities/Project.cs rename to JenkinsTray/Entities/Project.cs index 62e42d6..cdeee0d 100644 --- a/HudsonTrayTracker/Entities/Project.cs +++ b/JenkinsTray/Entities/Project.cs @@ -1,146 +1,146 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Newtonsoft.Json; - -namespace Hudson.TrayTracker.Entities -{ - [JsonObject(MemberSerialization.OptIn)] - public class Project : IComparable - { - public class QueueItem - { - public bool InQueue { get; set; } - public DateTime InQueueSince { get; set; } - public string Why { get; set; } - } - - public Server Server { get; set; } - - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("url")] - public string Url { get; set; } - - [JsonProperty("acknowledged")] - public bool IsAcknowledged { get; set; } - - [JsonProperty("token")] - public string AuthenticationToken { get; set; } - - [JsonProperty("causetext")] - public string CauseText { get; set; } - - public AllBuildDetails AllBuildDetails { get; set; } - public ProjectActivity Activity { get; set; } - public QueueItem Queue { get; set; } - - public Project() - { - Queue = new QueueItem(); - Activity = new ProjectActivity(this); - } - - public BuildStatus Status - { - get - { - // get a copy of the reference to avoid a race condition - AllBuildDetails details = this.AllBuildDetails; - if (details == null) - return BuildStatus.UNKNOWN_BUILD_STATUS; - return details.Status; - } - } - - public BuildStatusEnum StatusValue - { - get { return Status.Value; } - } - - public BuildStatus PreviousStatus - { - set - { - if (this.AllBuildDetails != null) - { - this.AllBuildDetails.PreviousStatus = value; - } - } - get - { - // get a copy of the reference to avoid a race condition - AllBuildDetails details = this.AllBuildDetails; - if (details == null) - return BuildStatus.UNKNOWN_BUILD_STATUS; - return details.PreviousStatus; - } - } - - public BuildStatusEnum PreviousStatusValue - { - get { return PreviousStatus.Value; } - } - - public BuildDetails LastBuild - { - get - { - // get a copy of the reference to avoid a race condition - AllBuildDetails details = this.AllBuildDetails; - if (details == null) - return null; - return details.LastBuild; - } - } - - public BuildDetails LastSuccessfulBuild - { - get - { - // get a copy of the reference to avoid a race condition - AllBuildDetails details = this.AllBuildDetails; - if (details == null) - return null; - return details.LastSuccessfulBuild; - } - } - - public BuildDetails LastFailedBuild - { - get - { - // get a copy of the reference to avoid a race condition - AllBuildDetails details = this.AllBuildDetails; - if (details == null) - return null; - return details.LastFailedBuild; - } - } - - public override int GetHashCode() - { - return Name.GetHashCode(); - } - - public override bool Equals(object obj) - { - Project other = obj as Project; - if (other == null) - return false; - return other.Server.Equals(Server) - && other.Name == Name; - } - - public override string ToString() - { - return Name; - } - - public int CompareTo(Project other) - { - return Name.CompareTo(other.Name); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json; + +namespace Jenkins.Tray.Entities +{ + [JsonObject(MemberSerialization.OptIn)] + public class Project : IComparable + { + public class QueueItem + { + public bool InQueue { get; set; } + public DateTime InQueueSince { get; set; } + public string Why { get; set; } + } + + public Server Server { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("acknowledged")] + public bool IsAcknowledged { get; set; } + + [JsonProperty("token")] + public string AuthenticationToken { get; set; } + + [JsonProperty("causetext")] + public string CauseText { get; set; } + + public AllBuildDetails AllBuildDetails { get; set; } + public ProjectActivity Activity { get; set; } + public QueueItem Queue { get; set; } + + public Project() + { + Queue = new QueueItem(); + Activity = new ProjectActivity(this); + } + + public BuildStatus Status + { + get + { + // get a copy of the reference to avoid a race condition + AllBuildDetails details = this.AllBuildDetails; + if (details == null) + return BuildStatus.UNKNOWN_BUILD_STATUS; + return details.Status; + } + } + + public BuildStatusEnum StatusValue + { + get { return Status.Value; } + } + + public BuildStatus PreviousStatus + { + set + { + if (this.AllBuildDetails != null) + { + this.AllBuildDetails.PreviousStatus = value; + } + } + get + { + // get a copy of the reference to avoid a race condition + AllBuildDetails details = this.AllBuildDetails; + if (details == null) + return BuildStatus.UNKNOWN_BUILD_STATUS; + return details.PreviousStatus; + } + } + + public BuildStatusEnum PreviousStatusValue + { + get { return PreviousStatus.Value; } + } + + public BuildDetails LastBuild + { + get + { + // get a copy of the reference to avoid a race condition + AllBuildDetails details = this.AllBuildDetails; + if (details == null) + return null; + return details.LastBuild; + } + } + + public BuildDetails LastSuccessfulBuild + { + get + { + // get a copy of the reference to avoid a race condition + AllBuildDetails details = this.AllBuildDetails; + if (details == null) + return null; + return details.LastSuccessfulBuild; + } + } + + public BuildDetails LastFailedBuild + { + get + { + // get a copy of the reference to avoid a race condition + AllBuildDetails details = this.AllBuildDetails; + if (details == null) + return null; + return details.LastFailedBuild; + } + } + + public override int GetHashCode() + { + return Name.GetHashCode(); + } + + public override bool Equals(object obj) + { + Project other = obj as Project; + if (other == null) + return false; + return other.Server.Equals(Server) + && other.Name == Name; + } + + public override string ToString() + { + return Name; + } + + public int CompareTo(Project other) + { + return Name.CompareTo(other.Name); + } + } +} diff --git a/HudsonTrayTracker/Entities/ProjectActivity.cs b/JenkinsTray/Entities/ProjectActivity.cs similarity index 98% rename from HudsonTrayTracker/Entities/ProjectActivity.cs rename to JenkinsTray/Entities/ProjectActivity.cs index e9ce44e..62c8694 100644 --- a/HudsonTrayTracker/Entities/ProjectActivity.cs +++ b/JenkinsTray/Entities/ProjectActivity.cs @@ -6,9 +6,9 @@ using System.Diagnostics; using Common.Logging; using System.Reflection; -using Hudson.TrayTracker.Utils; +using Jenkins.Tray.Utils; -namespace Hudson.TrayTracker.Entities +namespace Jenkins.Tray.Entities { public class CaptionAndMessage { @@ -122,7 +122,7 @@ public CaptionAndMessage ActivityDetails case BuildCauseEnum.SCM: if (lastBuild.Users.Count() == 1) { - Source = string.Format(" (commits by {0})", StringUtils.Join(lastBuild.Users, HudsonTrayTrackerResources.BuildDetails_UserSeparator)); + Source = string.Format(" (commits by {0})", StringUtils.Join(lastBuild.Users, JenkinsTrayResources.BuildDetails_UserSeparator)); } else { diff --git a/HudsonTrayTracker/Entities/Server.cs b/JenkinsTray/Entities/Server.cs similarity index 90% rename from HudsonTrayTracker/Entities/Server.cs rename to JenkinsTray/Entities/Server.cs index 9df2a5d..d8282bc 100644 --- a/HudsonTrayTracker/Entities/Server.cs +++ b/JenkinsTray/Entities/Server.cs @@ -1,57 +1,57 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Iesi.Collections.Generic; -using Newtonsoft.Json; -using Hudson.TrayTracker.Utils.Serialization; - -namespace Hudson.TrayTracker.Entities -{ - [JsonObject(MemberSerialization.OptIn)] - public class Server - { - [JsonProperty("url")] - public string Url { get; set; } - - [JsonProperty("displayName")] - public string DisplayName { get; set; } - - [JsonProperty("credentials")] - [JsonConverter(typeof(CredentialsJsonConverter))] - public Credentials Credentials { get; set; } - - [JsonProperty("ignoreUntrustedCertificate")] - public bool IgnoreUntrustedCertificate { get; set; } - - [JsonProperty("projects")] - public ISet Projects { get; private set; } - - public string DisplayText - { - get { return String.IsNullOrEmpty(DisplayName) ? Url : DisplayName; } - } - - public Server() - { - Projects = new HashedSet(); - } - - public override int GetHashCode() - { - return Url.GetHashCode(); - } - - public override bool Equals(object obj) - { - Server other = obj as Server; - if (other == null) - return false; - return other.Url == Url; - } - - public override string ToString() - { - return Url; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Iesi.Collections.Generic; +using Newtonsoft.Json; +using Jenkins.Tray.Utils.Serialization; + +namespace Jenkins.Tray.Entities +{ + [JsonObject(MemberSerialization.OptIn)] + public class Server + { + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("displayName")] + public string DisplayName { get; set; } + + [JsonProperty("credentials")] + [JsonConverter(typeof(CredentialsJsonConverter))] + public Credentials Credentials { get; set; } + + [JsonProperty("ignoreUntrustedCertificate")] + public bool IgnoreUntrustedCertificate { get; set; } + + [JsonProperty("projects")] + public ISet Projects { get; private set; } + + public string DisplayText + { + get { return String.IsNullOrEmpty(DisplayName) ? Url : DisplayName; } + } + + public Server() + { + Projects = new HashedSet(); + } + + public override int GetHashCode() + { + return Url.GetHashCode(); + } + + public override bool Equals(object obj) + { + Server other = obj as Server; + if (other == null) + return false; + return other.Url == Url; + } + + public override string ToString() + { + return Url; + } + } +} diff --git a/HudsonTrayTracker/HudsonTrayTracker.csproj b/JenkinsTray/JenkinsTray.csproj similarity index 95% rename from HudsonTrayTracker/HudsonTrayTracker.csproj rename to JenkinsTray/JenkinsTray.csproj index 249c032..0f2c00c 100644 --- a/HudsonTrayTracker/HudsonTrayTracker.csproj +++ b/JenkinsTray/JenkinsTray.csproj @@ -1,477 +1,477 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {A54602CA-6823-4F2C-870F-1D464D9F4814} - WinExe - Properties - Hudson.TrayTracker - JenkinsTray - Hudson.TrayTracker.Program - - - - - 3.5 - v3.5 - http://localhost/HudsonTrayTracker/ - true - Web - true - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - true - false - true - HudsonTrayTracker.ico - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - - - - False - ..\lib\Spring\antlr.runtime.dll - - - False - ..\lib\Common.Logging\Common.Logging.dll - - - False - ..\lib\Common.Logging\Common.Logging.Log4Net.dll - - - False - ..\lib\DevExpress\DevExpress.Data.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.OfficeSkins.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.Utils.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraBars.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraBars.v10.1.Design.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraEditors.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraEditors.v10.1.Design.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraGrid.v10.1.dll - True - - - False - ..\lib\DevExpress\DevExpress.XtraGrid.v10.1.Design.dll - True - - - False - ..\lib\Iesi.Collections\Iesi.Collections.dll - - - False - ..\lib\Log4Net\log4net.dll - - - False - ..\lib\Json.NET\Newtonsoft.Json.Net35.dll - - - False - ..\lib\SmartThreadPool\SmartThreadPool.dll - - - False - ..\lib\Spring\Spring.Core.dll - - - - 3.5 - - - - - - - 3.0 - - - 3.5 - - - - - - - - Properties\VersionInfo.cs - - - - - - - - - - - - - Component - - - - - - - - - - - - - - Form - - - AboutForm.cs - - - Form - - - ClaimBuildForm.cs - - - UserControl - - - ProjectListControl.cs - - - UserControl - - - ServerListControl.cs - - - UserControl - - - NotificationSettingsControl.cs - - - UserControl - - - NotificationsSettingsControl.cs - - - UserControl - - - ServersSettingsControl.cs - - - - Form - - - AuthenticationTokenForm.cs - - - Form - - - MainForm.cs - - - True - True - HudsonTrayTrackerResources.resx - - - Form - - - SettingsForm.cs - - - Form - - - EditServerForm.cs - - - - - AuthenticationTokenForm.cs - - - Designer - MainForm.cs - - - Designer - ResXFileCodeGenerator - HudsonTrayTrackerResources.Designer.cs - - - Designer - SettingsForm.cs - - - EditServerForm.cs - Designer - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - Component - - - TrayNotifier.cs - - - - - - - - - - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - AboutForm.cs - - - Designer - TrayNotifier.cs - - - - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ClaimBuildForm.cs - - - ProjectListControl.cs - Designer - - - ServerListControl.cs - Designer - - - Designer - NotificationSettingsControl.cs - - - Designer - NotificationsSettingsControl.cs - - - Designer - ServersSettingsControl.cs - - - - - False - .NET Framework Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {A54602CA-6823-4F2C-870F-1D464D9F4814} + WinExe + Properties + Jenkins.Tray + JenkinsTray + Jenkins.Tray.Program + + + + + 3.5 + v3.5 + http://localhost/JenkinsTray/ + true + Web + true + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + true + false + true + JenkinsTray.ico + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + + + + False + ..\lib\Spring\antlr.runtime.dll + + + False + ..\lib\Common.Logging\Common.Logging.dll + + + False + ..\lib\Common.Logging\Common.Logging.Log4Net.dll + + + False + ..\lib\DevExpress\DevExpress.Data.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.OfficeSkins.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.Utils.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraBars.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraBars.v10.1.Design.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraEditors.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraEditors.v10.1.Design.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraGrid.v10.1.dll + True + + + False + ..\lib\DevExpress\DevExpress.XtraGrid.v10.1.Design.dll + True + + + False + ..\lib\Iesi.Collections\Iesi.Collections.dll + + + False + ..\lib\Log4Net\log4net.dll + + + False + ..\lib\Json.NET\Newtonsoft.Json.Net35.dll + + + False + ..\lib\SmartThreadPool\SmartThreadPool.dll + + + False + ..\lib\Spring\Spring.Core.dll + + + + 3.5 + + + + + + + 3.0 + + + 3.5 + + + + + + + + Properties\VersionInfo.cs + + + + + + + + + + + + + Component + + + + + + + + + + + + + + Form + + + AboutForm.cs + + + Form + + + ClaimBuildForm.cs + + + UserControl + + + ProjectListControl.cs + + + UserControl + + + ServerListControl.cs + + + UserControl + + + NotificationSettingsControl.cs + + + UserControl + + + NotificationsSettingsControl.cs + + + UserControl + + + ServersSettingsControl.cs + + + + Form + + + AuthenticationTokenForm.cs + + + Form + + + MainForm.cs + + + True + True + JenkinsTrayResources.resx + + + Form + + + SettingsForm.cs + + + Form + + + EditServerForm.cs + + + + + AuthenticationTokenForm.cs + + + Designer + MainForm.cs + + + Designer + ResXFileCodeGenerator + JenkinsTrayResources.Designer.cs + + + Designer + SettingsForm.cs + + + EditServerForm.cs + Designer + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Component + + + TrayNotifier.cs + + + + + + + + + + + + + + + + + + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + AboutForm.cs + + + Designer + TrayNotifier.cs + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ClaimBuildForm.cs + + + ProjectListControl.cs + Designer + + + ServerListControl.cs + Designer + + + Designer + NotificationSettingsControl.cs + + + Designer + NotificationsSettingsControl.cs + + + Designer + ServersSettingsControl.cs + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/HudsonTrayTracker/HudsonTrayTracker.ico b/JenkinsTray/JenkinsTray.ico similarity index 100% rename from HudsonTrayTracker/HudsonTrayTracker.ico rename to JenkinsTray/JenkinsTray.ico diff --git a/HudsonTrayTracker/HudsonTrayTrackerResources.Designer.cs b/JenkinsTray/JenkinsTrayResources.Designer.cs similarity index 96% rename from HudsonTrayTracker/HudsonTrayTrackerResources.Designer.cs rename to JenkinsTray/JenkinsTrayResources.Designer.cs index 7369a29..b9b6114 100644 --- a/HudsonTrayTracker/HudsonTrayTrackerResources.Designer.cs +++ b/JenkinsTray/JenkinsTrayResources.Designer.cs @@ -1,706 +1,706 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.34014 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Hudson.TrayTracker { - 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", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class HudsonTrayTrackerResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal HudsonTrayTrackerResources() { - } - - /// - /// 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("Hudson.TrayTracker.HudsonTrayTrackerResources", typeof(HudsonTrayTrackerResources).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 string similar to Jenkins Tray updates. - /// - internal static string ApplicationUpdates_Caption { - get { - return ResourceManager.GetString("ApplicationUpdates_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A new version is available: v{0}. - /// - ///Do you want to download the update now (the application will close) ?. - /// - internal static string ApplicationUpdates_NewVersion_Text { - get { - return ResourceManager.GetString("ApplicationUpdates_NewVersion_Text", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No update available.. - /// - internal static string ApplicationUpdates_NoUpdate_Text { - get { - return ResourceManager.GetString("ApplicationUpdates_NoUpdate_Text", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Project: {0}. - /// - internal static string AuthenticateToken_ProjectName { - get { - return ResourceManager.GetString("AuthenticateToken_ProjectName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Broken by {0}. . - /// - internal static string BuildDetails_BrokenBy { - get { - return ResourceManager.GetString("BuildDetails_BrokenBy", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started by multiple sources. . - /// - internal static string BuildDetails_Cause_MultipleSources { - get { - return ResourceManager.GetString("BuildDetails_Cause_MultipleSources", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started remotely. . - /// - internal static string BuildDetails_Cause_RemoteHost { - get { - return ResourceManager.GetString("BuildDetails_Cause_RemoteHost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started by SCM change. . - /// - internal static string BuildDetails_Cause_SCM { - get { - return ResourceManager.GetString("BuildDetails_Cause_SCM", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Changes by {0} persons. . - /// - internal static string BuildDetails_Cause_SCM_Multiple { - get { - return ResourceManager.GetString("BuildDetails_Cause_SCM_Multiple", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Changes by {0}. . - /// - internal static string BuildDetails_Cause_SCM_Single { - get { - return ResourceManager.GetString("BuildDetails_Cause_SCM_Single", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled. . - /// - internal static string BuildDetails_Cause_Timer { - get { - return ResourceManager.GetString("BuildDetails_Cause_Timer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started by upstream project. . - /// - internal static string BuildDetails_Cause_UpstreamProject { - get { - return ResourceManager.GetString("BuildDetails_Cause_UpstreamProject", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started by {0}. . - /// - internal static string BuildDetails_Cause_User { - get { - return ResourceManager.GetString("BuildDetails_Cause_User", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Took less than a minute. . - /// - internal static string BuildDetails_Duration_0M { - get { - return ResourceManager.GetString("BuildDetails_Duration_0M", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Took {0:D1} hour(s) {1:D1} minutes. . - /// - internal static string BuildDetails_Duration_HHMM { - get { - return ResourceManager.GetString("BuildDetails_Duration_HHMM", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Took {0:D1} minutes. . - /// - internal static string BuildDetails_Duration_MM { - get { - return ResourceManager.GetString("BuildDetails_Duration_MM", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:D1} hours {1:D1} minutes longer than usual. . - /// - internal static string BuildDetails_EstimatedDuration_HHMM_LongerThanUsual { - get { - return ResourceManager.GetString("BuildDetails_EstimatedDuration_HHMM_LongerThanUsual", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:D1} hour(s) {1:D1} minutes remaining. . - /// - internal static string BuildDetails_EstimatedDuration_HHMM_Remaining { - get { - return ResourceManager.GetString("BuildDetails_EstimatedDuration_HHMM_Remaining", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:D1} minutes longer than usual. . - /// - internal static string BuildDetails_EstimatedDuration_MM_LongerThanUsual { - get { - return ResourceManager.GetString("BuildDetails_EstimatedDuration_MM_LongerThanUsual", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:D1} minutes remaining. . - /// - internal static string BuildDetails_EstimatedDuration_MM_Remaining { - get { - return ResourceManager.GetString("BuildDetails_EstimatedDuration_MM_Remaining", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} - {1} ({2}). - /// - internal static string BuildDetails_Format_DisplayName_NumberDate { - get { - return ResourceManager.GetString("BuildDetails_Format_DisplayName_NumberDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} ({1}). - /// - internal static string BuildDetails_Format_NumberDate { - get { - return ResourceManager.GetString("BuildDetails_Format_NumberDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} ({1}, {2}). - /// - internal static string BuildDetails_Format_NumberDateUsers { - get { - return ResourceManager.GetString("BuildDetails_Format_NumberDateUsers", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Subsequent build is queued.. - /// - internal static string BuildDetails_InQueue { - get { - return ResourceManager.GetString("BuildDetails_InQueue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to In queue since {0}.. - /// - internal static string BuildDetails_InQueue_Since { - get { - return ResourceManager.GetString("BuildDetails_InQueue_Since", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reason: {0}.. - /// - internal static string BuildDetails_InQueue_Why { - get { - return ResourceManager.GetString("BuildDetails_InQueue_Why", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to , . - /// - internal static string BuildDetails_UserSeparator { - get { - return ResourceManager.GetString("BuildDetails_UserSeparator", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build failed. - /// - internal static string BuildFailed_Caption { - get { - return ResourceManager.GetString("BuildFailed_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Projects regressed. - /// - internal static string BuildRegressions_Caption { - get { - return ResourceManager.GetString("BuildRegressions_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build was aborted. - /// - internal static string BuildStatus_Aborted { - get { - return ResourceManager.GetString("BuildStatus_Aborted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build was aborted. Build is stuck.. - /// - internal static string BuildStatus_Aborted_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Aborted_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Project disabled. - /// - internal static string BuildStatus_Disabled { - get { - return ResourceManager.GetString("BuildStatus_Disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Project disabled. Build in progress.. - /// - internal static string BuildStatus_Disabled_BuildInProgress { - get { - return ResourceManager.GetString("BuildStatus_Disabled_BuildInProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Project disabled. Build is stuck.. - /// - internal static string BuildStatus_Disabled_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Disabled_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build failed. - /// - internal static string BuildStatus_Failed { - get { - return ResourceManager.GetString("BuildStatus_Failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Last build failed. Build in progress.. - /// - internal static string BuildStatus_Failed_BuildInProgress { - get { - return ResourceManager.GetString("BuildStatus_Failed_BuildInProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Last build failed. Build is stuck.. - /// - internal static string BuildStatus_Failed_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Failed_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Indeterminate: no build done.. - /// - internal static string BuildStatus_Indeterminate { - get { - return ResourceManager.GetString("BuildStatus_Indeterminate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Indeterminate: no build done. Build in progress.. - /// - internal static string BuildStatus_Indeterminate_BuildInProgress { - get { - return ResourceManager.GetString("BuildStatus_Indeterminate_BuildInProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Indeterminate: no build done. Build is stuck.. - /// - internal static string BuildStatus_Indeterminate_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Indeterminate_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successful. - /// - internal static string BuildStatus_Successful { - get { - return ResourceManager.GetString("BuildStatus_Successful", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successful. Build in progress.. - /// - internal static string BuildStatus_Successful_BuildInProgress { - get { - return ResourceManager.GetString("BuildStatus_Successful_BuildInProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successful. Build is stuck.. - /// - internal static string BuildStatus_Successful_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Successful_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown status. - /// - internal static string BuildStatus_Unknown { - get { - return ResourceManager.GetString("BuildStatus_Unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unstable: some tests failed.. - /// - internal static string BuildStatus_Unstable { - get { - return ResourceManager.GetString("BuildStatus_Unstable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unstable: some tests failed. Build in progress.. - /// - internal static string BuildStatus_Unstable_BuildInProgress { - get { - return ResourceManager.GetString("BuildStatus_Unstable_BuildInProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unstable: some tests failed. Build is stuck.. - /// - internal static string BuildStatus_Unstable_Stuck { - get { - return ResourceManager.GetString("BuildStatus_Unstable_Stuck", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build status. - /// - internal static string DisplayBuildStatus_Caption { - get { - return ResourceManager.GetString("DisplayBuildStatus_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No projects configured. - /// - internal static string DisplayBuildStatus_NoProjects { - get { - return ResourceManager.GetString("DisplayBuildStatus_NoProjects", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred. - /// - internal static string ErrorBoxCaption { - get { - return ResourceManager.GetString("ErrorBoxCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The following error occurred: - /// - ///Message: {0}. - /// - internal static string ErrorBoxMessage { - get { - return ResourceManager.GetString("ErrorBoxMessage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error. - /// - internal static string FailedLoadingIcons_Caption { - get { - return ResourceManager.GetString("FailedLoadingIcons_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed loading icons for the tray notifier.. - /// - internal static string FailedLoadingIcons_Text { - get { - return ResourceManager.GetString("FailedLoadingIcons_Text", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error loading projects from {0}. - /// - internal static string FailedLoadingProjects_FormatString { - get { - return ResourceManager.GetString("FailedLoadingProjects_FormatString", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A fatal error occurred. - /// - internal static string FatalError_Caption { - get { - return ResourceManager.GetString("FatalError_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fatal error. - /// - ///Please refer to the log files for more details.. - /// - internal static string FatalError_Message { - get { - return ResourceManager.GetString("FatalError_Message", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Last check: {0}. - /// - internal static string LastCheck_Format { - get { - return ResourceManager.GetString("LastCheck_Format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading projects from {0}. - /// - internal static string LoadingProjects_FormatString { - get { - return ResourceManager.GetString("LoadingProjects_FormatString", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build failed. - /// - internal static string NotificationSettings_Failed { - get { - return ResourceManager.GetString("NotificationSettings_Failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build fixed. - /// - internal static string NotificationSettings_Fixed { - get { - return ResourceManager.GetString("NotificationSettings_Fixed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build still failing. - /// - internal static string NotificationSettings_StillFailing { - get { - return ResourceManager.GetString("NotificationSettings_StillFailing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Build succeeded. - /// - internal static string NotificationSettings_Succeeded { - get { - return ResourceManager.GetString("NotificationSettings_Succeeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error. - /// - internal static string RunBuildFailed_Caption { - get { - return ResourceManager.GetString("RunBuildFailed_Caption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed running build: {0}.. - /// - internal static string RunBuildFailed_Text { - get { - return ResourceManager.GetString("RunBuildFailed_Text", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The following error occurred: - /// - ///Type: {0} - ///Message: {1} - /// - ///Please refer to the log files for more details. - /// - ///The application will now be closed.. - /// - internal static string SeriousErrorBoxMessage { - get { - return ResourceManager.GetString("SeriousErrorBoxMessage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All builds are good.. - /// - internal static string Tooltip_AllGood { - get { - return ResourceManager.GetString("Tooltip_AllGood", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: {1}.. - /// - internal static string Tooltip_BuildStatus { - get { - return ResourceManager.GetString("Tooltip_BuildStatus", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Failed and in progress.. - /// - internal static string Tooltip_Failed_And_InProgress { - get { - return ResourceManager.GetString("Tooltip_Failed_And_InProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: In progress.. - /// - internal static string Tooltip_InProgress { - get { - return ResourceManager.GetString("Tooltip_InProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Version {0}. - /// - internal static string Version_Format { - get { - return ResourceManager.GetString("Version_Format", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Jenkins.Tray { + 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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class JenkinsTrayResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal JenkinsTrayResources() { + } + + /// + /// 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("Jenkins.Tray.JenkinsTrayResources", typeof(JenkinsTrayResources).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 string similar to Jenkins Tray updates. + /// + internal static string ApplicationUpdates_Caption { + get { + return ResourceManager.GetString("ApplicationUpdates_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A new version is available: v{0}. + /// + ///Do you want to download the update now (the application will close) ?. + /// + internal static string ApplicationUpdates_NewVersion_Text { + get { + return ResourceManager.GetString("ApplicationUpdates_NewVersion_Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No update available.. + /// + internal static string ApplicationUpdates_NoUpdate_Text { + get { + return ResourceManager.GetString("ApplicationUpdates_NoUpdate_Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Project: {0}. + /// + internal static string AuthenticateToken_ProjectName { + get { + return ResourceManager.GetString("AuthenticateToken_ProjectName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Broken by {0}. . + /// + internal static string BuildDetails_BrokenBy { + get { + return ResourceManager.GetString("BuildDetails_BrokenBy", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started by multiple sources. . + /// + internal static string BuildDetails_Cause_MultipleSources { + get { + return ResourceManager.GetString("BuildDetails_Cause_MultipleSources", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started remotely. . + /// + internal static string BuildDetails_Cause_RemoteHost { + get { + return ResourceManager.GetString("BuildDetails_Cause_RemoteHost", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started by SCM change. . + /// + internal static string BuildDetails_Cause_SCM { + get { + return ResourceManager.GetString("BuildDetails_Cause_SCM", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Changes by {0} persons. . + /// + internal static string BuildDetails_Cause_SCM_Multiple { + get { + return ResourceManager.GetString("BuildDetails_Cause_SCM_Multiple", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Changes by {0}. . + /// + internal static string BuildDetails_Cause_SCM_Single { + get { + return ResourceManager.GetString("BuildDetails_Cause_SCM_Single", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled. . + /// + internal static string BuildDetails_Cause_Timer { + get { + return ResourceManager.GetString("BuildDetails_Cause_Timer", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started by upstream project. . + /// + internal static string BuildDetails_Cause_UpstreamProject { + get { + return ResourceManager.GetString("BuildDetails_Cause_UpstreamProject", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started by {0}. . + /// + internal static string BuildDetails_Cause_User { + get { + return ResourceManager.GetString("BuildDetails_Cause_User", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Took less than a minute. . + /// + internal static string BuildDetails_Duration_0M { + get { + return ResourceManager.GetString("BuildDetails_Duration_0M", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Took {0:D1} hour(s) {1:D1} minutes. . + /// + internal static string BuildDetails_Duration_HHMM { + get { + return ResourceManager.GetString("BuildDetails_Duration_HHMM", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Took {0:D1} minutes. . + /// + internal static string BuildDetails_Duration_MM { + get { + return ResourceManager.GetString("BuildDetails_Duration_MM", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:D1} hours {1:D1} minutes longer than usual. . + /// + internal static string BuildDetails_EstimatedDuration_HHMM_LongerThanUsual { + get { + return ResourceManager.GetString("BuildDetails_EstimatedDuration_HHMM_LongerThanUsual", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:D1} hour(s) {1:D1} minutes remaining. . + /// + internal static string BuildDetails_EstimatedDuration_HHMM_Remaining { + get { + return ResourceManager.GetString("BuildDetails_EstimatedDuration_HHMM_Remaining", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:D1} minutes longer than usual. . + /// + internal static string BuildDetails_EstimatedDuration_MM_LongerThanUsual { + get { + return ResourceManager.GetString("BuildDetails_EstimatedDuration_MM_LongerThanUsual", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:D1} minutes remaining. . + /// + internal static string BuildDetails_EstimatedDuration_MM_Remaining { + get { + return ResourceManager.GetString("BuildDetails_EstimatedDuration_MM_Remaining", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} - {1} ({2}). + /// + internal static string BuildDetails_Format_DisplayName_NumberDate { + get { + return ResourceManager.GetString("BuildDetails_Format_DisplayName_NumberDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} ({1}). + /// + internal static string BuildDetails_Format_NumberDate { + get { + return ResourceManager.GetString("BuildDetails_Format_NumberDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} ({1}, {2}). + /// + internal static string BuildDetails_Format_NumberDateUsers { + get { + return ResourceManager.GetString("BuildDetails_Format_NumberDateUsers", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Subsequent build is queued.. + /// + internal static string BuildDetails_InQueue { + get { + return ResourceManager.GetString("BuildDetails_InQueue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In queue since {0}.. + /// + internal static string BuildDetails_InQueue_Since { + get { + return ResourceManager.GetString("BuildDetails_InQueue_Since", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reason: {0}.. + /// + internal static string BuildDetails_InQueue_Why { + get { + return ResourceManager.GetString("BuildDetails_InQueue_Why", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to , . + /// + internal static string BuildDetails_UserSeparator { + get { + return ResourceManager.GetString("BuildDetails_UserSeparator", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build failed. + /// + internal static string BuildFailed_Caption { + get { + return ResourceManager.GetString("BuildFailed_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Projects regressed. + /// + internal static string BuildRegressions_Caption { + get { + return ResourceManager.GetString("BuildRegressions_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build was aborted. + /// + internal static string BuildStatus_Aborted { + get { + return ResourceManager.GetString("BuildStatus_Aborted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build was aborted. Build is stuck.. + /// + internal static string BuildStatus_Aborted_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Aborted_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Project disabled. + /// + internal static string BuildStatus_Disabled { + get { + return ResourceManager.GetString("BuildStatus_Disabled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Project disabled. Build in progress.. + /// + internal static string BuildStatus_Disabled_BuildInProgress { + get { + return ResourceManager.GetString("BuildStatus_Disabled_BuildInProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Project disabled. Build is stuck.. + /// + internal static string BuildStatus_Disabled_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Disabled_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build failed. + /// + internal static string BuildStatus_Failed { + get { + return ResourceManager.GetString("BuildStatus_Failed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Last build failed. Build in progress.. + /// + internal static string BuildStatus_Failed_BuildInProgress { + get { + return ResourceManager.GetString("BuildStatus_Failed_BuildInProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Last build failed. Build is stuck.. + /// + internal static string BuildStatus_Failed_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Failed_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indeterminate: no build done.. + /// + internal static string BuildStatus_Indeterminate { + get { + return ResourceManager.GetString("BuildStatus_Indeterminate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indeterminate: no build done. Build in progress.. + /// + internal static string BuildStatus_Indeterminate_BuildInProgress { + get { + return ResourceManager.GetString("BuildStatus_Indeterminate_BuildInProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Indeterminate: no build done. Build is stuck.. + /// + internal static string BuildStatus_Indeterminate_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Indeterminate_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Successful. + /// + internal static string BuildStatus_Successful { + get { + return ResourceManager.GetString("BuildStatus_Successful", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Successful. Build in progress.. + /// + internal static string BuildStatus_Successful_BuildInProgress { + get { + return ResourceManager.GetString("BuildStatus_Successful_BuildInProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Successful. Build is stuck.. + /// + internal static string BuildStatus_Successful_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Successful_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown status. + /// + internal static string BuildStatus_Unknown { + get { + return ResourceManager.GetString("BuildStatus_Unknown", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unstable: some tests failed.. + /// + internal static string BuildStatus_Unstable { + get { + return ResourceManager.GetString("BuildStatus_Unstable", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unstable: some tests failed. Build in progress.. + /// + internal static string BuildStatus_Unstable_BuildInProgress { + get { + return ResourceManager.GetString("BuildStatus_Unstable_BuildInProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unstable: some tests failed. Build is stuck.. + /// + internal static string BuildStatus_Unstable_Stuck { + get { + return ResourceManager.GetString("BuildStatus_Unstable_Stuck", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build status. + /// + internal static string DisplayBuildStatus_Caption { + get { + return ResourceManager.GetString("DisplayBuildStatus_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No projects configured. + /// + internal static string DisplayBuildStatus_NoProjects { + get { + return ResourceManager.GetString("DisplayBuildStatus_NoProjects", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error occurred. + /// + internal static string ErrorBoxCaption { + get { + return ResourceManager.GetString("ErrorBoxCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The following error occurred: + /// + ///Message: {0}. + /// + internal static string ErrorBoxMessage { + get { + return ResourceManager.GetString("ErrorBoxMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error. + /// + internal static string FailedLoadingIcons_Caption { + get { + return ResourceManager.GetString("FailedLoadingIcons_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Failed loading icons for the tray notifier.. + /// + internal static string FailedLoadingIcons_Text { + get { + return ResourceManager.GetString("FailedLoadingIcons_Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error loading projects from {0}. + /// + internal static string FailedLoadingProjects_FormatString { + get { + return ResourceManager.GetString("FailedLoadingProjects_FormatString", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A fatal error occurred. + /// + internal static string FatalError_Caption { + get { + return ResourceManager.GetString("FatalError_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fatal error. + /// + ///Please refer to the log files for more details.. + /// + internal static string FatalError_Message { + get { + return ResourceManager.GetString("FatalError_Message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Last check: {0}. + /// + internal static string LastCheck_Format { + get { + return ResourceManager.GetString("LastCheck_Format", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading projects from {0}. + /// + internal static string LoadingProjects_FormatString { + get { + return ResourceManager.GetString("LoadingProjects_FormatString", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build failed. + /// + internal static string NotificationSettings_Failed { + get { + return ResourceManager.GetString("NotificationSettings_Failed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build fixed. + /// + internal static string NotificationSettings_Fixed { + get { + return ResourceManager.GetString("NotificationSettings_Fixed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build still failing. + /// + internal static string NotificationSettings_StillFailing { + get { + return ResourceManager.GetString("NotificationSettings_StillFailing", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Build succeeded. + /// + internal static string NotificationSettings_Succeeded { + get { + return ResourceManager.GetString("NotificationSettings_Succeeded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error. + /// + internal static string RunBuildFailed_Caption { + get { + return ResourceManager.GetString("RunBuildFailed_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Failed running build: {0}.. + /// + internal static string RunBuildFailed_Text { + get { + return ResourceManager.GetString("RunBuildFailed_Text", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The following error occurred: + /// + ///Type: {0} + ///Message: {1} + /// + ///Please refer to the log files for more details. + /// + ///The application will now be closed.. + /// + internal static string SeriousErrorBoxMessage { + get { + return ResourceManager.GetString("SeriousErrorBoxMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to All builds are good.. + /// + internal static string Tooltip_AllGood { + get { + return ResourceManager.GetString("Tooltip_AllGood", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: {1}.. + /// + internal static string Tooltip_BuildStatus { + get { + return ResourceManager.GetString("Tooltip_BuildStatus", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: Failed and in progress.. + /// + internal static string Tooltip_Failed_And_InProgress { + get { + return ResourceManager.GetString("Tooltip_Failed_And_InProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: In progress.. + /// + internal static string Tooltip_InProgress { + get { + return ResourceManager.GetString("Tooltip_InProgress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Version {0}. + /// + internal static string Version_Format { + get { + return ResourceManager.GetString("Version_Format", resourceCulture); + } + } + } +} diff --git a/HudsonTrayTracker/HudsonTrayTrackerResources.resx b/JenkinsTray/JenkinsTrayResources.resx similarity index 97% rename from HudsonTrayTracker/HudsonTrayTrackerResources.resx rename to JenkinsTray/JenkinsTrayResources.resx index 481c4c3..d0e6bde 100644 --- a/HudsonTrayTracker/HudsonTrayTrackerResources.resx +++ b/JenkinsTray/JenkinsTrayResources.resx @@ -1,343 +1,343 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Jenkins Tray updates - - - A new version is available: v{0}. - -Do you want to download the update now (the application will close) ? - - - No update available. - - - {0} ({1}) - - - {0} - {1} ({2}) - - - {0} ({1}, {2}) - - - , - - - Changes by {0}. - - - Changes by {0} persons. - - - Scheduled. - - - Started by {0}. - - - Started by upstream project. - - - Started remotely. - - - Started by multiple sources. - - - {0:D1} hour(s) {1:D1} minutes remaining. - - - {0:D1} minutes remaining. - - - {0:D1} hours {1:D1} minutes longer than usual. - - - {0:D1} minutes longer than usual. - - - Took {0:D1} hour(s) {1:D1} minutes. - - - Took {0:D1} minutes. - - - Build failed - - - Projects regressed - - - Build was aborted - - - Build was aborted. Build is stuck. - - - Build failed - - - Last build failed. Build in progress. - - - Last build failed. Build is stuck. - - - Indeterminate: no build done. - - - Indeterminate: no build done. Build in progress. - - - Indeterminate: no build done. Build is stuck. - - - Successful - - - Successful. Build in progress. - - - Successful. Build is stuck. - - - Project disabled - - - Project disabled. Build in progress. - - - Project disabled. Build is stuck. - - - Unknown status - - - Unstable: some tests failed. - - - Unstable: some tests failed. Build in progress. - - - Unstable: some tests failed. Build is stuck. - - - Build status - - - No projects configured - - - An error occurred - - - The following error occurred: - -Message: {0} - - - Error - - - Failed loading icons for the tray notifier. - - - Error loading projects from {0} - - - A fatal error occurred - - - Fatal error. - -Please refer to the log files for more details. - - - Last check: {0} - - - Loading projects from {0} - - - Build failed - - - Build fixed - - - Build still failing - - - Build succeeded - - - Error - - - Failed running build: {0}. - - - The following error occurred: - -Type: {0} -Message: {1} - -Please refer to the log files for more details. - -The application will now be closed. - - - Version {0} - - - Took less than a minute. - - - Started by SCM change. - - - Broken by {0}. - - - {0}: {1}. - - - {0}: Failed and in progress. - - - {0}: In progress. - - - All builds are good. - - - Project: {0} - - - In queue since {0}. - - - Subsequent build is queued. - - - Reason: {0}. - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Jenkins Tray updates + + + A new version is available: v{0}. + +Do you want to download the update now (the application will close) ? + + + No update available. + + + {0} ({1}) + + + {0} - {1} ({2}) + + + {0} ({1}, {2}) + + + , + + + Changes by {0}. + + + Changes by {0} persons. + + + Scheduled. + + + Started by {0}. + + + Started by upstream project. + + + Started remotely. + + + Started by multiple sources. + + + {0:D1} hour(s) {1:D1} minutes remaining. + + + {0:D1} minutes remaining. + + + {0:D1} hours {1:D1} minutes longer than usual. + + + {0:D1} minutes longer than usual. + + + Took {0:D1} hour(s) {1:D1} minutes. + + + Took {0:D1} minutes. + + + Build failed + + + Projects regressed + + + Build was aborted + + + Build was aborted. Build is stuck. + + + Build failed + + + Last build failed. Build in progress. + + + Last build failed. Build is stuck. + + + Indeterminate: no build done. + + + Indeterminate: no build done. Build in progress. + + + Indeterminate: no build done. Build is stuck. + + + Successful + + + Successful. Build in progress. + + + Successful. Build is stuck. + + + Project disabled + + + Project disabled. Build in progress. + + + Project disabled. Build is stuck. + + + Unknown status + + + Unstable: some tests failed. + + + Unstable: some tests failed. Build in progress. + + + Unstable: some tests failed. Build is stuck. + + + Build status + + + No projects configured + + + An error occurred + + + The following error occurred: + +Message: {0} + + + Error + + + Failed loading icons for the tray notifier. + + + Error loading projects from {0} + + + A fatal error occurred + + + Fatal error. + +Please refer to the log files for more details. + + + Last check: {0} + + + Loading projects from {0} + + + Build failed + + + Build fixed + + + Build still failing + + + Build succeeded + + + Error + + + Failed running build: {0}. + + + The following error occurred: + +Type: {0} +Message: {1} + +Please refer to the log files for more details. + +The application will now be closed. + + + Version {0} + + + Took less than a minute. + + + Started by SCM change. + + + Broken by {0}. + + + {0}: {1}. + + + {0}: Failed and in progress. + + + {0}: In progress. + + + All builds are good. + + + Project: {0} + + + In queue since {0}. + + + Subsequent build is queued. + + + Reason: {0}. + \ No newline at end of file diff --git a/HudsonTrayTracker/Legacy/BusinessComponents/LegacyConfigurationService.cs b/JenkinsTray/Legacy/BusinessComponents/LegacyConfigurationService.cs similarity index 92% rename from HudsonTrayTracker/Legacy/BusinessComponents/LegacyConfigurationService.cs rename to JenkinsTray/Legacy/BusinessComponents/LegacyConfigurationService.cs index b78b7b2..b32a2a4 100644 --- a/HudsonTrayTracker/Legacy/BusinessComponents/LegacyConfigurationService.cs +++ b/JenkinsTray/Legacy/BusinessComponents/LegacyConfigurationService.cs @@ -1,104 +1,104 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Hudson.TrayTracker.Entities; -using Iesi.Collections.Generic; -using Hudson.TrayTracker.Utils.IO; -using System.IO; -using System.Reflection; -using Common.Logging; - -namespace Hudson.TrayTracker.BusinessComponents -{ - [Obsolete] - public class LegacyConfigurationService - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - const string HUDSON_TRAY_TRACKER_DIRECTORY = "Jenkins Tray"; - const string PROPERTIES_FILE = "hudson.properties"; - // 15 seconds - const int DEFAULT_TIME_BETWEEN_UPDATES = 15; - - public Configuration LoadConfiguration() - { - string userAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - string userAppDataPath = PathHelper.Combine(userAppDataDir, HUDSON_TRAY_TRACKER_DIRECTORY); - string userConfigurationFile = PathHelper.Combine(userAppDataPath, PROPERTIES_FILE); - - // create the directory in case it does not exist - Directory.CreateDirectory(userAppDataPath); - - // read the properties file - PropertiesFile propertiesFile = PropertiesFile.ReadPropertiesFile(userConfigurationFile); - - // load the servers - var servers = new HashedSet(); - var serverMap = new Dictionary(); - int serverCount = propertiesFile.GetGroupCount("servers"); - for (int serverId = 0; serverId < serverCount; serverId++) - { - // read the server configuration - Server server = new Server(); - server.Url = propertiesFile.GetGroupRequiredStringValue("servers", serverId, "url"); - server.DisplayName = propertiesFile.GetGroupStringValue("servers", serverId, "displayName"); - server.IgnoreUntrustedCertificate = propertiesFile.GetGroupBoolValue("servers", serverId, "ignoreUntrustedCertificate", false); - - // credentials - string username = propertiesFile.GetGroupStringValue("servers", serverId, "username"); - if (username != null) - { - string passwordBase64 = propertiesFile.GetGroupRequiredStringValue("servers", serverId, "passwordBase64"); - string password = Encoding.UTF8.GetString(Convert.FromBase64String(passwordBase64)); - server.Credentials = new Credentials(username, password); - } - -#if DEBUG//FIXME - server.Credentials = new Credentials("plop", "bam"); -#endif - - // keep the server - servers.Add(server); - - // temporary keep for projects loading - serverMap.Add(serverId, server); - } - - // load the projects - int projectCount = propertiesFile.GetGroupCount("projects"); - for (int projectId = 0; projectId < projectCount; projectId++) - { - // read the project configuration - int serverId = propertiesFile.GetGroupRequiredIntValue("projects", projectId, "server"); - Server server = serverMap[serverId]; - Project project = new Project(); - project.Server = server; - project.Name = propertiesFile.GetGroupRequiredStringValue("projects", projectId, "name"); - project.Url = propertiesFile.GetGroupRequiredStringValue("projects", projectId, "url"); - - // keep the project - server.Projects.Add(project); - } - - var notificationSettings = new NotificationSettings(); - notificationSettings.FailedSoundPath = propertiesFile.GetStringValue("sounds.Failed"); - notificationSettings.FixedSoundPath = propertiesFile.GetStringValue("sounds.Fixed"); - notificationSettings.StillFailingSoundPath = propertiesFile.GetStringValue("sounds.StillFailing"); - notificationSettings.SucceededSoundPath = propertiesFile.GetStringValue("sounds.Succeeded"); - notificationSettings.TreatUnstableAsFailed = propertiesFile.GetBoolValue("sounds.TreatUnstableAsFailed") ?? true; - - var generalSettings = new GeneralSettings(); - generalSettings.RefreshIntervalInSeconds = propertiesFile.GetIntValue("general.RefreshTimeInSeconds", DEFAULT_TIME_BETWEEN_UPDATES); - generalSettings.UpdateMainWindowIcon = propertiesFile.GetBoolValue("general.UpdateMainWindowIcon", true); - generalSettings.IntegrateWithClaimPlugin = propertiesFile.GetBoolValue("general.IntegrateWithClaimPlugin", true); - - var res = new Configuration - { - Servers = servers, - NotificationSettings = notificationSettings, - GeneralSettings = generalSettings - }; - return res; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using Jenkins.Tray.Entities; +using Iesi.Collections.Generic; +using Jenkins.Tray.Utils.IO; +using System.IO; +using System.Reflection; +using Common.Logging; + +namespace Jenkins.Tray.BusinessComponents +{ + [Obsolete] + public class LegacyConfigurationService + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + const string JENKINS_TRAY_DIRECTORY = "Jenkins Tray"; + const string PROPERTIES_FILE = "jenkins.properties"; + // 15 seconds + const int DEFAULT_TIME_BETWEEN_UPDATES = 15; + + public Configuration LoadConfiguration() + { + string userAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string userAppDataPath = PathHelper.Combine(userAppDataDir, JENKINS_TRAY_DIRECTORY); + string userConfigurationFile = PathHelper.Combine(userAppDataPath, PROPERTIES_FILE); + + // create the directory in case it does not exist + Directory.CreateDirectory(userAppDataPath); + + // read the properties file + PropertiesFile propertiesFile = PropertiesFile.ReadPropertiesFile(userConfigurationFile); + + // load the servers + var servers = new HashedSet(); + var serverMap = new Dictionary(); + int serverCount = propertiesFile.GetGroupCount("servers"); + for (int serverId = 0; serverId < serverCount; serverId++) + { + // read the server configuration + Server server = new Server(); + server.Url = propertiesFile.GetGroupRequiredStringValue("servers", serverId, "url"); + server.DisplayName = propertiesFile.GetGroupStringValue("servers", serverId, "displayName"); + server.IgnoreUntrustedCertificate = propertiesFile.GetGroupBoolValue("servers", serverId, "ignoreUntrustedCertificate", false); + + // credentials + string username = propertiesFile.GetGroupStringValue("servers", serverId, "username"); + if (username != null) + { + string passwordBase64 = propertiesFile.GetGroupRequiredStringValue("servers", serverId, "passwordBase64"); + string password = Encoding.UTF8.GetString(Convert.FromBase64String(passwordBase64)); + server.Credentials = new Credentials(username, password); + } + +#if DEBUG//FIXME + server.Credentials = new Credentials("plop", "bam"); +#endif + + // keep the server + servers.Add(server); + + // temporary keep for projects loading + serverMap.Add(serverId, server); + } + + // load the projects + int projectCount = propertiesFile.GetGroupCount("projects"); + for (int projectId = 0; projectId < projectCount; projectId++) + { + // read the project configuration + int serverId = propertiesFile.GetGroupRequiredIntValue("projects", projectId, "server"); + Server server = serverMap[serverId]; + Project project = new Project(); + project.Server = server; + project.Name = propertiesFile.GetGroupRequiredStringValue("projects", projectId, "name"); + project.Url = propertiesFile.GetGroupRequiredStringValue("projects", projectId, "url"); + + // keep the project + server.Projects.Add(project); + } + + var notificationSettings = new NotificationSettings(); + notificationSettings.FailedSoundPath = propertiesFile.GetStringValue("sounds.Failed"); + notificationSettings.FixedSoundPath = propertiesFile.GetStringValue("sounds.Fixed"); + notificationSettings.StillFailingSoundPath = propertiesFile.GetStringValue("sounds.StillFailing"); + notificationSettings.SucceededSoundPath = propertiesFile.GetStringValue("sounds.Succeeded"); + notificationSettings.TreatUnstableAsFailed = propertiesFile.GetBoolValue("sounds.TreatUnstableAsFailed") ?? true; + + var generalSettings = new GeneralSettings(); + generalSettings.RefreshIntervalInSeconds = propertiesFile.GetIntValue("general.RefreshTimeInSeconds", DEFAULT_TIME_BETWEEN_UPDATES); + generalSettings.UpdateMainWindowIcon = propertiesFile.GetBoolValue("general.UpdateMainWindowIcon", true); + generalSettings.IntegrateWithClaimPlugin = propertiesFile.GetBoolValue("general.IntegrateWithClaimPlugin", true); + + var res = new Configuration + { + Servers = servers, + NotificationSettings = notificationSettings, + GeneralSettings = generalSettings + }; + return res; + } + } +} diff --git a/HudsonTrayTracker/Legacy/Collections/DualPropertiesContainer.cs b/JenkinsTray/Legacy/Collections/DualPropertiesContainer.cs similarity index 96% rename from HudsonTrayTracker/Legacy/Collections/DualPropertiesContainer.cs rename to JenkinsTray/Legacy/Collections/DualPropertiesContainer.cs index 99d5876..9d0ed1c 100644 --- a/HudsonTrayTracker/Legacy/Collections/DualPropertiesContainer.cs +++ b/JenkinsTray/Legacy/Collections/DualPropertiesContainer.cs @@ -1,240 +1,240 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Hudson.TrayTracker.Utils.Collections -{ - [Obsolete] - public class DualPropertiesContainer : IPropertiesContainer - { - string id; - PropertiesContainer userProperties; - PropertiesContainer defaultProperties; - PropertiesContainer allProperties; - PropertiesContainer[] writeEnabledContainers; - - // user properties: they can be changed - internal IPropertiesContainer UserProperties - { - get { return userProperties; } - } - - // default properties: they are read-only - internal IPropertiesContainer DefaultProperties - { - get { return defaultProperties; } - } - - // user+default properties: they are read-only - internal IPropertiesContainer Properties - { - get { return allProperties; } - } - - public DualPropertiesContainer(string id) - { - this.id = id; - userProperties = new PropertiesContainer("User:" + id, true); - defaultProperties = new PropertiesContainer("Default:" + id, true); - allProperties = new PropertiesContainer("All:" + id, true); - writeEnabledContainers = new PropertiesContainer[] { userProperties, allProperties }; - } - - delegate void PropertiesWriteActionDelegate(IPropertiesContainer properties); - - private void Apply(PropertiesWriteActionDelegate action) - { - foreach (PropertiesContainer container in writeEnabledContainers) - { - container.ReadOnly = false; - action(container); - container.ReadOnly = true; - } - } - - public string this[string key] - { - get { return allProperties[key]; } - set - { - Apply(delegate(IPropertiesContainer properties) - { - properties[key] = value; - }); - } - } - - public string GetStringValue(string key) - { - return allProperties.GetStringValue(key); - } - public string GetStringValue(string key, string defaultValue) - { - return allProperties.GetStringValue(key, defaultValue); - } - public string GetRequiredStringValue(string key) - { - return allProperties.GetRequiredStringValue(key); - } - public Int32? GetIntValue(string key) - { - return allProperties.GetIntValue(key); - } - public Int32 GetIntValue(string key, Int32 defaultValue) - { - return allProperties.GetIntValue(key, defaultValue); - } - public void SetIntValue(string key, int value) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetIntValue(key, value); - }); - } - public Int32 GetRequiredIntValue(string key) - { - return allProperties.GetRequiredIntValue(key); - } - public float? GetFloatValue(string key) - { - return allProperties.GetFloatValue(key); - } - public float? GetFloatValue(string key, float defaultValue) - { - return allProperties.GetFloatValue(key, defaultValue); - } - public float GetRequiredFloatValue(string key) - { - return allProperties.GetRequiredFloatValue(key); - } - public bool? GetBoolValue(string key) - { - return allProperties.GetBoolValue(key); - } - public bool GetBoolValue(string key, bool defaultValue) - { - return allProperties.GetBoolValue(key, defaultValue); - } - public void SetBoolValue(string key, bool value) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetBoolValue(key, value); - }); - } - public void RemoveValue(string key) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.RemoveValue(key); - }); - } - - public int GetGroupCount(string group) - { - return allProperties.GetGroupCount(group); - } - public string GetGroupStringValue(string group, int groupId, string key) - { - return allProperties.GetGroupStringValue(group, groupId, key); - } - public string GetGroupStringValue(string group, int groupId, string key, string defaultValue) - { - return allProperties.GetGroupStringValue(group, groupId, key, defaultValue); - } - public string GetGroupRequiredStringValue(string group, int groupId, string key) - { - return allProperties.GetGroupRequiredStringValue(group, groupId, key); - } - public Int32? GetGroupIntValue(string group, int groupId, string key) - { - return allProperties.GetGroupIntValue(group, groupId, key); - } - public Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue) - { - return allProperties.GetGroupIntValue(group, groupId, key, defaultValue); - } - public Int32 GetGroupRequiredIntValue(string group, int groupId, string key) - { - return allProperties.GetGroupRequiredIntValue(group, groupId, key); - } - public float? GetGroupFloatValue(string group, int groupId, string key) - { - return allProperties.GetGroupFloatValue(group, groupId, key); - } - public float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue) - { - return allProperties.GetGroupFloatValue(group, groupId, key, defaultValue); - } - public float GetGroupRequiredFloatValue(string group, int groupId, string key) - { - return allProperties.GetGroupRequiredFloatValue(group, groupId, key); - } - public bool? GetGroupBoolValue(string group, int groupId, string key) - { - return allProperties.GetGroupBoolValue(group, groupId, key); - } - - public bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue) - { - return allProperties.GetGroupBoolValue(group, groupId, key, defaultValue); - } - public void SetGroupCount(string group, int count) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetGroupCount(group, count); - }); - } - public void SetGroupStringValue(string group, int groupId, string key, string value) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetGroupStringValue(group, groupId, key, value); - }); - } - public void SetGroupIntValue(string group, int groupId, string key, int value) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetGroupIntValue(group, groupId, key, value); - }); - } - public void SetGroupBoolValue(string group, int groupId, string key, bool value) - { - Apply(delegate(IPropertiesContainer properties) - { - properties.SetGroupBoolValue(group, groupId, key, value); - }); - } - - public IEnumerator> GetEnumerator() - { - return allProperties.GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return allProperties.GetEnumerator(); - } - - public void CopyPropertiesFrom(IPropertiesContainer properties) - { - throw new Exception("The method or operation is not implemented."); - } - - public bool ReadOnly - { - get { throw new Exception("The method or operation is not implemented."); } - set { throw new Exception("The method or operation is not implemented."); } - } - - public void Clear() - { - Apply(delegate(IPropertiesContainer properties) - { - properties.Clear(); - }); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace Jenkins.Tray.Utils.Collections +{ + [Obsolete] + public class DualPropertiesContainer : IPropertiesContainer + { + string id; + PropertiesContainer userProperties; + PropertiesContainer defaultProperties; + PropertiesContainer allProperties; + PropertiesContainer[] writeEnabledContainers; + + // user properties: they can be changed + internal IPropertiesContainer UserProperties + { + get { return userProperties; } + } + + // default properties: they are read-only + internal IPropertiesContainer DefaultProperties + { + get { return defaultProperties; } + } + + // user+default properties: they are read-only + internal IPropertiesContainer Properties + { + get { return allProperties; } + } + + public DualPropertiesContainer(string id) + { + this.id = id; + userProperties = new PropertiesContainer("User:" + id, true); + defaultProperties = new PropertiesContainer("Default:" + id, true); + allProperties = new PropertiesContainer("All:" + id, true); + writeEnabledContainers = new PropertiesContainer[] { userProperties, allProperties }; + } + + delegate void PropertiesWriteActionDelegate(IPropertiesContainer properties); + + private void Apply(PropertiesWriteActionDelegate action) + { + foreach (PropertiesContainer container in writeEnabledContainers) + { + container.ReadOnly = false; + action(container); + container.ReadOnly = true; + } + } + + public string this[string key] + { + get { return allProperties[key]; } + set + { + Apply(delegate(IPropertiesContainer properties) + { + properties[key] = value; + }); + } + } + + public string GetStringValue(string key) + { + return allProperties.GetStringValue(key); + } + public string GetStringValue(string key, string defaultValue) + { + return allProperties.GetStringValue(key, defaultValue); + } + public string GetRequiredStringValue(string key) + { + return allProperties.GetRequiredStringValue(key); + } + public Int32? GetIntValue(string key) + { + return allProperties.GetIntValue(key); + } + public Int32 GetIntValue(string key, Int32 defaultValue) + { + return allProperties.GetIntValue(key, defaultValue); + } + public void SetIntValue(string key, int value) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetIntValue(key, value); + }); + } + public Int32 GetRequiredIntValue(string key) + { + return allProperties.GetRequiredIntValue(key); + } + public float? GetFloatValue(string key) + { + return allProperties.GetFloatValue(key); + } + public float? GetFloatValue(string key, float defaultValue) + { + return allProperties.GetFloatValue(key, defaultValue); + } + public float GetRequiredFloatValue(string key) + { + return allProperties.GetRequiredFloatValue(key); + } + public bool? GetBoolValue(string key) + { + return allProperties.GetBoolValue(key); + } + public bool GetBoolValue(string key, bool defaultValue) + { + return allProperties.GetBoolValue(key, defaultValue); + } + public void SetBoolValue(string key, bool value) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetBoolValue(key, value); + }); + } + public void RemoveValue(string key) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.RemoveValue(key); + }); + } + + public int GetGroupCount(string group) + { + return allProperties.GetGroupCount(group); + } + public string GetGroupStringValue(string group, int groupId, string key) + { + return allProperties.GetGroupStringValue(group, groupId, key); + } + public string GetGroupStringValue(string group, int groupId, string key, string defaultValue) + { + return allProperties.GetGroupStringValue(group, groupId, key, defaultValue); + } + public string GetGroupRequiredStringValue(string group, int groupId, string key) + { + return allProperties.GetGroupRequiredStringValue(group, groupId, key); + } + public Int32? GetGroupIntValue(string group, int groupId, string key) + { + return allProperties.GetGroupIntValue(group, groupId, key); + } + public Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue) + { + return allProperties.GetGroupIntValue(group, groupId, key, defaultValue); + } + public Int32 GetGroupRequiredIntValue(string group, int groupId, string key) + { + return allProperties.GetGroupRequiredIntValue(group, groupId, key); + } + public float? GetGroupFloatValue(string group, int groupId, string key) + { + return allProperties.GetGroupFloatValue(group, groupId, key); + } + public float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue) + { + return allProperties.GetGroupFloatValue(group, groupId, key, defaultValue); + } + public float GetGroupRequiredFloatValue(string group, int groupId, string key) + { + return allProperties.GetGroupRequiredFloatValue(group, groupId, key); + } + public bool? GetGroupBoolValue(string group, int groupId, string key) + { + return allProperties.GetGroupBoolValue(group, groupId, key); + } + + public bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue) + { + return allProperties.GetGroupBoolValue(group, groupId, key, defaultValue); + } + public void SetGroupCount(string group, int count) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetGroupCount(group, count); + }); + } + public void SetGroupStringValue(string group, int groupId, string key, string value) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetGroupStringValue(group, groupId, key, value); + }); + } + public void SetGroupIntValue(string group, int groupId, string key, int value) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetGroupIntValue(group, groupId, key, value); + }); + } + public void SetGroupBoolValue(string group, int groupId, string key, bool value) + { + Apply(delegate(IPropertiesContainer properties) + { + properties.SetGroupBoolValue(group, groupId, key, value); + }); + } + + public IEnumerator> GetEnumerator() + { + return allProperties.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return allProperties.GetEnumerator(); + } + + public void CopyPropertiesFrom(IPropertiesContainer properties) + { + throw new Exception("The method or operation is not implemented."); + } + + public bool ReadOnly + { + get { throw new Exception("The method or operation is not implemented."); } + set { throw new Exception("The method or operation is not implemented."); } + } + + public void Clear() + { + Apply(delegate(IPropertiesContainer properties) + { + properties.Clear(); + }); + } + } +} diff --git a/HudsonTrayTracker/Legacy/Collections/IPropertiesContainer.cs b/JenkinsTray/Legacy/Collections/IPropertiesContainer.cs similarity index 95% rename from HudsonTrayTracker/Legacy/Collections/IPropertiesContainer.cs rename to JenkinsTray/Legacy/Collections/IPropertiesContainer.cs index 065bf02..660129c 100644 --- a/HudsonTrayTracker/Legacy/Collections/IPropertiesContainer.cs +++ b/JenkinsTray/Legacy/Collections/IPropertiesContainer.cs @@ -1,53 +1,53 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Reflection; - -namespace Hudson.TrayTracker.Utils.Collections -{ - // reads a properties file - [Obsolete] - public interface IPropertiesContainer : IEnumerable> - { - bool ReadOnly { get; set; } - - string this[string key] { get; set; } - - string GetStringValue(string key); - string GetStringValue(string key, string defaultValue); - string GetRequiredStringValue(string key); - Int32? GetIntValue(string key); - Int32 GetIntValue(string key, Int32 defaultValue); - Int32 GetRequiredIntValue(string key); - void SetIntValue(string key, int value); - float? GetFloatValue(string key); - float? GetFloatValue(string key, float defaultValue); - float GetRequiredFloatValue(string key); - bool? GetBoolValue(string key); - bool GetBoolValue(string key, bool defaultValue); - void SetBoolValue(string key, bool value); - void RemoveValue(string key); - - int GetGroupCount(string group); - string GetGroupStringValue(string group, int groupId, string key); - string GetGroupStringValue(string group, int groupId, string key, string defaultValue); - string GetGroupRequiredStringValue(string group, int groupId, string key); - Int32? GetGroupIntValue(string group, int groupId, string key); - Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue); - Int32 GetGroupRequiredIntValue(string group, int groupId, string key); - float? GetGroupFloatValue(string group, int groupId, string key); - float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue); - float GetGroupRequiredFloatValue(string group, int groupId, string key); - bool? GetGroupBoolValue(string group, int groupId, string key); - bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue); - void SetGroupCount(string group, int count); - void SetGroupStringValue(string group, int groupId, string key, string value); - void SetGroupIntValue(string group, int groupId, string key, int value); - void SetGroupBoolValue(string group, int groupId, string key, bool value); - - void CopyPropertiesFrom(IPropertiesContainer properties); - - void Clear(); - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Reflection; + +namespace Jenkins.Tray.Utils.Collections +{ + // reads a properties file + [Obsolete] + public interface IPropertiesContainer : IEnumerable> + { + bool ReadOnly { get; set; } + + string this[string key] { get; set; } + + string GetStringValue(string key); + string GetStringValue(string key, string defaultValue); + string GetRequiredStringValue(string key); + Int32? GetIntValue(string key); + Int32 GetIntValue(string key, Int32 defaultValue); + Int32 GetRequiredIntValue(string key); + void SetIntValue(string key, int value); + float? GetFloatValue(string key); + float? GetFloatValue(string key, float defaultValue); + float GetRequiredFloatValue(string key); + bool? GetBoolValue(string key); + bool GetBoolValue(string key, bool defaultValue); + void SetBoolValue(string key, bool value); + void RemoveValue(string key); + + int GetGroupCount(string group); + string GetGroupStringValue(string group, int groupId, string key); + string GetGroupStringValue(string group, int groupId, string key, string defaultValue); + string GetGroupRequiredStringValue(string group, int groupId, string key); + Int32? GetGroupIntValue(string group, int groupId, string key); + Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue); + Int32 GetGroupRequiredIntValue(string group, int groupId, string key); + float? GetGroupFloatValue(string group, int groupId, string key); + float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue); + float GetGroupRequiredFloatValue(string group, int groupId, string key); + bool? GetGroupBoolValue(string group, int groupId, string key); + bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue); + void SetGroupCount(string group, int count); + void SetGroupStringValue(string group, int groupId, string key, string value); + void SetGroupIntValue(string group, int groupId, string key, int value); + void SetGroupBoolValue(string group, int groupId, string key, bool value); + + void CopyPropertiesFrom(IPropertiesContainer properties); + + void Clear(); + } +} diff --git a/HudsonTrayTracker/Legacy/Collections/PropertiesContainer.cs b/JenkinsTray/Legacy/Collections/PropertiesContainer.cs similarity index 96% rename from HudsonTrayTracker/Legacy/Collections/PropertiesContainer.cs rename to JenkinsTray/Legacy/Collections/PropertiesContainer.cs index 8961d34..90a598b 100644 --- a/HudsonTrayTracker/Legacy/Collections/PropertiesContainer.cs +++ b/JenkinsTray/Legacy/Collections/PropertiesContainer.cs @@ -1,319 +1,319 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Reflection; - -using Common.Logging; -using System.Globalization; -using System.Text.RegularExpressions; - -namespace Hudson.TrayTracker.Utils.Collections -{ - // reads a properties file - [Obsolete] - public class PropertiesContainer : IPropertiesContainer - { - private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private static readonly Regex REGEX_BOOLEAN_TRUE = new Regex("^( *)(true|1|yes)( *)$", RegexOptions.IgnoreCase); - - string id; - IDictionary properties; - CultureInfo culture = new CultureInfo("en-US"); - bool readOnly; - - public bool ReadOnly - { - get { return readOnly; } - set { readOnly = value; } - } - - // returns the property or null if not found - public string this[string key] - { - get { return GetStringValue(key); } - set - { - if (readOnly) - throw new Exception("Cannot write to a read-only container"); - properties[key] = value; - } - } - - public PropertiesContainer(string id, bool readOnly) - { - this.id = id; - this.readOnly = readOnly; - properties = new Dictionary(); - } - - public PropertiesContainer(string id) - : this(id, false) - { - } - - public string GetStringValue(string key) - { - string res = null; - properties.TryGetValue(key, out res); - return res; - } - - public string GetStringValue(string key, string defaultValue) - { - string res = GetStringValue(key); - if (res != null) - return res; - return defaultValue; - } - - public string GetRequiredStringValue(string key) - { - string value = GetStringValue(key); - if (value != null) - return value; - throw new Exception("Required property '" + key + "' not found in container '" + id + "'"); - } - - public Int32? GetIntValue(string key) - { - string strValue = GetStringValue(key); - if (strValue == null) - return null; - - Int32 intValue; - if (Int32.TryParse(strValue, out intValue) == false) - { - logger.Error("Failed reading Int32 property '" + key + "' in file '" + id + "'"); - throw new Exception("Failed reading Int32 property '" + key + "' in file '" + id + "'"); - } - return intValue; - } - - public Int32 GetIntValue(string key, Int32 defaultValue) - { - Int32? value = GetIntValue(key); - if (value != null) - return value.Value; - return defaultValue; - } - - public Int32 GetRequiredIntValue(string key) - { - Int32? value = GetIntValue(key); - if (value != null) - return value.Value; - throw new Exception("Required property '" + key + "' not found in file '" + id + "'"); - } - - public void SetIntValue(string key, int value) - { - this[key] = value.ToString(); - } - - public float? GetFloatValue(string key) - { - string strValue = GetStringValue(key); - if (strValue == null) - return null; - - float floatValue; - if (float.TryParse(strValue, NumberStyles.Float, culture, out floatValue) == false) - { - logger.Error("Failed reading float property '" + key + "' in file '" + id + "'"); - throw new Exception("Failed reading float property '" + key + "' in file '" + id + "'"); - } - return floatValue; - } - - public float? GetFloatValue(string key, float defaultValue) - { - float? value = GetFloatValue(key); - if (value != null) - return value.Value; - return defaultValue; - } - - public float GetRequiredFloatValue(string key) - { - float? value = GetFloatValue(key); - if (value != null) - return value.Value; - throw new Exception("Required property '" + key + "' not found in file '" + id + "'"); - } - - public bool? GetBoolValue(string key) - { - string strValue = GetStringValue(key); - if (strValue == null) - return null; - - //if (strValue == "true" || strValue == "1" || strValue == "yes") - // return true; - return REGEX_BOOLEAN_TRUE.IsMatch(strValue); - } - - public bool GetBoolValue(string key, bool defaultValue) - { - bool? value = GetBoolValue(key); - if (value != null) - return value.Value; - return defaultValue; - } - - public void SetBoolValue(string key, bool value) - { - this[key] = value ? "true" : "false"; - } - - public void RemoveValue(string key) - { - properties.Remove(key); - } - - public int GetGroupCount(string group) - { - int? count = GetIntValue(group + ".count"); - if (count.HasValue) - return count.Value; - return 0; - } - - public string GetGroupStringValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetStringValue(groupKey); - } - - public string GetGroupStringValue(string group, int groupId, string key, string defaultValue) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetStringValue(groupKey, defaultValue); - } - - public string GetGroupRequiredStringValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetRequiredStringValue(groupKey); - } - - public Int32? GetGroupIntValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetIntValue(groupKey); - } - - public Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetIntValue(groupKey, defaultValue); - } - - public void SetGroupIntValue(string group, int groupId, string key, int value) - { - string groupKey = GetGroupKey(group, groupId, key); - - this[groupKey] = value.ToString(); - } - - public bool? GetGroupBoolValue(string group, int groupId, string key) - { - string strValue = GetGroupStringValue(group, groupId, key); - - if (strValue == null) - return null; - - return REGEX_BOOLEAN_TRUE.IsMatch(strValue); - } - - public bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue) - { - bool? value = GetGroupBoolValue(group, groupId, key); - - if (value != null) - return value.Value; - - return defaultValue; - } - - public void SetGroupBoolValue(string group, int groupId, string key, bool value) - { - string groupKey = GetGroupKey(group, groupId, key); - - this[groupKey] = value ? "true" : "false"; - } - - public Int32 GetGroupRequiredIntValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetRequiredIntValue(groupKey); - } - - public float? GetGroupFloatValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetFloatValue(groupKey); - } - - public float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetFloatValue(groupKey, defaultValue); - } - - public float GetGroupRequiredFloatValue(string group, int groupId, string key) - { - string groupKey = GetGroupKey(group, groupId, key); - return GetRequiredFloatValue(groupKey); - } - - public void SetGroupCount(string group, int count) - { - if (count < 1) - throw new Exception("Count must be positive."); - this[group + ".count"] = count.ToString(); - } - - public void SetGroupStringValue(string group, int groupId, string key, string value) - { - string groupKey = GetGroupKey(group, groupId, key); - this[groupKey] = value; - } - - private string GetGroupKey(string group, int groupId, string key) - { - return group + "[" + groupId + "]." + key; - } - - #region IEnumerable> Members - - public IEnumerator> GetEnumerator() - { - return properties.GetEnumerator(); - } - - #endregion - - #region IEnumerable Members - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return properties.GetEnumerator(); - } - - #endregion - - public void CopyPropertiesFrom(IPropertiesContainer properties) - { - foreach (KeyValuePair pair in properties) - this[pair.Key] = pair.Value; - } - - public void Clear() - { - if (readOnly) - throw new Exception("Cannot write to a read-only container"); - properties.Clear(); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Reflection; + +using Common.Logging; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace Jenkins.Tray.Utils.Collections +{ + // reads a properties file + [Obsolete] + public class PropertiesContainer : IPropertiesContainer + { + private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly Regex REGEX_BOOLEAN_TRUE = new Regex("^( *)(true|1|yes)( *)$", RegexOptions.IgnoreCase); + + string id; + IDictionary properties; + CultureInfo culture = new CultureInfo("en-US"); + bool readOnly; + + public bool ReadOnly + { + get { return readOnly; } + set { readOnly = value; } + } + + // returns the property or null if not found + public string this[string key] + { + get { return GetStringValue(key); } + set + { + if (readOnly) + throw new Exception("Cannot write to a read-only container"); + properties[key] = value; + } + } + + public PropertiesContainer(string id, bool readOnly) + { + this.id = id; + this.readOnly = readOnly; + properties = new Dictionary(); + } + + public PropertiesContainer(string id) + : this(id, false) + { + } + + public string GetStringValue(string key) + { + string res = null; + properties.TryGetValue(key, out res); + return res; + } + + public string GetStringValue(string key, string defaultValue) + { + string res = GetStringValue(key); + if (res != null) + return res; + return defaultValue; + } + + public string GetRequiredStringValue(string key) + { + string value = GetStringValue(key); + if (value != null) + return value; + throw new Exception("Required property '" + key + "' not found in container '" + id + "'"); + } + + public Int32? GetIntValue(string key) + { + string strValue = GetStringValue(key); + if (strValue == null) + return null; + + Int32 intValue; + if (Int32.TryParse(strValue, out intValue) == false) + { + logger.Error("Failed reading Int32 property '" + key + "' in file '" + id + "'"); + throw new Exception("Failed reading Int32 property '" + key + "' in file '" + id + "'"); + } + return intValue; + } + + public Int32 GetIntValue(string key, Int32 defaultValue) + { + Int32? value = GetIntValue(key); + if (value != null) + return value.Value; + return defaultValue; + } + + public Int32 GetRequiredIntValue(string key) + { + Int32? value = GetIntValue(key); + if (value != null) + return value.Value; + throw new Exception("Required property '" + key + "' not found in file '" + id + "'"); + } + + public void SetIntValue(string key, int value) + { + this[key] = value.ToString(); + } + + public float? GetFloatValue(string key) + { + string strValue = GetStringValue(key); + if (strValue == null) + return null; + + float floatValue; + if (float.TryParse(strValue, NumberStyles.Float, culture, out floatValue) == false) + { + logger.Error("Failed reading float property '" + key + "' in file '" + id + "'"); + throw new Exception("Failed reading float property '" + key + "' in file '" + id + "'"); + } + return floatValue; + } + + public float? GetFloatValue(string key, float defaultValue) + { + float? value = GetFloatValue(key); + if (value != null) + return value.Value; + return defaultValue; + } + + public float GetRequiredFloatValue(string key) + { + float? value = GetFloatValue(key); + if (value != null) + return value.Value; + throw new Exception("Required property '" + key + "' not found in file '" + id + "'"); + } + + public bool? GetBoolValue(string key) + { + string strValue = GetStringValue(key); + if (strValue == null) + return null; + + //if (strValue == "true" || strValue == "1" || strValue == "yes") + // return true; + return REGEX_BOOLEAN_TRUE.IsMatch(strValue); + } + + public bool GetBoolValue(string key, bool defaultValue) + { + bool? value = GetBoolValue(key); + if (value != null) + return value.Value; + return defaultValue; + } + + public void SetBoolValue(string key, bool value) + { + this[key] = value ? "true" : "false"; + } + + public void RemoveValue(string key) + { + properties.Remove(key); + } + + public int GetGroupCount(string group) + { + int? count = GetIntValue(group + ".count"); + if (count.HasValue) + return count.Value; + return 0; + } + + public string GetGroupStringValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetStringValue(groupKey); + } + + public string GetGroupStringValue(string group, int groupId, string key, string defaultValue) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetStringValue(groupKey, defaultValue); + } + + public string GetGroupRequiredStringValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetRequiredStringValue(groupKey); + } + + public Int32? GetGroupIntValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetIntValue(groupKey); + } + + public Int32? GetGroupIntValue(string group, int groupId, string key, Int32 defaultValue) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetIntValue(groupKey, defaultValue); + } + + public void SetGroupIntValue(string group, int groupId, string key, int value) + { + string groupKey = GetGroupKey(group, groupId, key); + + this[groupKey] = value.ToString(); + } + + public bool? GetGroupBoolValue(string group, int groupId, string key) + { + string strValue = GetGroupStringValue(group, groupId, key); + + if (strValue == null) + return null; + + return REGEX_BOOLEAN_TRUE.IsMatch(strValue); + } + + public bool GetGroupBoolValue(string group, int groupId, string key, bool defaultValue) + { + bool? value = GetGroupBoolValue(group, groupId, key); + + if (value != null) + return value.Value; + + return defaultValue; + } + + public void SetGroupBoolValue(string group, int groupId, string key, bool value) + { + string groupKey = GetGroupKey(group, groupId, key); + + this[groupKey] = value ? "true" : "false"; + } + + public Int32 GetGroupRequiredIntValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetRequiredIntValue(groupKey); + } + + public float? GetGroupFloatValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetFloatValue(groupKey); + } + + public float? GetGroupFloatValue(string group, int groupId, string key, float defaultValue) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetFloatValue(groupKey, defaultValue); + } + + public float GetGroupRequiredFloatValue(string group, int groupId, string key) + { + string groupKey = GetGroupKey(group, groupId, key); + return GetRequiredFloatValue(groupKey); + } + + public void SetGroupCount(string group, int count) + { + if (count < 1) + throw new Exception("Count must be positive."); + this[group + ".count"] = count.ToString(); + } + + public void SetGroupStringValue(string group, int groupId, string key, string value) + { + string groupKey = GetGroupKey(group, groupId, key); + this[groupKey] = value; + } + + private string GetGroupKey(string group, int groupId, string key) + { + return group + "[" + groupId + "]." + key; + } + + #region IEnumerable> Members + + public IEnumerator> GetEnumerator() + { + return properties.GetEnumerator(); + } + + #endregion + + #region IEnumerable Members + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return properties.GetEnumerator(); + } + + #endregion + + public void CopyPropertiesFrom(IPropertiesContainer properties) + { + foreach (KeyValuePair pair in properties) + this[pair.Key] = pair.Value; + } + + public void Clear() + { + if (readOnly) + throw new Exception("Cannot write to a read-only container"); + properties.Clear(); + } + } +} diff --git a/HudsonTrayTracker/Legacy/IO/PropertiesFile.cs b/JenkinsTray/Legacy/IO/PropertiesFile.cs similarity index 95% rename from HudsonTrayTracker/Legacy/IO/PropertiesFile.cs rename to JenkinsTray/Legacy/IO/PropertiesFile.cs index 7fb1e67..4c8645e 100644 --- a/HudsonTrayTracker/Legacy/IO/PropertiesFile.cs +++ b/JenkinsTray/Legacy/IO/PropertiesFile.cs @@ -1,163 +1,163 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Reflection; - -using Common.Logging; - -using Hudson.TrayTracker.Utils.Collections; - -namespace Hudson.TrayTracker.Utils.IO -{ - // reads a properties file - [Obsolete] - public class PropertiesFile : DualPropertiesContainer - { - private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - string filename; - - public static PropertiesFile ReadPropertiesFile(string filename) - { - PropertiesFile file = new PropertiesFile(filename); - file.ReadProperties(); - return file; - } - - public static PropertiesFile ReadPropertiesFileOrFail(string filename) - { - PropertiesFile file = new PropertiesFile(filename); - file.ReadPropertiesOrFail(); - return file; - } - - public static IPropertiesContainer ReadProperties(Stream stream, string id) - { - PropertiesContainer properties = new PropertiesContainer(id); - StreamReader streamReader = new StreamReader(stream); - ParseStream(streamReader, properties); - return properties; - } - - public static IPropertiesContainer ReadProperties(string content, string id) - { - PropertiesContainer properties = new PropertiesContainer(id); - StringReader reader = new StringReader(content); - ParseStream(reader, properties); - return properties; - } - - public static bool CanReadFile(string metadataFile) - { - bool exists = File.Exists(metadataFile); - return exists; - } - - public PropertiesFile(string filename) - : base(filename) - { - if (filename == null) - throw new ArgumentNullException("filename"); - this.filename = filename; - } - - public void WriteProperties() - { - WriteFile(); - } - - // Reads the properties from the file, and returns a boolean indicating wheter file was found or not. - // The file used is the one provided as a constructor argument. - public bool ReadProperties() - { - return ReadProperties(filename, true); - } - - // Reads the properties from the file, and returns a boolean indicating wheter file was found or not - public bool ReadProperties(string filename, bool isUserFile) - { - bool exists = File.Exists(filename); - if (exists) - { - // read properties - IPropertiesContainer properties = isUserFile ? UserProperties : DefaultProperties; - properties.ReadOnly = false; - ParseFile(filename, properties); - properties.ReadOnly = true; - - // copy to the "all" container - Properties.ReadOnly = false; - Properties.CopyPropertiesFrom(properties); - Properties.ReadOnly = true; - } - else - logger.Info("Properties file not found: " + filename); - return exists; - } - - // reads the properties from the file, and throws an exception if the file was not found - public void ReadPropertiesOrFail() - { - bool exists = ReadProperties(); - if (!exists) - throw new Exception("Properties file not found: " + filename); - } - - private void ParseFile(string filename, IPropertiesContainer properties) - { - if (logger.IsInfoEnabled) - logger.Info("Parsing file: " + filename); - - StreamReader stream = File.OpenText(filename); - ParseStream(stream, properties); - stream.Close(); - stream.Dispose(); - } - - private static void ParseStream(TextReader stream, IPropertiesContainer properties) - { - string line; - int i = 1; - while ((line = stream.ReadLine()) != null) - ParseLine(line, i++, properties); - } - - private static void ParseLine(string line, int lineNumber, IPropertiesContainer properties) - { - if (line.Trim() == "" || line.StartsWith("#")) - return; - - int index = line.IndexOf('='); - if (index == -1) - { - logger.Error("Could not parse line " + lineNumber + ": " + line); - throw new Exception("Could not parse line " + lineNumber + ": " + line); - } - - string propKey = line.Substring(0, index).Trim(); - string propValue = line.Substring(index + 1).Trim(); - - properties[propKey] = propValue; - } - - private void WriteFile() - { - if (logger.IsInfoEnabled) - logger.Info("Writing file: " + filename); - - StreamWriter file = new StreamWriter(filename); - foreach (KeyValuePair pair in UserProperties) - { - file.Write(pair.Key); - file.Write("="); - file.Write(pair.Value); - file.WriteLine(); - } - file.Flush(); - file.Close(); - file.Dispose(); - file = null; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Reflection; + +using Common.Logging; + +using Jenkins.Tray.Utils.Collections; + +namespace Jenkins.Tray.Utils.IO +{ + // reads a properties file + [Obsolete] + public class PropertiesFile : DualPropertiesContainer + { + private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + string filename; + + public static PropertiesFile ReadPropertiesFile(string filename) + { + PropertiesFile file = new PropertiesFile(filename); + file.ReadProperties(); + return file; + } + + public static PropertiesFile ReadPropertiesFileOrFail(string filename) + { + PropertiesFile file = new PropertiesFile(filename); + file.ReadPropertiesOrFail(); + return file; + } + + public static IPropertiesContainer ReadProperties(Stream stream, string id) + { + PropertiesContainer properties = new PropertiesContainer(id); + StreamReader streamReader = new StreamReader(stream); + ParseStream(streamReader, properties); + return properties; + } + + public static IPropertiesContainer ReadProperties(string content, string id) + { + PropertiesContainer properties = new PropertiesContainer(id); + StringReader reader = new StringReader(content); + ParseStream(reader, properties); + return properties; + } + + public static bool CanReadFile(string metadataFile) + { + bool exists = File.Exists(metadataFile); + return exists; + } + + public PropertiesFile(string filename) + : base(filename) + { + if (filename == null) + throw new ArgumentNullException("filename"); + this.filename = filename; + } + + public void WriteProperties() + { + WriteFile(); + } + + // Reads the properties from the file, and returns a boolean indicating wheter file was found or not. + // The file used is the one provided as a constructor argument. + public bool ReadProperties() + { + return ReadProperties(filename, true); + } + + // Reads the properties from the file, and returns a boolean indicating wheter file was found or not + public bool ReadProperties(string filename, bool isUserFile) + { + bool exists = File.Exists(filename); + if (exists) + { + // read properties + IPropertiesContainer properties = isUserFile ? UserProperties : DefaultProperties; + properties.ReadOnly = false; + ParseFile(filename, properties); + properties.ReadOnly = true; + + // copy to the "all" container + Properties.ReadOnly = false; + Properties.CopyPropertiesFrom(properties); + Properties.ReadOnly = true; + } + else + logger.Info("Properties file not found: " + filename); + return exists; + } + + // reads the properties from the file, and throws an exception if the file was not found + public void ReadPropertiesOrFail() + { + bool exists = ReadProperties(); + if (!exists) + throw new Exception("Properties file not found: " + filename); + } + + private void ParseFile(string filename, IPropertiesContainer properties) + { + if (logger.IsInfoEnabled) + logger.Info("Parsing file: " + filename); + + StreamReader stream = File.OpenText(filename); + ParseStream(stream, properties); + stream.Close(); + stream.Dispose(); + } + + private static void ParseStream(TextReader stream, IPropertiesContainer properties) + { + string line; + int i = 1; + while ((line = stream.ReadLine()) != null) + ParseLine(line, i++, properties); + } + + private static void ParseLine(string line, int lineNumber, IPropertiesContainer properties) + { + if (line.Trim() == "" || line.StartsWith("#")) + return; + + int index = line.IndexOf('='); + if (index == -1) + { + logger.Error("Could not parse line " + lineNumber + ": " + line); + throw new Exception("Could not parse line " + lineNumber + ": " + line); + } + + string propKey = line.Substring(0, index).Trim(); + string propValue = line.Substring(index + 1).Trim(); + + properties[propKey] = propValue; + } + + private void WriteFile() + { + if (logger.IsInfoEnabled) + logger.Info("Writing file: " + filename); + + StreamWriter file = new StreamWriter(filename); + foreach (KeyValuePair pair in UserProperties) + { + file.Write(pair.Key); + file.Write("="); + file.Write(pair.Value); + file.WriteLine(); + } + file.Flush(); + file.Close(); + file.Dispose(); + file = null; + } + } +} diff --git a/HudsonTrayTracker/LoggingConfig.xml b/JenkinsTray/LoggingConfig.xml similarity index 88% rename from HudsonTrayTracker/LoggingConfig.xml rename to JenkinsTray/LoggingConfig.xml index 51161a8..c23f3c6 100644 --- a/HudsonTrayTracker/LoggingConfig.xml +++ b/JenkinsTray/LoggingConfig.xml @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HudsonTrayTracker/Program.cs b/JenkinsTray/Program.cs similarity index 91% rename from HudsonTrayTracker/Program.cs rename to JenkinsTray/Program.cs index 03d0886..fd4e593 100644 --- a/HudsonTrayTracker/Program.cs +++ b/JenkinsTray/Program.cs @@ -1,85 +1,85 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using Hudson.TrayTracker.BusinessComponents; -using DevExpress.Skins; -using DevExpress.LookAndFeel; -using DevExpress.UserSkins; -using Hudson.TrayTracker.UI; -using Hudson.TrayTracker.Utils.Logging; -using System.Reflection; -using System.Diagnostics; -using Common.Logging; -using Hudson.TrayTracker.Utils; -using System.Threading; -using System.Drawing; -using System.IO; -using DevExpress.XtraEditors; -using Spring.Context.Support; - -namespace Hudson.TrayTracker -{ - static class Program - { - private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - try - { - Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionHandler.Application_ThreadException); - - // skinning - SkinManager.EnableFormSkins(); - OfficeSkins.Register(); - UserLookAndFeel.Default.ActiveLookAndFeel.SkinName = "Office 2010 Blue"; - - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.ApplicationExit += new EventHandler(Application_Exit); - Application_Prepare(); - - // Spring - ContextRegistry.GetContext(); - MainForm.Instance.Show(); - TrayNotifier.Instance.UpdateNotifierStartup(); - - ApplicationContext appContext = new ApplicationContext(); - Application.Run(appContext); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - MessageBox.Show(ex.ToString(), "Program exception handler"); - } - } - - private static void Application_Prepare() - { - logger.Info("Log4net ready."); - logger.Info(Assembly.GetExecutingAssembly().GetName().Name - + " v" + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); - logger.Info(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location)); - } - - static void Application_Exit(object sender, EventArgs e) - { - try - { - TrayNotifier.Instance.ConfigurationService.SaveConfiguration(); - TrayNotifier.Instance.Dispose(); - } - catch (Exception ex) - { - logger.Error("Failed disposing tray notifier", ex); - } - - logger.Info(Assembly.GetExecutingAssembly().GetName().Name - + " v" + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion + " Exit"); - } - } -} +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using Jenkins.Tray.BusinessComponents; +using DevExpress.Skins; +using DevExpress.LookAndFeel; +using DevExpress.UserSkins; +using Jenkins.Tray.UI; +using Jenkins.Tray.Utils.Logging; +using System.Reflection; +using System.Diagnostics; +using Common.Logging; +using Jenkins.Tray.Utils; +using System.Threading; +using System.Drawing; +using System.IO; +using DevExpress.XtraEditors; +using Spring.Context.Support; + +namespace Jenkins.Tray +{ + static class Program + { + private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + try + { + Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionHandler.Application_ThreadException); + + // skinning + SkinManager.EnableFormSkins(); + OfficeSkins.Register(); + UserLookAndFeel.Default.ActiveLookAndFeel.SkinName = "Office 2010 Blue"; + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.ApplicationExit += new EventHandler(Application_Exit); + Application_Prepare(); + + // Spring + ContextRegistry.GetContext(); + MainForm.Instance.Show(); + TrayNotifier.Instance.UpdateNotifierStartup(); + + ApplicationContext appContext = new ApplicationContext(); + Application.Run(appContext); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + MessageBox.Show(ex.ToString(), "Program exception handler"); + } + } + + private static void Application_Prepare() + { + logger.Info("Log4net ready."); + logger.Info(Assembly.GetExecutingAssembly().GetName().Name + + " v" + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); + logger.Info(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location)); + } + + static void Application_Exit(object sender, EventArgs e) + { + try + { + TrayNotifier.Instance.ConfigurationService.SaveConfiguration(); + TrayNotifier.Instance.Dispose(); + } + catch (Exception ex) + { + logger.Error("Failed disposing tray notifier", ex); + } + + logger.Info(Assembly.GetExecutingAssembly().GetName().Name + + " v" + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion + " Exit"); + } + } +} diff --git a/HudsonTrayTracker/Properties/AssemblyInfo.cs b/JenkinsTray/Properties/AssemblyInfo.cs similarity index 97% rename from HudsonTrayTracker/Properties/AssemblyInfo.cs rename to JenkinsTray/Properties/AssemblyInfo.cs index 5642e59..c8d9513 100644 --- a/HudsonTrayTracker/Properties/AssemblyInfo.cs +++ b/JenkinsTray/Properties/AssemblyInfo.cs @@ -1,20 +1,20 @@ -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("Jenkins Tray")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[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("BDA12237-85B5-4D12-A88B-E8A488C2A0A8")] +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("Jenkins Tray")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[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("BDA12237-85B5-4D12-A88B-E8A488C2A0A8")] diff --git a/HudsonTrayTracker/Properties/Resources.Designer.cs b/JenkinsTray/Properties/Resources.Designer.cs similarity index 92% rename from HudsonTrayTracker/Properties/Resources.Designer.cs rename to JenkinsTray/Properties/Resources.Designer.cs index caffccd..1a5ebc7 100644 --- a/HudsonTrayTracker/Properties/Resources.Designer.cs +++ b/JenkinsTray/Properties/Resources.Designer.cs @@ -1,63 +1,63 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18033 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Hudson.TrayTracker.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", "4.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("Hudson.TrayTracker.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; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18033 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Jenkins.Tray.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", "4.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("Jenkins.Tray.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; + } + } + } +} diff --git a/HudsonTrayTracker/Properties/Resources.resx b/JenkinsTray/Properties/Resources.resx similarity index 97% rename from HudsonTrayTracker/Properties/Resources.resx rename to JenkinsTray/Properties/Resources.resx index 4d26a2a..04e2214 100644 --- a/HudsonTrayTracker/Properties/Resources.resx +++ b/JenkinsTray/Properties/Resources.resx @@ -1,121 +1,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HudsonTrayTracker/Properties/Settings.Designer.cs b/JenkinsTray/Properties/Settings.Designer.cs similarity index 93% rename from HudsonTrayTracker/Properties/Settings.Designer.cs rename to JenkinsTray/Properties/Settings.Designer.cs index 3ebe362..12abec6 100644 --- a/HudsonTrayTracker/Properties/Settings.Designer.cs +++ b/JenkinsTray/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18033 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Hudson.TrayTracker.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.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; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18033 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Jenkins.Tray.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.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; + } + } + } +} diff --git a/HudsonTrayTracker/Properties/Settings.settings b/JenkinsTray/Properties/Settings.settings similarity index 97% rename from HudsonTrayTracker/Properties/Settings.settings rename to JenkinsTray/Properties/Settings.settings index abf36c5..3964565 100644 --- a/HudsonTrayTracker/Properties/Settings.settings +++ b/JenkinsTray/Properties/Settings.settings @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/HudsonTrayTracker/Properties/licenses.licx b/JenkinsTray/Properties/licenses.licx similarity index 99% rename from HudsonTrayTracker/Properties/licenses.licx rename to JenkinsTray/Properties/licenses.licx index 038fdb2..80450e4 100644 --- a/HudsonTrayTracker/Properties/licenses.licx +++ b/JenkinsTray/Properties/licenses.licx @@ -1,6 +1,6 @@ -DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/HudsonTrayTracker/Resources/MiscIcons/Unlock.ico b/JenkinsTray/Resources/MiscIcons/Unlock.ico similarity index 100% rename from HudsonTrayTracker/Resources/MiscIcons/Unlock.ico rename to JenkinsTray/Resources/MiscIcons/Unlock.ico diff --git a/HudsonTrayTracker/Resources/StatusIcons/Aborted.gif b/JenkinsTray/Resources/StatusIcons/Aborted.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Aborted.gif rename to JenkinsTray/Resources/StatusIcons/Aborted.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Aborted_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Aborted_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Aborted_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Aborted_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Aborted_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Aborted_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Aborted_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Aborted_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Disabled.gif b/JenkinsTray/Resources/StatusIcons/Disabled.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Disabled.gif rename to JenkinsTray/Resources/StatusIcons/Disabled.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Disabled_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Disabled_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Disabled_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Disabled_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Disabled_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Disabled_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Disabled_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Disabled_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Failed.gif b/JenkinsTray/Resources/StatusIcons/Failed.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Failed.gif rename to JenkinsTray/Resources/StatusIcons/Failed.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Failed_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Failed_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Failed_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Failed_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Failed_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Failed_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Failed_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Failed_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Indeterminate.gif b/JenkinsTray/Resources/StatusIcons/Indeterminate.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Indeterminate.gif rename to JenkinsTray/Resources/StatusIcons/Indeterminate.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Indeterminate_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Indeterminate_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Indeterminate_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Indeterminate_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Indeterminate_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Indeterminate_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Indeterminate_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Indeterminate_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Successful.gif b/JenkinsTray/Resources/StatusIcons/Successful.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Successful.gif rename to JenkinsTray/Resources/StatusIcons/Successful.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Successful_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Successful_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Successful_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Successful_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Successful_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Successful_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Successful_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Successful_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unknown.gif b/JenkinsTray/Resources/StatusIcons/Unknown.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unknown.gif rename to JenkinsTray/Resources/StatusIcons/Unknown.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unknown_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Unknown_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unknown_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Unknown_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unknown_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Unknown_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unknown_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Unknown_Stuck.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unstable.gif b/JenkinsTray/Resources/StatusIcons/Unstable.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unstable.gif rename to JenkinsTray/Resources/StatusIcons/Unstable.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unstable_BuildInProgress.gif b/JenkinsTray/Resources/StatusIcons/Unstable_BuildInProgress.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unstable_BuildInProgress.gif rename to JenkinsTray/Resources/StatusIcons/Unstable_BuildInProgress.gif diff --git a/HudsonTrayTracker/Resources/StatusIcons/Unstable_Stuck.gif b/JenkinsTray/Resources/StatusIcons/Unstable_Stuck.gif similarity index 100% rename from HudsonTrayTracker/Resources/StatusIcons/Unstable_Stuck.gif rename to JenkinsTray/Resources/StatusIcons/Unstable_Stuck.gif diff --git a/HudsonTrayTracker/Resources/TrayIcons/Aborted.ico b/JenkinsTray/Resources/TrayIcons/Aborted.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Aborted.ico rename to JenkinsTray/Resources/TrayIcons/Aborted.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Aborted_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Aborted_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Aborted_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Aborted_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Aborted_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Aborted_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Aborted_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Aborted_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Aborted_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Aborted_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Aborted_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Aborted_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Disabled.ico b/JenkinsTray/Resources/TrayIcons/Disabled.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Disabled.ico rename to JenkinsTray/Resources/TrayIcons/Disabled.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Disabled_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Disabled_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Disabled_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Disabled_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Disabled_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Disabled_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Disabled_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Disabled_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Disabled_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Disabled_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Disabled_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Disabled_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Failed.ico b/JenkinsTray/Resources/TrayIcons/Failed.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Failed.ico rename to JenkinsTray/Resources/TrayIcons/Failed.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Failed_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Failed_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Failed_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Failed_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Failed_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Failed_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Failed_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Failed_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Failed_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Failed_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Failed_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Failed_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Indeterminate.ico b/JenkinsTray/Resources/TrayIcons/Indeterminate.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Indeterminate.ico rename to JenkinsTray/Resources/TrayIcons/Indeterminate.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Indeterminate_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Indeterminate_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Indeterminate_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Indeterminate_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Indeterminate_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Indeterminate_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Indeterminate_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Indeterminate_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Indeterminate_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Indeterminate_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Indeterminate_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Indeterminate_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Successful.ico b/JenkinsTray/Resources/TrayIcons/Successful.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Successful.ico rename to JenkinsTray/Resources/TrayIcons/Successful.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Successful_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Successful_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Successful_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Successful_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Successful_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Successful_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Successful_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Successful_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Successful_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Successful_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Successful_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Successful_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unknown.ico b/JenkinsTray/Resources/TrayIcons/Unknown.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unknown.ico rename to JenkinsTray/Resources/TrayIcons/Unknown.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unknown_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Unknown_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unknown_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Unknown_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unknown_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Unknown_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unknown_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Unknown_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unknown_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Unknown_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unknown_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Unknown_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unstable.ico b/JenkinsTray/Resources/TrayIcons/Unstable.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unstable.ico rename to JenkinsTray/Resources/TrayIcons/Unstable.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unstable_BuildInProgress.ico b/JenkinsTray/Resources/TrayIcons/Unstable_BuildInProgress.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unstable_BuildInProgress.ico rename to JenkinsTray/Resources/TrayIcons/Unstable_BuildInProgress.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unstable_BuildInProgress_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Unstable_BuildInProgress_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unstable_BuildInProgress_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Unstable_BuildInProgress_Stuck.ico diff --git a/HudsonTrayTracker/Resources/TrayIcons/Unstable_Stuck.ico b/JenkinsTray/Resources/TrayIcons/Unstable_Stuck.ico similarity index 100% rename from HudsonTrayTracker/Resources/TrayIcons/Unstable_Stuck.ico rename to JenkinsTray/Resources/TrayIcons/Unstable_Stuck.ico diff --git a/HudsonTrayTracker/UI/AboutForm.Designer.cs b/JenkinsTray/UI/AboutForm.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/AboutForm.Designer.cs rename to JenkinsTray/UI/AboutForm.Designer.cs index 1bdfff0..047f798 100644 --- a/HudsonTrayTracker/UI/AboutForm.Designer.cs +++ b/JenkinsTray/UI/AboutForm.Designer.cs @@ -1,214 +1,214 @@ -namespace Hudson.TrayTracker.UI -{ - partial class AboutForm - { - /// - /// 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(AboutForm)); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); - this.versionLabelControl = new DevExpress.XtraEditors.LabelControl(); - this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); - this.linkLabel3 = new System.Windows.Forms.LinkLabel(); - this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); - this.labelControl6 = new DevExpress.XtraEditors.LabelControl(); - this.labelControl7 = new DevExpress.XtraEditors.LabelControl(); - this.linkLabel2 = new System.Windows.Forms.LinkLabel(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.linkLabel2, 0, 12); - this.tableLayoutPanel1.Controls.Add(this.labelControl7, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.labelControl6, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.labelControl5, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.labelControl1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.versionLabelControl, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.labelControl3, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.linkLabel3, 0, 4); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 13; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 249); - this.tableLayoutPanel1.TabIndex = 0; - // - // labelControl1 - // - this.labelControl1.Appearance.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Bold); - this.labelControl1.Appearance.Options.UseFont = true; - this.labelControl1.Appearance.Options.UseTextOptions = true; - this.labelControl1.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical; - this.labelControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelControl1.Location = new System.Drawing.Point(3, 20); - this.labelControl1.Margin = new System.Windows.Forms.Padding(3, 20, 3, 5); - this.labelControl1.Name = "labelControl1"; - this.labelControl1.Size = new System.Drawing.Size(278, 19); - this.labelControl1.TabIndex = 0; - this.labelControl1.Text = "Jenkins Tray"; - // - // versionLabelControl - // - this.versionLabelControl.Appearance.Options.UseTextOptions = true; - this.versionLabelControl.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.versionLabelControl.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.versionLabelControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.versionLabelControl.Location = new System.Drawing.Point(3, 49); - this.versionLabelControl.Margin = new System.Windows.Forms.Padding(3, 5, 3, 20); - this.versionLabelControl.Name = "versionLabelControl"; - this.versionLabelControl.Size = new System.Drawing.Size(278, 14); - this.versionLabelControl.TabIndex = 3; - this.versionLabelControl.Text = "Version -"; - // - // labelControl3 - // - this.labelControl3.Appearance.Options.UseTextOptions = true; - this.labelControl3.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl3.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelControl3.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelControl3.Location = new System.Drawing.Point(3, 88); - this.labelControl3.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.labelControl3.Name = "labelControl3"; - this.labelControl3.Size = new System.Drawing.Size(278, 15); - this.labelControl3.TabIndex = 4; - this.labelControl3.Text = "Main Contributor: Khang Yeen Lee"; - // - // linkLabel3 - // - this.linkLabel3.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.linkLabel3.AutoSize = true; - this.linkLabel3.Location = new System.Drawing.Point(45, 114); - this.linkLabel3.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6); - this.linkLabel3.Name = "linkLabel3"; - this.linkLabel3.Size = new System.Drawing.Size(193, 13); - this.linkLabel3.TabIndex = 2; - this.linkLabel3.TabStop = true; - this.linkLabel3.Text = "https://github.com/zionyx/jenkins-tray"; - this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // labelControl5 - // - this.labelControl5.Appearance.Options.UseTextOptions = true; - this.labelControl5.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl5.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelControl5.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelControl5.Location = new System.Drawing.Point(3, 163); - this.labelControl5.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.labelControl5.Name = "labelControl5"; - this.labelControl5.Size = new System.Drawing.Size(278, 15); - this.labelControl5.TabIndex = 8; - this.labelControl5.Text = "Original Project: Hudson Tray Tracker"; - // - // labelControl6 - // - this.labelControl6.Appearance.Options.UseTextOptions = true; - this.labelControl6.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl6.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelControl6.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelControl6.Location = new System.Drawing.Point(3, 138); - this.labelControl6.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.labelControl6.Name = "labelControl6"; - this.labelControl6.Size = new System.Drawing.Size(278, 15); - this.labelControl6.TabIndex = 9; - // - // labelControl7 - // - this.labelControl7.Appearance.Options.UseTextOptions = true; - this.labelControl7.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl7.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelControl7.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelControl7.Location = new System.Drawing.Point(3, 188); - this.labelControl7.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.labelControl7.Name = "labelControl7"; - this.labelControl7.Size = new System.Drawing.Size(278, 15); - this.labelControl7.TabIndex = 10; - this.labelControl7.Text = "Original Author: Alexis Seigneurin (for IDM)"; - // - // linkLabel2 - // - this.linkLabel2.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.linkLabel2.AutoSize = true; - this.linkLabel2.Location = new System.Drawing.Point(31, 214); - this.linkLabel2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6); - this.linkLabel2.Name = "linkLabel2"; - this.linkLabel2.Size = new System.Drawing.Size(222, 13); - this.linkLabel2.TabIndex = 11; - this.linkLabel2.TabStop = true; - this.linkLabel2.Text = "http://hudson-tray-tracker.googlecode.com/"; - this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); - // - // AboutForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 249); - this.Controls.Add(this.tableLayoutPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AboutForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "About Jenkins Tray"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private DevExpress.XtraEditors.LabelControl labelControl1; - private DevExpress.XtraEditors.LabelControl versionLabelControl; - private DevExpress.XtraEditors.LabelControl labelControl3; - private System.Windows.Forms.LinkLabel linkLabel3; - private System.Windows.Forms.LinkLabel linkLabel2; - private DevExpress.XtraEditors.LabelControl labelControl7; - private DevExpress.XtraEditors.LabelControl labelControl6; - private DevExpress.XtraEditors.LabelControl labelControl5; - } +namespace Jenkins.Tray.UI +{ + partial class AboutForm + { + /// + /// 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(AboutForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.versionLabelControl = new DevExpress.XtraEditors.LabelControl(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.linkLabel3 = new System.Windows.Forms.LinkLabel(); + this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl6 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl7 = new DevExpress.XtraEditors.LabelControl(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.linkLabel2, 0, 12); + this.tableLayoutPanel1.Controls.Add(this.labelControl7, 0, 11); + this.tableLayoutPanel1.Controls.Add(this.labelControl6, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.labelControl5, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.labelControl1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.versionLabelControl, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.labelControl3, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.linkLabel3, 0, 4); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 13; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 249); + this.tableLayoutPanel1.TabIndex = 0; + // + // labelControl1 + // + this.labelControl1.Appearance.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Bold); + this.labelControl1.Appearance.Options.UseFont = true; + this.labelControl1.Appearance.Options.UseTextOptions = true; + this.labelControl1.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical; + this.labelControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelControl1.Location = new System.Drawing.Point(3, 20); + this.labelControl1.Margin = new System.Windows.Forms.Padding(3, 20, 3, 5); + this.labelControl1.Name = "labelControl1"; + this.labelControl1.Size = new System.Drawing.Size(278, 19); + this.labelControl1.TabIndex = 0; + this.labelControl1.Text = "Jenkins Tray"; + // + // versionLabelControl + // + this.versionLabelControl.Appearance.Options.UseTextOptions = true; + this.versionLabelControl.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.versionLabelControl.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.versionLabelControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.versionLabelControl.Location = new System.Drawing.Point(3, 49); + this.versionLabelControl.Margin = new System.Windows.Forms.Padding(3, 5, 3, 20); + this.versionLabelControl.Name = "versionLabelControl"; + this.versionLabelControl.Size = new System.Drawing.Size(278, 14); + this.versionLabelControl.TabIndex = 3; + this.versionLabelControl.Text = "Version -"; + // + // labelControl3 + // + this.labelControl3.Appearance.Options.UseTextOptions = true; + this.labelControl3.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl3.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelControl3.Location = new System.Drawing.Point(3, 88); + this.labelControl3.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.labelControl3.Name = "labelControl3"; + this.labelControl3.Size = new System.Drawing.Size(278, 15); + this.labelControl3.TabIndex = 4; + this.labelControl3.Text = "Main Contributor: Khang Yeen Lee"; + // + // linkLabel3 + // + this.linkLabel3.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.linkLabel3.AutoSize = true; + this.linkLabel3.Location = new System.Drawing.Point(45, 114); + this.linkLabel3.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6); + this.linkLabel3.Name = "linkLabel3"; + this.linkLabel3.Size = new System.Drawing.Size(193, 13); + this.linkLabel3.TabIndex = 2; + this.linkLabel3.TabStop = true; + this.linkLabel3.Text = "https://github.com/zionyx/jenkins-tray"; + this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); + // + // labelControl5 + // + this.labelControl5.Appearance.Options.UseTextOptions = true; + this.labelControl5.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl5.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelControl5.Location = new System.Drawing.Point(3, 163); + this.labelControl5.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.labelControl5.Name = "labelControl5"; + this.labelControl5.Size = new System.Drawing.Size(278, 15); + this.labelControl5.TabIndex = 8; + this.labelControl5.Text = "Original Project: Hudson Tray Tracker"; + // + // labelControl6 + // + this.labelControl6.Appearance.Options.UseTextOptions = true; + this.labelControl6.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl6.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl6.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelControl6.Location = new System.Drawing.Point(3, 138); + this.labelControl6.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.labelControl6.Name = "labelControl6"; + this.labelControl6.Size = new System.Drawing.Size(278, 15); + this.labelControl6.TabIndex = 9; + // + // labelControl7 + // + this.labelControl7.Appearance.Options.UseTextOptions = true; + this.labelControl7.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl7.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl7.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelControl7.Location = new System.Drawing.Point(3, 188); + this.labelControl7.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.labelControl7.Name = "labelControl7"; + this.labelControl7.Size = new System.Drawing.Size(278, 15); + this.labelControl7.TabIndex = 10; + this.labelControl7.Text = "Original Author: Alexis Seigneurin (for IDM)"; + // + // linkLabel2 + // + this.linkLabel2.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(31, 214); + this.linkLabel2.Margin = new System.Windows.Forms.Padding(3, 6, 3, 6); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(222, 13); + this.linkLabel2.TabIndex = 11; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "http://hudson-tray-tracker.googlecode.com/"; + this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel_LinkClicked); + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 249); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "About Jenkins Tray"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.LabelControl versionLabelControl; + private DevExpress.XtraEditors.LabelControl labelControl3; + private System.Windows.Forms.LinkLabel linkLabel3; + private System.Windows.Forms.LinkLabel linkLabel2; + private DevExpress.XtraEditors.LabelControl labelControl7; + private DevExpress.XtraEditors.LabelControl labelControl6; + private DevExpress.XtraEditors.LabelControl labelControl5; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/AboutForm.cs b/JenkinsTray/UI/AboutForm.cs similarity index 86% rename from HudsonTrayTracker/UI/AboutForm.cs rename to JenkinsTray/UI/AboutForm.cs index dbe7b67..c134ee2 100644 --- a/HudsonTrayTracker/UI/AboutForm.cs +++ b/JenkinsTray/UI/AboutForm.cs @@ -1,51 +1,51 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Diagnostics; -using System.Reflection; -using Spring.Context.Support; -using Hudson.TrayTracker.Utils; -using Common.Logging; - -namespace Hudson.TrayTracker.UI -{ - public partial class AboutForm : DevExpress.XtraEditors.XtraForm - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public static AboutForm Instance - { - get - { - AboutForm instance = (AboutForm)ContextRegistry.GetContext().GetObject("AboutForm"); - return instance; - } - } - - public AboutForm() - { - InitializeComponent(); - - versionLabelControl.Text = string.Format(HudsonTrayTrackerResources.Version_Format, - FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); - } - - private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string url = ((LinkLabel)sender).Text; - UIUtils.OpenWebPage(url, logger); - } - - public static void ShowDialogOrFocus() - { - if (Instance.Visible) - Instance.Focus(); - else - Instance.ShowDialog(); - } - } +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using System.Reflection; +using Spring.Context.Support; +using Jenkins.Tray.Utils; +using Common.Logging; + +namespace Jenkins.Tray.UI +{ + public partial class AboutForm : DevExpress.XtraEditors.XtraForm + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public static AboutForm Instance + { + get + { + AboutForm instance = (AboutForm)ContextRegistry.GetContext().GetObject("AboutForm"); + return instance; + } + } + + public AboutForm() + { + InitializeComponent(); + + versionLabelControl.Text = string.Format(JenkinsTrayResources.Version_Format, + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion); + } + + private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string url = ((LinkLabel)sender).Text; + UIUtils.OpenWebPage(url, logger); + } + + public static void ShowDialogOrFocus() + { + if (Instance.Visible) + Instance.Focus(); + else + Instance.ShowDialog(); + } + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/AboutForm.resx b/JenkinsTray/UI/AboutForm.resx similarity index 98% rename from HudsonTrayTracker/UI/AboutForm.resx rename to JenkinsTray/UI/AboutForm.resx index 15783ff..5fd21f4 100644 --- a/HudsonTrayTracker/UI/AboutForm.resx +++ b/JenkinsTray/UI/AboutForm.resx @@ -1,654 +1,654 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA - CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA - AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA - g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac - 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// - ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// - /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA - l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 - wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// - /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// - //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA - l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 - z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// - //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// - //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa - 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// - /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A - kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD - 7P////////////////////////////////////////////////////////////////////////////// - /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA - iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz - tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// - ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// - /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA - 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA - pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA - xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA - sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 - zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// - /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// - //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA - q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 - 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// - //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD - 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu - 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA - 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA - nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA - pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA - sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA - +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA - zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A - //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A - sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA - +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA - v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA - AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA - iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA - n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A - t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA - wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A - 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA - 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 - wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL - 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta - 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - 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 - MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 - NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 - OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ - Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC - QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI - RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL - SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O - TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS - UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW - VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e - HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh - ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn - JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx - MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 - NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 - OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ - Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND - QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG - RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL - S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P - TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS - UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX - VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY - WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY - WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA - nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA - pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA - rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA - hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A - tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A - jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA - vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb - oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA - xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// - ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA - zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA - pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA - f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA - rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA - hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A - tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// - //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA - vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt - w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA - xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ - 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA - zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// - //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA - 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// - ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A - 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji - 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A - jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA - vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA - lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA - xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 - tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA - zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// - ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA - 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA - rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A - 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A - tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA - 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA - vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA - 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA - xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA - 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA - zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA - pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA - 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA - rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A - 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A - tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA - 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA - vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA - 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA - xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA - 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA - zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA - /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA - 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A - //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A - 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A - tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA - 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA - vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA - 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA - xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA - 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA - zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb - jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA - q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 - pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA - xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA - 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA - 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i - y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ - 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY - FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi - IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 - NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB - AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 - fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz - cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 - fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 - JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 - PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH - R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT - UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY - GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi - ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 - ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE - QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP - TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW - VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA - f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA - iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A - k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee - 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew - 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A - sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA - vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA - x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA - 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A - 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA - 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA - 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA - /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA - rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A - uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA - w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA - zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA - f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A - sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A - 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 - zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 - 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz - BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY - FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk - IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW - EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA + CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA + g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac + 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// + ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// + /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA + l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 + wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// + /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// + //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA + l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 + z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// + //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// + //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa + 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// + //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A + kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD + 7P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA + iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz + tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// + ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// + /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA + 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA + pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA + xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA + sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 + zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// + /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// + //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA + q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 + 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// + //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD + 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu + 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA + 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA + nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA + pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA + sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA + +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA + zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A + //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A + sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA + +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA + v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA + iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA + n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A + t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA + wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A + 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA + 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 + wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL + 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta + 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + 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 + MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 + NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 + OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ + Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC + QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI + RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL + SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O + TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS + UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW + VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e + HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh + ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn + JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx + MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 + NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 + OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ + Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND + QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG + RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL + S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P + TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS + UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX + VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY + WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY + WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA + nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA + pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA + rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA + hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A + tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A + jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA + vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb + oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA + xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// + ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA + zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA + pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA + f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA + rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA + hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A + tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// + //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA + vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt + w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA + xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ + 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA + zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// + //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA + 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// + ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A + 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji + 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A + jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA + vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA + lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA + xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 + tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA + zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// + ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA + 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA + rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A + 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A + tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA + 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA + vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA + 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA + xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA + 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA + zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA + pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA + 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA + rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A + 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A + tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA + 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA + vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA + 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA + xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA + 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA + zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA + /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA + 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A + //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A + 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A + tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA + 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA + vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA + 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA + xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA + 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA + zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA + AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb + jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA + q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 + pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA + xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA + 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA + 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i + y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ + 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY + FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi + IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 + NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB + AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 + fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz + cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 + fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 + JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 + PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH + R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT + UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY + GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi + ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 + ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE + QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP + TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW + VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA + f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA + iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A + k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee + 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew + 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A + sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA + vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA + x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA + 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A + 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA + 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA + 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA + /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA + rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A + uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA + w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA + zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA + f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A + sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A + 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 + zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 + 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz + BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY + FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk + IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW + EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/AuthenticationTokenForm.Designer.cs b/JenkinsTray/UI/AuthenticationTokenForm.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/AuthenticationTokenForm.Designer.cs rename to JenkinsTray/UI/AuthenticationTokenForm.Designer.cs index 9124dec..d26879b 100644 --- a/HudsonTrayTracker/UI/AuthenticationTokenForm.Designer.cs +++ b/JenkinsTray/UI/AuthenticationTokenForm.Designer.cs @@ -1,4 +1,4 @@ -namespace Hudson.TrayTracker.UI +namespace Jenkins.Tray.UI { partial class AuthenticationTokenForm { @@ -28,158 +28,158 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AuthenticationTokenForm)); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.validateButton = new DevExpress.XtraEditors.SimpleButton(); - this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); - this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); - this.TokentextBox = new DevExpress.XtraEditors.TextEdit(); - this.CausetextBox = new DevExpress.XtraEditors.TextEdit(); - this.Causelabel = new DevExpress.XtraEditors.LabelControl(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.TokentextBox.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.CausetextBox.Properties)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.labelControl2, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.TokentextBox, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.CausetextBox, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.Causelabel, 0, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 10); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(473, 104); - this.tableLayoutPanel1.TabIndex = 0; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 4; - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 2); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel2.Controls.Add(this.validateButton, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 68); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(467, 33); - this.tableLayoutPanel2.TabIndex = 8; - // - // validateButton - // - this.validateButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.validateButton.Location = new System.Drawing.Point(155, 3); - this.validateButton.Name = "validateButton"; - this.validateButton.Size = new System.Drawing.Size(75, 23); - this.validateButton.TabIndex = 2; - this.validateButton.Text = "OK"; - this.validateButton.Click += new System.EventHandler(this.validateButton_Click); - // - // cancelButton - // - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(236, 3); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(75, 23); - this.cancelButton.TabIndex = 3; - this.cancelButton.Text = "Cancel"; - // - // labelControl2 - // - this.labelControl2.Appearance.Options.UseTextOptions = true; - this.labelControl2.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.labelControl2.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelControl2.Dock = System.Windows.Forms.DockStyle.Left; - this.labelControl2.Location = new System.Drawing.Point(3, 5); - this.labelControl2.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.labelControl2.Name = "labelControl2"; - this.labelControl2.Size = new System.Drawing.Size(116, 28); - this.labelControl2.TabIndex = 1; - this.labelControl2.Text = "Authentication Token:\r\n (Case sensitive)"; - // - // TokentextBox - // - this.TokentextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.TokentextBox.Location = new System.Drawing.Point(125, 3); - this.TokentextBox.Name = "TokentextBox"; - this.TokentextBox.Size = new System.Drawing.Size(345, 20); - this.TokentextBox.TabIndex = 0; - // - // CausetextBox - // - this.CausetextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.CausetextBox.Location = new System.Drawing.Point(125, 41); - this.CausetextBox.Name = "CausetextBox"; - this.CausetextBox.Size = new System.Drawing.Size(345, 20); - this.CausetextBox.TabIndex = 1; - // - // Causelabel - // - this.Causelabel.Appearance.Options.UseTextOptions = true; - this.Causelabel.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.Causelabel.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.Causelabel.Dock = System.Windows.Forms.DockStyle.Left; - this.Causelabel.Location = new System.Drawing.Point(3, 43); - this.Causelabel.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.Causelabel.Name = "Causelabel"; - this.Causelabel.Size = new System.Drawing.Size(116, 17); - this.Causelabel.TabIndex = 3; - this.Causelabel.Text = "Cause Text (Optional):"; - // - // AuthenticationTokenForm - // - this.AcceptButton = this.validateButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(493, 124); - this.Controls.Add(this.tableLayoutPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AuthenticationTokenForm"; - this.Padding = new System.Windows.Forms.Padding(10); - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.TokentextBox.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.CausetextBox.Properties)).EndInit(); - this.ResumeLayout(false); - + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AuthenticationTokenForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.validateButton = new DevExpress.XtraEditors.SimpleButton(); + this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + this.TokentextBox = new DevExpress.XtraEditors.TextEdit(); + this.CausetextBox = new DevExpress.XtraEditors.TextEdit(); + this.Causelabel = new DevExpress.XtraEditors.LabelControl(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TokentextBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.CausetextBox.Properties)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.labelControl2, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.TokentextBox, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.CausetextBox, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.Causelabel, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 10); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(473, 104); + this.tableLayoutPanel1.TabIndex = 0; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.AutoSize = true; + this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 2); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.Controls.Add(this.validateButton, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 68); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(467, 33); + this.tableLayoutPanel2.TabIndex = 8; + // + // validateButton + // + this.validateButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.validateButton.Location = new System.Drawing.Point(155, 3); + this.validateButton.Name = "validateButton"; + this.validateButton.Size = new System.Drawing.Size(75, 23); + this.validateButton.TabIndex = 2; + this.validateButton.Text = "OK"; + this.validateButton.Click += new System.EventHandler(this.validateButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(236, 3); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 3; + this.cancelButton.Text = "Cancel"; + // + // labelControl2 + // + this.labelControl2.Appearance.Options.UseTextOptions = true; + this.labelControl2.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.labelControl2.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl2.Dock = System.Windows.Forms.DockStyle.Left; + this.labelControl2.Location = new System.Drawing.Point(3, 5); + this.labelControl2.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.labelControl2.Name = "labelControl2"; + this.labelControl2.Size = new System.Drawing.Size(116, 28); + this.labelControl2.TabIndex = 1; + this.labelControl2.Text = "Authentication Token:\r\n (Case sensitive)"; + // + // TokentextBox + // + this.TokentextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.TokentextBox.Location = new System.Drawing.Point(125, 3); + this.TokentextBox.Name = "TokentextBox"; + this.TokentextBox.Size = new System.Drawing.Size(345, 20); + this.TokentextBox.TabIndex = 0; + // + // CausetextBox + // + this.CausetextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.CausetextBox.Location = new System.Drawing.Point(125, 41); + this.CausetextBox.Name = "CausetextBox"; + this.CausetextBox.Size = new System.Drawing.Size(345, 20); + this.CausetextBox.TabIndex = 1; + // + // Causelabel + // + this.Causelabel.Appearance.Options.UseTextOptions = true; + this.Causelabel.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.Causelabel.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.Causelabel.Dock = System.Windows.Forms.DockStyle.Left; + this.Causelabel.Location = new System.Drawing.Point(3, 43); + this.Causelabel.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.Causelabel.Name = "Causelabel"; + this.Causelabel.Size = new System.Drawing.Size(116, 17); + this.Causelabel.TabIndex = 3; + this.Causelabel.Text = "Cause Text (Optional):"; + // + // AuthenticationTokenForm + // + this.AcceptButton = this.validateButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(493, 124); + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AuthenticationTokenForm"; + this.Padding = new System.Windows.Forms.Padding(10); + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TokentextBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.CausetextBox.Properties)).EndInit(); + this.ResumeLayout(false); + } - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private DevExpress.XtraEditors.LabelControl labelControl2; - private DevExpress.XtraEditors.LabelControl Causelabel; - private DevExpress.XtraEditors.TextEdit TokentextBox; - private DevExpress.XtraEditors.TextEdit CausetextBox; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private DevExpress.XtraEditors.SimpleButton validateButton; + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private DevExpress.XtraEditors.LabelControl labelControl2; + private DevExpress.XtraEditors.LabelControl Causelabel; + private DevExpress.XtraEditors.TextEdit TokentextBox; + private DevExpress.XtraEditors.TextEdit CausetextBox; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private DevExpress.XtraEditors.SimpleButton validateButton; private DevExpress.XtraEditors.SimpleButton cancelButton; diff --git a/HudsonTrayTracker/UI/AuthenticationTokenForm.cs b/JenkinsTray/UI/AuthenticationTokenForm.cs similarity index 89% rename from HudsonTrayTracker/UI/AuthenticationTokenForm.cs rename to JenkinsTray/UI/AuthenticationTokenForm.cs index 21e5cd9..f4f0b86 100644 --- a/HudsonTrayTracker/UI/AuthenticationTokenForm.cs +++ b/JenkinsTray/UI/AuthenticationTokenForm.cs @@ -8,11 +8,11 @@ using System.Windows.Forms; using System.Reflection; using Spring.Context.Support; -using Hudson.TrayTracker.Utils; -using Hudson.TrayTracker.Entities; +using Jenkins.Tray.Utils; +using Jenkins.Tray.Entities; using Common.Logging; -namespace Hudson.TrayTracker.UI +namespace Jenkins.Tray.UI { public partial class AuthenticationTokenForm : DevExpress.XtraEditors.XtraForm { @@ -37,7 +37,7 @@ public void UpdateValues() { if (referenceProject != null) { - this.Text = string.Format(HudsonTrayTrackerResources.AuthenticateToken_ProjectName, referenceProject.Name); + this.Text = string.Format(JenkinsTrayResources.AuthenticateToken_ProjectName, referenceProject.Name); TokentextBox.Text = referenceProject.AuthenticationToken; CausetextBox.Text = referenceProject.CauseText; } @@ -52,8 +52,8 @@ public static void ShowDialogOrFocus(Project project) Instance.Focus(); else Instance.ShowDialog(); - } - + } + private void validateButton_Click(object sender, EventArgs e) { if (referenceProject != null) diff --git a/HudsonTrayTracker/UI/AuthenticationTokenForm.resx b/JenkinsTray/UI/AuthenticationTokenForm.resx similarity index 98% rename from HudsonTrayTracker/UI/AuthenticationTokenForm.resx rename to JenkinsTray/UI/AuthenticationTokenForm.resx index 7d15032..d3179ba 100644 --- a/HudsonTrayTracker/UI/AuthenticationTokenForm.resx +++ b/JenkinsTray/UI/AuthenticationTokenForm.resx @@ -1,145 +1,145 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD7wEIC+8BCovvAQvr7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vA - QvD7wEJgAAAAAAAAAAAAAAAA+8BCQPvAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vA - Qv/7wEL/+8BC8AAAAAAAAAAAAAAAAPvAQk77wEL/+8BC//vAQv/7wEL/+8BC//vAQqr7wELU+8BC//vA - Qv/7wEL/+8BC//vAQv8AAAAAAAAAAAAAAAD7wEJO+8BC//vAQv/7wEL/+8BC//vAQv/7wEI6+8BCiPvA - Qv/7wEL/+8BC//vAQv/7wEL/AAAAAAAAAAAAAAAA+8BCTvvAQv/7wEL/+8BC//vAQv/7wELy+8BCIPvA - QmL7wEL/+8BC//vAQv/7wEL/+8BC/wAAAAAAAAAAAAAAAPvAQk77wEL/+8BC//vAQv/7wEL/+8BCpgAA - AAD7wEIA+8BC9PvAQv/7wEL/+8BC//vAQv8AAAAAAAAAAAAAAAD7wEJO+8BC//vAQv/7wEL/+8BC//vA - Quz7wEJS+8BCfPvAQv/7wEL/+8BC//vAQv/7wEL/AAAAAAAAAAAAAAAA+8BCTvvAQv/7wEL/+8BC//vA - Qv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC/wAAAAAAAAAAAAAAAPvAQjb7wEL/+8BC//vA - Qv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQub7wELE+8BCpgAAAAD7wEIA+8BCevvA - QtT7wELW+8BC1vvAQtb7wELW+8BC1vvAQtb7wELW+8BC1vvAQsj7wEJE+8BC//vAQtYAAAAAAAAAAAAA - AAAAAAAA+8BCIPvAQoj7wEJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvAQvr7wELcAAAAAAAA - AAAAAAAAAAAAAPvAQkD7wEL/+8BCmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7wELa+8BC+vvA - QhIAAAAAAAAAAAAAAAD7wEJw+8BC//vAQngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+8BCivvA - Qv/7wEKi+8BCCAAAAAD7wEIm+8BC5PvAQvz7wEIqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvA - QhL7wELe+8BC//vAQvD7wELc+8BC/PvAQv/7wEKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+8BCGPvAQp77wELq+8BC+vvAQtb7wEJu+8BCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA8AEAAPAAAADwAAAA8EAAAPBgAADwYAAA8GAAAPAAAADwAAAAOAEAAD7/AAA+fwAAPv8AABz/ - AACA/wAAw/8AAA== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD7wEIC+8BCovvAQvr7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vA + QvD7wEJgAAAAAAAAAAAAAAAA+8BCQPvAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vA + Qv/7wEL/+8BC8AAAAAAAAAAAAAAAAPvAQk77wEL/+8BC//vAQv/7wEL/+8BC//vAQqr7wELU+8BC//vA + Qv/7wEL/+8BC//vAQv8AAAAAAAAAAAAAAAD7wEJO+8BC//vAQv/7wEL/+8BC//vAQv/7wEI6+8BCiPvA + Qv/7wEL/+8BC//vAQv/7wEL/AAAAAAAAAAAAAAAA+8BCTvvAQv/7wEL/+8BC//vAQv/7wELy+8BCIPvA + QmL7wEL/+8BC//vAQv/7wEL/+8BC/wAAAAAAAAAAAAAAAPvAQk77wEL/+8BC//vAQv/7wEL/+8BCpgAA + AAD7wEIA+8BC9PvAQv/7wEL/+8BC//vAQv8AAAAAAAAAAAAAAAD7wEJO+8BC//vAQv/7wEL/+8BC//vA + Quz7wEJS+8BCfPvAQv/7wEL/+8BC//vAQv/7wEL/AAAAAAAAAAAAAAAA+8BCTvvAQv/7wEL/+8BC//vA + Qv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC/wAAAAAAAAAAAAAAAPvAQjb7wEL/+8BC//vA + Qv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQv/7wEL/+8BC//vAQub7wELE+8BCpgAAAAD7wEIA+8BCevvA + QtT7wELW+8BC1vvAQtb7wELW+8BC1vvAQtb7wELW+8BC1vvAQsj7wEJE+8BC//vAQtYAAAAAAAAAAAAA + AAAAAAAA+8BCIPvAQoj7wEJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvAQvr7wELcAAAAAAAA + AAAAAAAAAAAAAPvAQkD7wEL/+8BCmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7wELa+8BC+vvA + QhIAAAAAAAAAAAAAAAD7wEJw+8BC//vAQngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+8BCivvA + Qv/7wEKi+8BCCAAAAAD7wEIm+8BC5PvAQvz7wEIqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvA + QhL7wELe+8BC//vAQvD7wELc+8BC/PvAQv/7wEKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+8BCGPvAQp77wELq+8BC+vvAQtb7wEJu+8BCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA8AEAAPAAAADwAAAA8EAAAPBgAADwYAAA8GAAAPAAAADwAAAAOAEAAD7/AAA+fwAAPv8AABz/ + AACA/wAAw/8AAA== + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/ClaimBuildForm.Designer.cs b/JenkinsTray/UI/ClaimBuildForm.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/ClaimBuildForm.Designer.cs rename to JenkinsTray/UI/ClaimBuildForm.Designer.cs index 312f958..41493ad 100644 --- a/HudsonTrayTracker/UI/ClaimBuildForm.Designer.cs +++ b/JenkinsTray/UI/ClaimBuildForm.Designer.cs @@ -1,246 +1,246 @@ -namespace Hudson.TrayTracker.UI -{ - partial class ClaimBuildForm - { - /// - /// 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(ClaimBuildForm)); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.buildNumberLabel = new DevExpress.XtraEditors.LabelControl(); - this.claimBuildLabel = new DevExpress.XtraEditors.LabelControl(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.stickyCheckEdit = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.reasonLabel = new DevExpress.XtraEditors.LabelControl(); - this.reasonMemoEdit = new DevExpress.XtraEditors.MemoEdit(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.okButton = new DevExpress.XtraEditors.SimpleButton(); - this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.stickyCheckEdit.Properties)).BeginInit(); - this.tableLayoutPanel4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.reasonMemoEdit.Properties)).BeginInit(); - this.tableLayoutPanel5.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel5, 0, 3); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(329, 191); - this.tableLayoutPanel1.TabIndex = 0; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 2; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.buildNumberLabel, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.claimBuildLabel, 0, 0); - this.tableLayoutPanel2.Location = new System.Drawing.Point(13, 13); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(83, 19); - this.tableLayoutPanel2.TabIndex = 5; - // - // buildNumberLabel - // - this.buildNumberLabel.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.buildNumberLabel.Appearance.Options.UseFont = true; - this.buildNumberLabel.Location = new System.Drawing.Point(73, 3); - this.buildNumberLabel.Name = "buildNumberLabel"; - this.buildNumberLabel.Size = new System.Drawing.Size(7, 13); - this.buildNumberLabel.TabIndex = 1; - this.buildNumberLabel.Text = "1"; - // - // claimBuildLabel - // - this.claimBuildLabel.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.claimBuildLabel.Appearance.Options.UseFont = true; - this.claimBuildLabel.Location = new System.Drawing.Point(3, 3); - this.claimBuildLabel.Name = "claimBuildLabel"; - this.claimBuildLabel.Size = new System.Drawing.Size(64, 13); - this.claimBuildLabel.TabIndex = 0; - this.claimBuildLabel.Text = "Claim build:"; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.ColumnCount = 1; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Controls.Add(this.stickyCheckEdit, 0, 0); - this.tableLayoutPanel3.Location = new System.Drawing.Point(13, 118); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 1; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(261, 25); - this.tableLayoutPanel3.TabIndex = 6; - // - // stickyCheckEdit - // - this.stickyCheckEdit.Location = new System.Drawing.Point(3, 3); - this.stickyCheckEdit.Name = "stickyCheckEdit"; - this.stickyCheckEdit.Properties.AutoWidth = true; - this.stickyCheckEdit.Properties.Caption = "Sticky (automatically applies if the next run fails)"; - this.stickyCheckEdit.Size = new System.Drawing.Size(255, 19); - this.stickyCheckEdit.TabIndex = 1; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.AutoSize = true; - this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel4.ColumnCount = 2; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Controls.Add(this.reasonLabel, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.reasonMemoEdit, 1, 0); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(13, 38); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.RowCount = 1; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(303, 74); - this.tableLayoutPanel4.TabIndex = 7; - // - // reasonLabel - // - this.reasonLabel.Location = new System.Drawing.Point(3, 3); - this.reasonLabel.Name = "reasonLabel"; - this.reasonLabel.Size = new System.Drawing.Size(40, 13); - this.reasonLabel.TabIndex = 2; - this.reasonLabel.Text = "Reason:"; - // - // reasonMemoEdit - // - this.reasonMemoEdit.Dock = System.Windows.Forms.DockStyle.Fill; - this.reasonMemoEdit.Location = new System.Drawing.Point(49, 3); - this.reasonMemoEdit.Name = "reasonMemoEdit"; - this.reasonMemoEdit.Size = new System.Drawing.Size(251, 68); - this.reasonMemoEdit.TabIndex = 0; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.AutoSize = true; - this.tableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel5.ColumnCount = 4; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel5.Controls.Add(this.okButton, 1, 0); - this.tableLayoutPanel5.Controls.Add(this.cancelButton, 2, 0); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(13, 149); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 1; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.Size = new System.Drawing.Size(303, 29); - this.tableLayoutPanel5.TabIndex = 8; - // - // okButton - // - this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.okButton.Location = new System.Drawing.Point(73, 3); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(75, 23); - this.okButton.TabIndex = 2; - this.okButton.Text = "OK"; - this.okButton.Click += new System.EventHandler(this.okButton_Click); - // - // cancelButton - // - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(154, 3); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(75, 23); - this.cancelButton.TabIndex = 3; - this.cancelButton.Text = "Cancel"; - this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); - // - // ClaimBuildForm - // - this.AcceptButton = this.okButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.ClientSize = new System.Drawing.Size(329, 191); - this.Controls.Add(this.tableLayoutPanel1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "ClaimBuildForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Claim build"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.stickyCheckEdit.Properties)).EndInit(); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.reasonMemoEdit.Properties)).EndInit(); - this.tableLayoutPanel5.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private DevExpress.XtraEditors.LabelControl claimBuildLabel; - private DevExpress.XtraEditors.LabelControl buildNumberLabel; - private DevExpress.XtraEditors.LabelControl reasonLabel; - private DevExpress.XtraEditors.CheckEdit stickyCheckEdit; - private DevExpress.XtraEditors.MemoEdit reasonMemoEdit; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; - private DevExpress.XtraEditors.SimpleButton okButton; - private DevExpress.XtraEditors.SimpleButton cancelButton; - - } +namespace Jenkins.Tray.UI +{ + partial class ClaimBuildForm + { + /// + /// 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(ClaimBuildForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.buildNumberLabel = new DevExpress.XtraEditors.LabelControl(); + this.claimBuildLabel = new DevExpress.XtraEditors.LabelControl(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.stickyCheckEdit = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.reasonLabel = new DevExpress.XtraEditors.LabelControl(); + this.reasonMemoEdit = new DevExpress.XtraEditors.MemoEdit(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.okButton = new DevExpress.XtraEditors.SimpleButton(); + this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.stickyCheckEdit.Properties)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.reasonMemoEdit.Properties)).BeginInit(); + this.tableLayoutPanel5.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel5, 0, 3); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); + this.tableLayoutPanel1.RowCount = 4; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(329, 191); + this.tableLayoutPanel1.TabIndex = 0; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.AutoSize = true; + this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.buildNumberLabel, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.claimBuildLabel, 0, 0); + this.tableLayoutPanel2.Location = new System.Drawing.Point(13, 13); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(83, 19); + this.tableLayoutPanel2.TabIndex = 5; + // + // buildNumberLabel + // + this.buildNumberLabel.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.buildNumberLabel.Appearance.Options.UseFont = true; + this.buildNumberLabel.Location = new System.Drawing.Point(73, 3); + this.buildNumberLabel.Name = "buildNumberLabel"; + this.buildNumberLabel.Size = new System.Drawing.Size(7, 13); + this.buildNumberLabel.TabIndex = 1; + this.buildNumberLabel.Text = "1"; + // + // claimBuildLabel + // + this.claimBuildLabel.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.claimBuildLabel.Appearance.Options.UseFont = true; + this.claimBuildLabel.Location = new System.Drawing.Point(3, 3); + this.claimBuildLabel.Name = "claimBuildLabel"; + this.claimBuildLabel.Size = new System.Drawing.Size(64, 13); + this.claimBuildLabel.TabIndex = 0; + this.claimBuildLabel.Text = "Claim build:"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.AutoSize = true; + this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.Controls.Add(this.stickyCheckEdit, 0, 0); + this.tableLayoutPanel3.Location = new System.Drawing.Point(13, 118); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(261, 25); + this.tableLayoutPanel3.TabIndex = 6; + // + // stickyCheckEdit + // + this.stickyCheckEdit.Location = new System.Drawing.Point(3, 3); + this.stickyCheckEdit.Name = "stickyCheckEdit"; + this.stickyCheckEdit.Properties.AutoWidth = true; + this.stickyCheckEdit.Properties.Caption = "Sticky (automatically applies if the next run fails)"; + this.stickyCheckEdit.Size = new System.Drawing.Size(255, 19); + this.stickyCheckEdit.TabIndex = 1; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.AutoSize = true; + this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel4.ColumnCount = 2; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.reasonLabel, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.reasonMemoEdit, 1, 0); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(13, 38); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 1; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(303, 74); + this.tableLayoutPanel4.TabIndex = 7; + // + // reasonLabel + // + this.reasonLabel.Location = new System.Drawing.Point(3, 3); + this.reasonLabel.Name = "reasonLabel"; + this.reasonLabel.Size = new System.Drawing.Size(40, 13); + this.reasonLabel.TabIndex = 2; + this.reasonLabel.Text = "Reason:"; + // + // reasonMemoEdit + // + this.reasonMemoEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.reasonMemoEdit.Location = new System.Drawing.Point(49, 3); + this.reasonMemoEdit.Name = "reasonMemoEdit"; + this.reasonMemoEdit.Size = new System.Drawing.Size(251, 68); + this.reasonMemoEdit.TabIndex = 0; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.AutoSize = true; + this.tableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel5.ColumnCount = 4; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.Controls.Add(this.okButton, 1, 0); + this.tableLayoutPanel5.Controls.Add(this.cancelButton, 2, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(13, 149); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 1; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.Size = new System.Drawing.Size(303, 29); + this.tableLayoutPanel5.TabIndex = 8; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(73, 3); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 2; + this.okButton.Text = "OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(154, 3); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 3; + this.cancelButton.Text = "Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // ClaimBuildForm + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(329, 191); + this.Controls.Add(this.tableLayoutPanel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ClaimBuildForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Claim build"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.stickyCheckEdit.Properties)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.reasonMemoEdit.Properties)).EndInit(); + this.tableLayoutPanel5.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private DevExpress.XtraEditors.LabelControl claimBuildLabel; + private DevExpress.XtraEditors.LabelControl buildNumberLabel; + private DevExpress.XtraEditors.LabelControl reasonLabel; + private DevExpress.XtraEditors.CheckEdit stickyCheckEdit; + private DevExpress.XtraEditors.MemoEdit reasonMemoEdit; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private DevExpress.XtraEditors.SimpleButton okButton; + private DevExpress.XtraEditors.SimpleButton cancelButton; + + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/ClaimBuildForm.cs b/JenkinsTray/UI/ClaimBuildForm.cs similarity index 88% rename from HudsonTrayTracker/UI/ClaimBuildForm.cs rename to JenkinsTray/UI/ClaimBuildForm.cs index 3fce136..baa3d52 100644 --- a/HudsonTrayTracker/UI/ClaimBuildForm.cs +++ b/JenkinsTray/UI/ClaimBuildForm.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.BusinessComponents; -using Spring.Context.Support; - -namespace Hudson.TrayTracker.UI -{ - public partial class ClaimBuildForm : DevExpress.XtraEditors.XtraForm - { - ClaimService claimService; - - Project project; - BuildDetails buildDetails; - - public ClaimBuildForm() - { - InitializeComponent(); - - claimService = (ClaimService)ContextRegistry.GetContext().GetObject("ClaimService"); - } - - public void Initialize(Project project, BuildDetails buildDetails) - { - this.project = project; - this.buildDetails = buildDetails; - - buildNumberLabel.Text = buildDetails.Number.ToString(); - reasonMemoEdit.Select(); - } - - private void okButton_Click(object sender, EventArgs e) - { - string reason = reasonMemoEdit.Text; - bool sticky = stickyCheckEdit.Checked; - claimService.ClaimBuild(project, buildDetails, reason, sticky); - } - - private void cancelButton_Click(object sender, EventArgs e) - { - Close(); - } - } +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.Entities; +using Jenkins.Tray.BusinessComponents; +using Spring.Context.Support; + +namespace Jenkins.Tray.UI +{ + public partial class ClaimBuildForm : DevExpress.XtraEditors.XtraForm + { + ClaimService claimService; + + Project project; + BuildDetails buildDetails; + + public ClaimBuildForm() + { + InitializeComponent(); + + claimService = (ClaimService)ContextRegistry.GetContext().GetObject("ClaimService"); + } + + public void Initialize(Project project, BuildDetails buildDetails) + { + this.project = project; + this.buildDetails = buildDetails; + + buildNumberLabel.Text = buildDetails.Number.ToString(); + reasonMemoEdit.Select(); + } + + private void okButton_Click(object sender, EventArgs e) + { + string reason = reasonMemoEdit.Text; + bool sticky = stickyCheckEdit.Checked; + claimService.ClaimBuild(project, buildDetails, reason, sticky); + } + + private void cancelButton_Click(object sender, EventArgs e) + { + Close(); + } + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/ClaimBuildForm.resx b/JenkinsTray/UI/ClaimBuildForm.resx similarity index 98% rename from HudsonTrayTracker/UI/ClaimBuildForm.resx rename to JenkinsTray/UI/ClaimBuildForm.resx index 6ad62fa..e9f0694 100644 --- a/HudsonTrayTracker/UI/ClaimBuildForm.resx +++ b/JenkinsTray/UI/ClaimBuildForm.resx @@ -1,449 +1,449 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAYAKSkAAAEAIAC5GwAAZgAAACkpAAABAAgAgQwAAB8cAAAgIAAAAQAgAKgQAACgKAAAICAAAAEA - CACoCAAASDkAABAQAAABACAAaAQAAPBBAAAQEAAAAQAIAGgFAABYRgAAKAAAACkAAABSAAAAAQAgAAAA - AACINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKv/v/UKH4/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA1uf//wh99/8Igvf/MYrn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn - //8Ifff/Qqb3/5TT//8plvf/MYrn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///CH33/zmi9/9Ssvf/lNP3/5zT - 9/8plvf/OY7n/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA1uf//wh99/8xqvf/Urb//zmu//+Ey///pdf//6XX//8povf/OZLv/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn - //8Ifff/OaL3/2vD//9rw///c8P//6XX//+l1///pdf//5zX//8xlvf/OZr3/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///CIL3/zmi9/9Stv//c8P//5zX - //+c1///pdf//6XX//+c1///nNf//6XX//8xpvf/Qp7v/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA1uf//xCC9/85ovf/Urb//zmq9/85rv//e8v//6XX//+c1///nNf//5zX - //+c1///pdf//6XX//8xlvf/Qp73/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn - //8Qgvf/OaL3/1Ky9/8xqvf/Mab3/zmq9/+U0///nNf//5zX//+c1///nNf//5zX//+U0///pdf//6XX - //8plvf/Sp73/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///EIL3/zma9/9Ssvf/Mab3/zGq - 9/9rw///e8f//5zX//+c1///nNf//5zX//+c1///nNf//5zX//+c1///pdf//6XX//8xlvf/SqL//wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAzuf//wiC9/85ovf/UrL3/zGm9/8xpvf/Mab3/3vL//+c1///nNf//5zX - //+c1///nNf//5zX//+c1///nNf//5TT//+c1///nNf//6XX//8xlvf/Sp73/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn - //8Qgvf/OaL3/1Ky9/8xpvf/KaL3/ymi9/8xpvf/Mab3/2vD//+c1///nNf//5zX//+c1///nNf//5zX - //+c1///lNP//5zX//+c1///nM/3/6XX//8xlvf/SqL//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///GIb3/4zH9/+My/f/KaLv/ymi - 9/8povf/KaL3/zGm9/8xpvf/Y77//5zX//+U0///nNf//5zX//+c1///nNf//5TT//+U0///lNP//5TT - //+cz/f/nNf//6XX//8xlvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAzuf//xiG9/+Mx/f/rdv3/3vH//8pou//KaL3/ymi9/8povf/KaL3/1q6 - 9/+Ey/f/nNf//5TT//+c1///lNP//5TT//+U0///lNP//5TT//+U0///lNP3/5TP//+Uz///nNP3/6XX - //8xlvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn - //8Yhvf/hMv3/63b9/+U0/f/Y7b3/yme7/8pou//KaLv/ymi9/8povf/hMv3/5zT9/+U0///lNP//5TT - //+U0///nNP3/5TT//+U0/f/lNP3/5TT9/+U0/f/lM///5TP//+Uz/f/nNP3/6XX//8xlvf/SqL3/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///EIL3/4zH9/+t2/f/lM/3/5TP - 9/+My/f/UrL3/yme7/8xou//a8P//zGi7/8povf/Mab3/5TP9/+U0///lNP//5TT//+U0///lNP//5TT - 9/+U0/f/lNP3/5TP9/+Uz///lM///5TP9/+Uz/f/nNP3/6XX//8plvf/SqL3/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAzuf//xCC9/85nu//Y7b3/2u29/+Uz/f/lM/3/5TP9/+Uz/f/e8P3/4zL - 9/+U0/f/a773/ymi7/8povf/c8P3/5TT9/+U0/f/lNP3/5TT9/+U0/f/lNP3/5TT9/+U0/f/lM/3/5TP - //+Uz/f/lM/3/5TP9/+Uz/f/nNP3/6XX9/8plvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM7n - //8Qgvf/OZ7v/1Ku7/8hmuf/IZbv/zGe7/9ruu//lM/3/5TP9/+Uz/f/lM/3/4zL9/8xpvf/KZ7v/0qu - 9/+My/f/lNP//5TT9/+Uz/f/lNP3/5TT9/+U0/f/lM/3/5TP9/+U0/f/lM/3/5TP9/+Uz/f/lM/3/5TP - 9/+My/f/pc/3/6XX9/8plvf/SqL3/wAAAAAAAAAAAAAAAAAAAADO5///EIL3/zme7/9Sru//IZbv/yGW - 7/8hlu//IZbv/yGa5/9Ssu//lM/3/5TP9/+Uz/f/c8P3/yme7/8pnu//Wrb3/4TL9/+Ey/f/lNP3/5TT - 9/+Uz/f/lM/3/5TP9/+Uz/f/lNP3/5TP9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL9/+My/f/nNP3/6XX - 9/8plvf/SqL3/wAAAAAAAAAAzuf//xCC9/85nu//Uq7v/yGW7/8Ykuf/GJLn/xiS5/8hlu//IZbv/yGa - 7/9Sru//lM/3/5TP9/+Uz/f/UrL3/yme7/8pnu//KZ7v/zGi7/+Mx+//lNP3/5TP9/+U0/f/lM/3/5TP - 9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL9/+My/f/jMv3/4zL9/+My/f/nM/3/6XX9/8plvf/Sp73/wAA - AAAQgvf/MZ7v/1qy7/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/IZrv/yGa7/9Ssu//jMv3/5TP - 9/+My/f/WrLv/3vD9/9rvvf/IZrv/2vD//+U0/f/jMv3/5TP9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL - 9/+Uz/f/lM/3/4zL9/+My/f/jMv3/4zL9/+My/f/nM/3/6XX9/8Yivf/e7r//3O2//8Yhvf/UrLv/zmi - 5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/yGa7/8hmu//GJLn/yGa7/9rvvf/lM/3/5TP9/+My/f/lNP3/4zL - 9/85pu//lNP3/3vD7/+My/f/lNP3/5TT9/+My/f/lNP3/4zL9/+cz/f/jMv3/4zL9/+My/f/jMv3/4zL - 9/+My/f/jMfv/4zL9/+l1/f/a7bv/xCC9//O5///AAAAAHO2//8Yhvf/Wq7v/zmi5/8Ykuf/GJLn/xiS - 5/8Ykuf/GJLn/yGa7/8hlu//IZrv/zGi7/+My/f/jMv3/5TT9/97w/f/MaLv/yGa7/85pu//IZrv/zGi - 7/97w+//lM/3/5TP9/+My/f/jMv3/4zL9/+My/f/jMv3/4zL9/+My/f/jMfv/4zL9/+My/f/jMv3/0Ke - 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAHO2//8Yivf/WrLv/zmi5/8Qkuf/GJLn/xiS5/8Ykuf/GJLn/xiS - 5/8Ykuf/GJLn/2u67/+My/f/jMv3/2O29/8hmu//IZrv/yGa7/8hmu//GJLn/3vD7/+My/f/c8P3/4TH - 9/+My/f/jMv3/4zL9/+My/f/jMv3/4zL9/+Mx+//c77v/63X9/9jtvf/EIL3/87n//8AAAAAAAAAAAAA - AAAAAAAAAAAAAHO2//8Yivf/WrLv/zmi5/8Qjuf/EJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/MZ7v/4zL - 9/+Uz/f/hMv3/xiS5/8Ykuf/GJLn/xiS5/8hmu//Wrb3/1Ky7/8Ykuf/IZrn/4zL9/+Ew+//WrLv/1qy - 7/+Mx+//c773/yGa5/9aru//Wq7v/wiC9//O5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 - //8Yivf/Y7bv/zmi5/8Ykuf/EJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/c8P3/4zL9/+My/f/UrLv/0Ki - 7/8xou//GJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/e8P3/1qy7/8Ykuf/GJLe/3O+7/9jtu//WrLv/0Ki - 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/Y7bv/0Ki - 7/8Qjuf/GJLn/xiS5/8Qkuf/GJLn/xiS5/9asu//jMv3/4zL9/+My/f/jMv3/2u67/8Ykuf/GJLn/xiS - 5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xCS5/8Ykuf/GJLn/1qy7/85ouf/EIL3/9bn//8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/Y7bv/zmi5/8Qjuf/EJLn/xCS - 5/8Qkuf/GJLn/0qq7/+My/f/jMv3/4zH7/+Ew+//Wq7v/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xiS - 5/8Qkuf/EJLn/xiS5/9jtu//QqLv/wiC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/Y7bv/0Ki5/8Qjuf/EJLn/xiO3v8Yjt7/OaLn/4zH - 7/+My/f/c77v/xiS5/8Qkuf/GJLn/xCO5/8Ykuf/GJLn/xCO5/8Ykuf/EI7n/xCO5/8Ykuf/Y7bv/0Ki - 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHO2//8Yivf/a7bv/0Ki5/8Yjt7/EI7e/xiO3v8hluf/jMfv/4zL9/9ruu//EI7n/xCO - 5/8Qjuf/EI7n/xCO5/8Qjuf/EI7n/xCO5/8Qjuf/GJLn/2Oy5/9Cou//CIL3/9bn//8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 - //8Yhvf/a7bv/0Ki5/8Qjt7/GI7e/zGe5/+Mx+//jMfv/2u67/8Yjt7/EI7n/xCO5/8Qjuf/EI7n/xCO - 3v8Yjt7/EI7e/xiS5/9jsuf/QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/a7bv/0Ki - 5/8Qjt7/QqLn/4zH7/+Mx+//hMPv/1qy7/8xnuf/EI7n/xCO3v8Qjuf/EI7e/xCO3v8Yjt7/Y7Ln/0Ki - 7/8Igvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/a7bv/0Ki5/9aruf/jMfv/4zH - 7/+Mx+//jMfv/2u25/8Qjt7/EI7e/xCO3v8Qjt7/GI7e/2u27/9Cou//CIL3/9bn//8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/a7bv/4zH7/+Ew+//hMPv/2u27/9asu//QqLn/wiK - 3v8Qjt7/CIbe/xiO3v9rtu//QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHO2//8Yhvf/tdv3/6XP9/+Ew+//EI7e/xCO3v8Iit7/CIbe/wiG3v8Yjt7/a7bv/0Ki - 7/8Qgvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 - //9Knvf/tdv3/4TD7/8Iht7/CIbe/wiG3v8Iht7/EI7e/2u25/9Couf/CH33/9bn//8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//9Kovf/nM/3/zme - 5/8Iht7/CIbe/xCO3v9rtuf/QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//9Cnvf/pdf3/0Ki5/8Qjt7/a7bn/0Ke - 7/8Igvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//85nu//a7bn/2u27/9Cnu//EIL3/9bn//8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAHO2//8Yhvf/MZ7n/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 - //8Qgvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//+f//4AAAP//w///gAAA//+B//+AAAD//wD//4AAAP/+ - AH//gAAA//wAP/+AAAD/+AAf/4AAAP/wAA//gAAA/+AAB/+AAAD/wAAD/4AAAP+AAAH/gAAA/wAAAP+A - AAD+AAAAf4AAAPwAAAA/gAAA+AAAAB+AAADwAAAAD4AAAOAAAAAHgAAAwAAAAAOAAACAAAAAAYAAAAAA - AAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAgAAAwAAAAAGAAADgAAAAA4AAAPAAAAAHgAAA+AAAAA+A - AAD8AAAAH4AAAP4AAAA/gAAA/wAAAH+AAAD/gAAA/4AAAP/AAAH/gAAA/+AAA/+AAAD/8AAH/4AAAP/4 - AA//gAAA//wAH/+AAAD//gA//4AAAP//AH//gAAA//+A//+AAAD//8H//4AAAP//4///gAAAAAAAAAAo - AAAAKQAAAFIAAAABAAgAAAAAACINAAAAAAAAAAAAAAAAAAAAAAAACH33/wiG3v8Iit7/EI7e/xiO3v8Y - kt7/EI7n/xCS5/8Ykuf/CIL3/xCC9/8Yhvf/GIr3/zGK5/85juf/IZbn/yGa5/8hlu//IZrv/yme7/8x - nuf/OZ7n/zmS7/8xnu//OZ7v/ymW9/8xlvf/OZr3/ymi7/85ouf/MaLv/zmm7/8povf/Mab3/zmi9/8x - qvf/Oar3/zmu//9Cnu//Qp73/0qe9/9Couf/QqLv/0qq7/9aruf/Uq7v/1qu7/9Ssu//WrLv/0Km9/9K - ovf/Sq73/0qi//9Qofj/UrL3/1q29/9auvf/Urb//2Oy5/9rtuf/Y7bv/2u27/9ruu//c77v/2O29/9r - tvf/a773/2O+//9zvvf/c7b//3u6//97w+//a8P//3PD9/97w/f/c8P//3vH//97y///ir/7/4TD7/+M - x+//hMf3/4zH9/+Ey/f/jMv3/4TL//+Uz/f/nM/3/5TP//+U0/f/nNP3/5TT//+c1///pc/3/6XX9/+t - 1/f/rdv3/6XX//+12/f/zuf//9bn////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A - AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAP////////////////////// - //9lNf//////////////////////////AAAA////////////////////////ZAkJY/////////////// - //////////8AAAD//////////////////////2UAMVsZDf///////////////////////wAAAP////// - //////////////9kACI2WVogZP//////////////////////AAAA////////////////////ZQAjOSVV - YWEgFv////////////////////8AAAD//////////////////2QAIkhIS2FhYVwhZP////////////// - /////wAAAP////////////////9lCSI5S1xcYWFcXGEhJv//////////////////AAAA//////////// - ////ZAoiOSQlTWFcXFxcYWEXZP////////////////8AAAD//////////////2UKIjYjISRbXFxcXFxb - YWEZKP///////////////wAAAP////////////9kChs2ISNITFxcXFxcXFxcYWEZZf////////////// - AAAA////////////ZQkiNiEhIU1cXFxcXFxcXFtcXGEaKP////////////8AAAD//////////2QKIjYh - ICAhIUhcXFxcXFxcW1xcV2EZZf///////////wAAAP////////9lC1JUHCAgICEhQ1xbXFxcXFtbW1tX - XGEaMv//////////AAAA////////YwtSYEwcICAgIDhTXFtcW1tbW1tbWVhYWmEZZf////////8AAAD/ - /////2ULU2BZQBMcHCAgU1pbW1tbWltZWVlZWFhWWmEaMv///////wAAAP////9kClJgVlZUNhMeSB4g - IVZbW1tbW1lZWVZYWFZWWmERZf//////AAAA////ZQoYQEFWVlZWSlRZQhwgSVlZWVlZWVlZVlhWVlZW - Wl4ZMv////8AAAD//2MKGC0QERc+VlZWVlQhEzNUW1lWWVlZVlZZVlZWVlZUXV4SZf///wAAAP9lChgt - ERISERAvVlZWSRMTN1NTWVlWVlZWWVZWVlZWVlRUWl4ZMf//AAAAYwofLxIICAgRERItVlZWNhMTEx5Q - WVZZVlZWVlZWVlRUVFRUWlwSY/8AAAAKHi8HBxAHCAgIEhIvVFZUMEpCEkhZVFZWVlZWVlRWVlRUVFNU - WV4STQAAAE0SLx0QBwgICBISCBJCVlZUWVQfWUdUWVlUWVRXVFRUWVNZUFlgXEhkAAAA/2VcWyMFBxAH - EBIREh5UVFlKHhIfEh5HVlZUVFRUVFRUUFRTUyQHZP8AAAD//1UHOB0HCAgHCAgICD5UVEASEhISCEdU - SVNUVFNZVFNQP2BcXGX//wAAAP///2VcWx8HBwgIEAgIHlRWUwgICAgQNy8IEFRPMDBQPxAvOAdk//// - AAAA/////1USOB0FBwgHCAgISVRULyoeCAgICAgISjAIBT84OE1cZf////8AAAD//////2VcXCQHBxAH - BwgwVFRUVD4ICAgICAgICAcHBzgdB2T//////wAAAP///////00SOB0DBwMHCCtUVFBPLggICAgICAcH - BxA4TVxl////////AAAA/////////2VcXB8HBwUFHVBUPwgHCAYICAYIBgcQPB8HZP////////8AAAD/ - /////////1USQikFAwUQUFQ+BgYGBgYGBgcHBThNXGX//////////wAAAP///////////2VcXB8FBRRQ - UD4FBgYGBgMFAwg6Hwdk////////////AAAA/////////////00SQh0DKVBQTzAUBgMHAwMFOE1cZf// - //////////8AAAD//////////////2VcXCssUFBQUDsDAwMDBT4fB2T//////////////wAAAP////// - /////////1UMP1BPTz4wHQIDAgVCTVxl////////////////AAAA/////////////////2VcZGBPAwMC - AgIFPCQHZP////////////////8AAAD//////////////////1UzYE8CAgICAz5NXGX///////////// - /////wAAAP///////////////////2VjYx0CAgM+Hwdk////////////////////AAAA//////////// - /////////1UkXh0DPk1cZf////////////////////8AAAD//////////////////////2VjXEIfB2T/ - /////////////////////wAAAP///////////////////////1UMSFxl//////////////////////// - AAAA/////////////////////////2QMZP////////////////////////8AAAD//+f//4AAAP//w/// - gAAA//+B//+AAAD//wD//4AAAP/+AH//gAAA//wAP/+AAAD/+AAf/4AAAP/wAA//gAAA/+AAB/+AAAD/ - wAAD/4AAAP+AAAH/gAAA/wAAAP+AAAD+AAAAf4AAAPwAAAA/gAAA+AAAAB+AAADwAAAAD4AAAOAAAAAH - gAAAwAAAAAOAAACAAAAAAYAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAgAAAwAAAAAGAAADg - AAAAA4AAAPAAAAAHgAAA+AAAAA+AAAD8AAAAH4AAAP4AAAA/gAAA/wAAAH+AAAD/gAAA/4AAAP/AAAH/ - gAAA/+AAA/+AAAD/8AAH/4AAAP/4AA//gAAA//wAH/+AAAD//gA//4AAAP//AH//gAAA//+A//+AAAD/ - /8H//4AAAP//4///gAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChzfxX - XKj5/zyW84Yzf+UKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 1ub+Um6x+vgwmPj/N5jz/zCM6YMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAANXn/lZprvroMJr3/2i8+P+Bxvj/OJnx+zeM5nsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///wLE3f5TbLH68C+g+P9Ns/7/Xrz+/5nT/v+Uzv7/NqDz9ziS8H9Ikf4HAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAx9/+UnC1+/8tmfj/Yrz+/3vJ//+Oz///pdf//6LX//+Jy/7/R6T4/zue84RVqv8G - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAANXn/ldvsvruLZv4/0Wu+/9Qtv7/i9D//6HX//+g1///ndf//57X//+LzP3/ - SaX2/0Gd9n0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAADV5f9QbbL66DSc9/9Grvj/Nqr4/zeq+P+N0P//ndf//5zX//+c1/// - m9b//57V//+RzP7/OZv29kme9noAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu9v+V2+z+vsxl/f/R6z3/zKn9/9Qt/v/e8j//5rW//+c1/// - nNf//5zX//+c1///m9f//6HX//+Uzv7/RqL5/UWe+4RMmf8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXl/1Bss/r7LZr3/0Sr9/8xpvf/L6X3/0ex+f98yv7/ - m9f//5zX//+c1///nNf//5zX//+Y1f//mtb//53X//+Kx/v/TqT4/0We+4QAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV5/5XcrT66GKw9/9XtPX/MKX1/ymi9/8ro/f/ - Mab3/1i5/f+Y1f//mdX//5zX//+c1///m9b//5XU//+W1P//mNT+/53S+v+Kyf3/RqL5/Umj9noAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CwN/+UnK3+u5ttvf/ndT4/1m39/8povT/ - KaL2/ymi9/9Brvf/dsX4/5nV//+X1P//mNX//5bU//+V0///lNP+/5TT/v+U0vn/lc/+/5rS+/+Tzfz/ - P5z29keh9n1Vqv8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTd/lN9uvv/aLb3/6DW9/+Nzvf/ - V7L1/y2i8P8so/D/N6n4/0ux9v94xPf/k9H9/5TT//+U0///mNP7/5TT/f+U0/f/lNP3/5TS+P+Uz/// - lM/6/5nR9/+Py/z/SqT4/0Og94RIkf4HAAAAAAAAAAAAAAAAAAAAAAAAAADM5/5WbrL58D+f9P+CxPf/ - ks33/5PP9/+EyPf/X7f1/2C49P9yw/n/O6nz/yyj9v+Cyfj/lNP7/5TT+/+U0/v/lNP6/5TT9/+U0/f/ - lM/4/5TP/v+Uz/n/lM/3/5rS+P+Gx/n/SKX3/0ag9n8AAAAAAAAAAAAAAAAAAAAAzeb+Ummw+ugzmfL/ - Q6fu/zSg7v9GqPH/e8Ly/5TP9/+Qzff/kc73/3fE9/80pvP/O6j1/4TJ+P+U0/v/lNH3/5TT9/+U0/f/ - lNL3/5TQ9/+U0ff/lM/4/5TP9/+Uz/f/k8/3/5rP9/+Oyff/O57290qh9nsAAAAAAAAAALjb/ldss/n4 - Mpny/0Om7/8hlu7/H5Xt/yGW7/8sn+r/Zrry/5DN9/+Szvf/ZLv1/y2g8P9GrPT/c8P2/4LJ9v+T0vb/ - lND3/5TQ9/+Uz/f/lNH3/5TP9/+Uz/f/lM/3/5PO9/+Rzvf/jcv3/5bQ9/+SzPf/QaD2+0Sf94NMmf8K - bbT6/y+Y8v8/pO3/IZbr/xiS5/8Ykuf/HJTr/x6W7P8tn+//Zbny/47M9/+Hyff/UrHz/0ar8f8/qfL/ - TK7x/4zO9v+Sz/f/lNH3/5TP9/+Uz/f/lM/3/5PO9/+Tzvf/kM33/4zL9/+My/f/jMv3/5bO9/+Jx/f/ - RqH3/12r+4ZDnvr/OJ/y/zqj6v8ak+f/GJLn/xiS5/8Ykuf/Hpfs/x+Y7f8rnu3/cL/2/5PP9/+Ex/X/ - hcr2/3LA9v9RsvP/hMv1/4vL9v+U0ff/ks/3/5PQ9/+Rzff/lM73/47M9/+Pzff/jMv3/4zL9/+MyfT/ - j8z3/5fO9f9EoPX/jMT9/2mv/ldGoPn4Q6Hx/zag6P8Zk+f/GJLn/xiS5/8bler/IJju/yCY7v88p/D/ - jMv3/5DP9/+EyPf/Pqjw/zKj8P85pvD/QKjw/4XI8v+Sz/f/js33/4zL9/+Oy/f/jMv3/4zL9/+MyvX/ - i8nz/43L9v+Dxvb/Q5/z/3G1+fi42/5XAAAAAHO3/lJDn/roRaXx/zah6P8Yk+f/FpLn/xiS5/8Ykuf/ - GJLn/x2U6P9quvH/jcz3/3XA9/8imu3/H5jt/x+Y7f8fl+r/dcHy/2y99P9lufP/icr2/4bH9f9/xPX/ - icn1/4DE9f9uuu7/icbz/1Gq9/9psProzeb+UgAAAAAAAAAAAAAAAHO0/lZGofnwQKPw/zeh6f8Yk+f/ - FZLn/xiS5/8Ykuf/GZLn/z+m7/+Iyvf/isz3/zei6/8pmuv/HZXp/x2W6/85pO7/J5rp/xuV5/95wvX/ - XLLu/zqi6f9yvO3/YLXx/0Wn7f8+nfL/arP58Mzn/lYAAAAAAAAAAAAAAAAAAAAAAAAAAGuy/lNLo/r/ - RKTw/z6i7f8SkOf/GJLn/xSS5/8Xkuf/LZ3q/3fB9P+My/f/e8P1/2u68v8yn+r/GJLn/xiS5/8Ykuf/ - GJLn/zGf6/8imOj/FpLl/y6d6f9WsO7/Mprv/3S2+v++3f5TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - f3//Amy0/lJFnvnuS6fy/zag6P8Vkef/EJLn/xKS5v8mmOj/a7ry/4zL9/+FxfD/Z7bu/y6c6v8Xkuf/ - GJLn/xeS5/8Ykuf/FpHn/xGS5/8clej/Tqvt/zic8v9rsvnux9/+Uv///wIAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHK1/ldDn/roSabx/z6h6f8ZkuX/FY7f/x+T4f9fs+v/jMr1/2K27v8Tkef/ - E5Hn/xGP5/8Vkef/E4/n/xSQ5/8Rjuf/H5Xn/0io7P82m/L/a7L66M3n/lcAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK1/1BKofn7SKLw/0Ch5v8VkN//HZLh/1yx6/+MyPH/ - XrPt/xOO5P8Qjuf/EI7n/xCO5v8SjuL/EY7i/xuT5/9Ipun/N5rw/26z+fvV5f9QAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmv/ldKofn7Tabx/zyg5v8glOH/ - Z7Xr/4zH7/94vu7/QaXq/xuT5/8QjuH/EI7k/xGO3v8Xj97/Tajn/zab8f9rs/n7u9v+VwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK1/1BDnfro - UKby/1Sr6f95vez/isbv/4TD7/90u+z/Lpvi/xCO3v8Pjd7/H5Pg/1Kq6/86nPL/abL66NXl/1AAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAHK1/ldFnvnuX67z/5nM8/+IxPD/Q6Xo/zGd5f8UjuD/DIre/xyQ4P9Lpur/OJvy/3Cy+e7V5/5X - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAGy0/lJdqvv/j8X3/5DI8f8Qi9//Coje/wiG3v8QjN7/UKnm/zWZ7/9ztfr/ - x9/+UgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf3//Am61/lNirvrwgMD3/z2g5/8NiN//FI7f/1Cp5v86nPH/ - b7L58MTd/lP///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO0/lZZqfrodr7y/0Ok5v9Lp+f/ - Oprx/2mw+ujV5/5WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO3/lJVqPb4 - QqDu/zSZ8P9xs/n41ub+UgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAGmv/ldDnvn/cbT5/8Hb/lcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP/+f////D////g////wH///4Af//8AH//+AA///AAD//gAAf/wAAH/4AAA/ - 8AAAD+AAAA/AAAAHgAAAAQAAAAAAAAAAgAAAAcAAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/8AAP//gAH/ - /8AD///gB///8A////gf///8P////n//KAAAACAAAABAAAAAAQAIAAAAAAAACAAAAAAAAAAAAAAAAAAA - AAAAAAAAAP8Iht7/Coje/wyJ3v8Pjd7/EIvf/xCN3v8Vjt7/FZDf/xGO4f8UjuD/EY7m/xGR5v8Vkeb/ - HZLg/xiS5v8blef/H5Xn/xuV6v8dlen/Hpbs/x+Y7f8xiuf/OY7n/zCM6f8glOH/Lpvi/yGW6/8hlu7/ - Ipjo/yaZ6P8gmO3/KZrr/y2d6f8rnu3/LZ/v/zGd5f8xn+r/Mprv/zWZ7/8vmPL/LZr3/y2a+P8xl/f/ - OJPx/zyW8/8ymfL/Npnx/zCa9/80nPf/OZrx/zmc8f8+nfL/OZr3/zqd9f8+nvb/MJj4/zyg5v82oOj/ - NKDu/zqi6f8+oen/PqLt/zmk7v8/pe7/LKHw/ymi9v8so/b/L6X3/y+g+P8yo/D/NKbz/zeg9P8xpvb/ - Oabw/zyn8P87qfP/Pqjx/zuo9f82qfj/Qp7v/0Of8/9Bnfb/Sp73/0Oe+v9Gn/r/Rp/8/0Ch5v9DpOb/ - S6fn/02o5/9Cpen/QqDu/0Om7v9Fp+3/Sabp/0io7P9Oq+3/UKnm/1Kq6/9Uq+n/VrDu/12y6/9dsu3/ - QaLw/0Sk8P9Boff/RaD2/0ii8P9KpvH/Tabx/0mh9/9Ipfb/QKjw/0ap8f9Eq/f/Qa73/0as9f9MrvH/ - RqH6/0ek+P9Kovr/SqT4/06k+P9Frvn/UKby/1Gq9/9Vqff/X67z/1mp+/9cqfr/Xqv8/0ux9v9Hsfn/ - TbP+/1Gx8/9XsvX/V7T1/1m39/9ft/X/ULf7/1C2/v9Yuf3/Xrz+/2e16/9itu7/Z7bu/2667v90u+z/ - crzt/3i97f9jrvv/aa/7/2C18f9isPf/aLb3/2229/9lufL/YLj0/2S79f9quvH/bL30/2mx+v9tsvr/ - arT6/220+v9psf7/bLP+/2+0/v9ivP7/aLz4/3a+8v9wv/b/cLP6/3G0+v90tvr/c7b//326+/91wfL/ - csH2/3bA9f93xPf/e8Ly/3rC9f94xPf/f8T1/3LD+f92xfj/e8j//3zK/v+Ew+//isbv/4zH7/+FxfD/ - gMD3/4HE9v+Fx/X/iMXx/4nH9/+Pxff/hcjy/4LJ9v+Eyfb/i8nz/4zI8f+Jyvb/jMr2/4rM9/+NzPb/ - gcb4/4bH+f+Kx/v/jMT9/4LJ+P+Eyfj/icr9/4/L/P+LzP3/js///5DI8f+Rzvf/lM72/5nM8/+az/f/ - lM/4/5LM/f+Uzv7/i9D//43Q//+T0fb/lNH3/5nR9/+U0vr/k9H9/5TT/v+W1P//mdL6/53S+v+d1Pj/ - mdP+/5nV/v+c1v//osz9/6DW9/+h1///pdf//7nc/v+93P7/wNz+/8Te/v/C4P7/x+D+/8jg/v/O5/// - 1uf//wAAAAD////////////////////2//////////////////////////////////////////pJ//// - //////////////////////////////////9Fqv3/////////////////////////////////////9IyP - 8Or/////////////////////////////////qkKPver09OP2///////////////////////////////2 - hYzj9PTx8eSE////////////////////////////RYVPT+Px8fHx9P7///////////////////////// - //qFSYy98PHx8fHx9Or///////////////////////9FdElJhb3x8fHx8fDw9PH9//////////////// - /////opJQkJJjvDw8fHx6+vw7df//////////////////6HuikJCQ3S18Ovr8Ovr6+bq8f7///////// - //////7q88+JQUFPhLvq6uvs6uXo6OLg59h1////////////Psnl5cmenrpMRMnq6Oro5uXd6uDl6Ov9 - //////////pMRnS25eXQu0dMyeXl5ejm3ebd5t3l5s7///////9BdBUVFSGf5eWfInS7yeXm5ebo3Nzc - 5eXl5f3///+kQ0wdDBASFUGfz8mHdk120OXl3OXl5eXQz8/P5eWE//CMTBISEgwVFSKz5cnKs4fJz+Xo - 5eXl0OXPz8/9/vTx///+9nQMEBUVFUzP5clNRkpMyOXQz9DQz8/P5eWp//////+PTBAMDBAQHaDPsxUV - FR2yoZ3PycnIyfH+/v/////////+vQwQEAwQTM/PPCEQFT8eELVmPLKKdHH///////////aPdAwQDAwk - stC4oCUQDRAMRx0Mj/39/v/////////////+9k8MDCKfz8iQIQ0QDRAMDBWHjv////////////////+P - dBAIGZHQkQwMDAwMDAyM/f7////////////////////++k8QZsiRCAwMDAQMDHaO//////////////// - //////+pcRmQwJVbEAQMBIz9/v/////////////////////////+9uvPyJUaBAQOZY7///////////// - //////////////+288hMGgQEEOv+//////////////////////////////7+/owEBAxljP7///////// - ///////////////////////xTAyF/f7////////////////////////////////////+8Y+M//////// - //////////////////////////////+9/v///////////////////////////////////////72s//// - //////////////////5////8P///+D////Af///gB///wAf//4AD//8AAP/+AAB//AAAf/gAAD/wAAAP - 4AAAD8AAAAeAAAABAAAAAAAAAACAAAABwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//wAA//+AAf//wAP/ - /+AH///wD///+B////w////+f/8oAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2OX/FFqq+tM2lO+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwtr+FWOx+ctRsfv/er/4/jeY8HwAf/8CAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Of+FmOw+s9Jrvz/jdD//6HX//9+xf3/QqD1ggAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudz+FmWv+s09p/f/TrX7/5jV//+c1///nNb//4DD/P1IoPp/ - f3//AgAAAAAAAAAAAAAAAAAAAAAAAAAA0Of+FnS4+s0+p/b/LaT3/1O2+/+a1v//nNf//5nW//+Z1f// - gMH7/0ig+n8AAAAAAAAAAAAAAAAAAAAAwtr+FXu8+s+Oy/f/Qqv0/y2k9f9euvf/ltT+/5bU/v+U0/z/ - lNL6/5bQ/f9+wfn9SKL3gn9//wIAAAAAzOX/FGSv98tOqvL/ecL0/4LH9v93w/f/Nqb0/4zO+f+U0vn/ - lNP4/5TR9/+Uz/n/ldD3/37B+P9BoPZ8AAAAAGGw99M1nu7/HJTq/yKY7P9iuPL/g8j2/0Oq8v9gufT/ - kdD3/5TQ9/+U0Pf/k8/3/5DN9/+PzPf/fcD2/kui94REoPfTM57q/xiS5/8alOn/Ipnu/3PA9f+Hyvb/ - Ta/y/2K58/+Pzvb/kM33/4/M9/+Ny/f/jMr1/3vA9f9ytvrTcrL/FEqk98sxnur/F5Ln/xiS5/84ouz/ - hcj3/yib7P8eluv/UK/v/2G28f9muPD/d8Dy/16x8P9ttvnLzOX/FAAAAABttv4VS6P3zzSe6/8Ukuf/ - H5bo/3/E9f91vvH/JJjo/xiS5/8elej/GZTn/0Kl7f9lsffPwtr+FQAAAAAAAAAAAAAAAHO5/hZLpPfN - N57p/xqR4P91vu//OaLp/xGP5/8Sj+X/FJDm/zmf6/9nsPfN0Of+FgAAAAAAAAAAAAAAAAAAAAAAAAAA - aK3+Fk2k981Aoej/fcDt/2y47f8ak+L/FI/g/zyf6f9ksPfNudz+FgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAABzuf4WWKj4z5DH8/8jleL/Dovf/zue6P9nsPfP0Of+FgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAG22/hVqsvnLQaLn/zqe5/9osffLwtr+FQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcrL/FEyk9tNmsPbT2OX/FAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP5/AAD8fwAA+B8AAPAfAADgDwAAwAMAAIADAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAD4HwAA - /D8AAP5/AAAoAAAAEAAAACAAAAABAAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAA/w6L3/8Uj+D/ - EY/n/xKP5f8UkOb/FJLn/xeS5/8akeD/GpPi/xiS5/8ZlOf/GpTp/xyU6v8elej/Hpbr/x+W6P8jleL/ - JJjo/yKY7f8om+z/Op7n/zGe6v8znur/NJ7r/zee6f81nu7/OZ/r/zue6P88n+n/NpTw/ziY8P85mvf/ - OaLp/zii7P8tpPb/Nqb0/z2n9/8+p/b/Sp73/0Gi5/9Aoej/QqXt/1Cv7/9CoPf/Q6H1/0qi9/9MpPb/ - Q6ry/0Kr9P9OqvL/Ta/y/0Wh+P9IoPr/SKL4/0yj+P9KpPj/S6T4/0yk+P9NpPj/Sa78/1mp+f9bqvr/ - TrX7/16x8P9euvf/UbH7/1O2+/9suO3/db7v/2av+v9htvH/ZbH3/2ew9/9iuPL/Zrjw/2C59P9isPj/ - Y7H6/2Sw+v9lsPj/Z7H4/2iw+P9rs/r/bbb6/2mx/v9rsv7/b7T+/3W+8f9zt/r/c7b//3W4+v97vPr/ - fcDt/3fA8v9zwPX/d8P3/3vA9f95wvT/fcH3/3/E9f96wPn/fsH4/3/C+v9+xf3/gsf2/4PI9v+FyPf/ - h8r2/4zK9f+Ny/f/jsv3/4/M9/+Pzvb/gMH7/4DE/f+Mzvn/kMfz/5DN9/+Tz/f/lM/5/43Q//+R0Pf/ - lND3/5XQ9/+U0vn/ltD9/5TT/P+W1P7/mNX//5nV//+Z1v//mtb//5zW//+h1///vNz+/8De/v/E3v7/ - xd7+/87n///W5///AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ - AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAP////////// - ////////////////////i///////////////////P3+LjP//////////////iz+Dg4P///////////// - MSM/g4ODi4z/////////jD8jQX9/fX19////////MWBqYCR6fX16f4uM////gz8jQWoxQXp6enp6ff// - /z8LBhNfbDNMenp0i4yM////jIM/I3QUCz9BQWxo//////8/CwtqXxQLP4OM/////////4yDgyQGBgtD - ////////////QWxBP4OM//////////////+Mgz8//////////////////4uM//////////////////// - ///////////+fwAA/H8AAPgfAADwHwAA4A8AAMADAACAAwAAAAAAAAAAAACAAQAAwAMAAOAHAADwDwAA - +B8AAPw/AAD+fwAA - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAKSkAAAEAIAC5GwAAZgAAACkpAAABAAgAgQwAAB8cAAAgIAAAAQAgAKgQAACgKAAAICAAAAEA + CACoCAAASDkAABAQAAABACAAaAQAAPBBAAAQEAAAAQAIAGgFAABYRgAAKAAAACkAAABSAAAAAQAgAAAA + AACINAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKv/v/UKH4/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA1uf//wh99/8Igvf/MYrn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn + //8Ifff/Qqb3/5TT//8plvf/MYrn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///CH33/zmi9/9Ssvf/lNP3/5zT + 9/8plvf/OY7n/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA1uf//wh99/8xqvf/Urb//zmu//+Ey///pdf//6XX//8povf/OZLv/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn + //8Ifff/OaL3/2vD//9rw///c8P//6XX//+l1///pdf//5zX//8xlvf/OZr3/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///CIL3/zmi9/9Stv//c8P//5zX + //+c1///pdf//6XX//+c1///nNf//6XX//8xpvf/Qp7v/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA1uf//xCC9/85ovf/Urb//zmq9/85rv//e8v//6XX//+c1///nNf//5zX + //+c1///pdf//6XX//8xlvf/Qp73/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn + //8Qgvf/OaL3/1Ky9/8xqvf/Mab3/zmq9/+U0///nNf//5zX//+c1///nNf//5zX//+U0///pdf//6XX + //8plvf/Sp73/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///EIL3/zma9/9Ssvf/Mab3/zGq + 9/9rw///e8f//5zX//+c1///nNf//5zX//+c1///nNf//5zX//+c1///pdf//6XX//8xlvf/SqL//wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzuf//wiC9/85ovf/UrL3/zGm9/8xpvf/Mab3/3vL//+c1///nNf//5zX + //+c1///nNf//5zX//+c1///nNf//5TT//+c1///nNf//6XX//8xlvf/Sp73/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn + //8Qgvf/OaL3/1Ky9/8xpvf/KaL3/ymi9/8xpvf/Mab3/2vD//+c1///nNf//5zX//+c1///nNf//5zX + //+c1///lNP//5zX//+c1///nM/3/6XX//8xlvf/SqL//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///GIb3/4zH9/+My/f/KaLv/ymi + 9/8povf/KaL3/zGm9/8xpvf/Y77//5zX//+U0///nNf//5zX//+c1///nNf//5TT//+U0///lNP//5TT + //+cz/f/nNf//6XX//8xlvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzuf//xiG9/+Mx/f/rdv3/3vH//8pou//KaL3/ymi9/8povf/KaL3/1q6 + 9/+Ey/f/nNf//5TT//+c1///lNP//5TT//+U0///lNP//5TT//+U0///lNP3/5TP//+Uz///nNP3/6XX + //8xlvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbn + //8Yhvf/hMv3/63b9/+U0/f/Y7b3/yme7/8pou//KaLv/ymi9/8povf/hMv3/5zT9/+U0///lNP//5TT + //+U0///nNP3/5TT//+U0/f/lNP3/5TT9/+U0/f/lM///5TP//+Uz/f/nNP3/6XX//8xlvf/SqL3/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW5///EIL3/4zH9/+t2/f/lM/3/5TP + 9/+My/f/UrL3/yme7/8xou//a8P//zGi7/8povf/Mab3/5TP9/+U0///lNP//5TT//+U0///lNP//5TT + 9/+U0/f/lNP3/5TP9/+Uz///lM///5TP9/+Uz/f/nNP3/6XX//8plvf/SqL3/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzuf//xCC9/85nu//Y7b3/2u29/+Uz/f/lM/3/5TP9/+Uz/f/e8P3/4zL + 9/+U0/f/a773/ymi7/8povf/c8P3/5TT9/+U0/f/lNP3/5TT9/+U0/f/lNP3/5TT9/+U0/f/lM/3/5TP + //+Uz/f/lM/3/5TP9/+Uz/f/nNP3/6XX9/8plvf/SqL3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM7n + //8Qgvf/OZ7v/1Ku7/8hmuf/IZbv/zGe7/9ruu//lM/3/5TP9/+Uz/f/lM/3/4zL9/8xpvf/KZ7v/0qu + 9/+My/f/lNP//5TT9/+Uz/f/lNP3/5TT9/+U0/f/lM/3/5TP9/+U0/f/lM/3/5TP9/+Uz/f/lM/3/5TP + 9/+My/f/pc/3/6XX9/8plvf/SqL3/wAAAAAAAAAAAAAAAAAAAADO5///EIL3/zme7/9Sru//IZbv/yGW + 7/8hlu//IZbv/yGa5/9Ssu//lM/3/5TP9/+Uz/f/c8P3/yme7/8pnu//Wrb3/4TL9/+Ey/f/lNP3/5TT + 9/+Uz/f/lM/3/5TP9/+Uz/f/lNP3/5TP9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL9/+My/f/nNP3/6XX + 9/8plvf/SqL3/wAAAAAAAAAAzuf//xCC9/85nu//Uq7v/yGW7/8Ykuf/GJLn/xiS5/8hlu//IZbv/yGa + 7/9Sru//lM/3/5TP9/+Uz/f/UrL3/yme7/8pnu//KZ7v/zGi7/+Mx+//lNP3/5TP9/+U0/f/lM/3/5TP + 9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL9/+My/f/jMv3/4zL9/+My/f/nM/3/6XX9/8plvf/Sp73/wAA + AAAQgvf/MZ7v/1qy7/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/IZrv/yGa7/9Ssu//jMv3/5TP + 9/+My/f/WrLv/3vD9/9rvvf/IZrv/2vD//+U0/f/jMv3/5TP9/+Uz/f/lM/3/5TP9/+Uz/f/lM/3/4zL + 9/+Uz/f/lM/3/4zL9/+My/f/jMv3/4zL9/+My/f/nM/3/6XX9/8Yivf/e7r//3O2//8Yhvf/UrLv/zmi + 5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/yGa7/8hmu//GJLn/yGa7/9rvvf/lM/3/5TP9/+My/f/lNP3/4zL + 9/85pu//lNP3/3vD7/+My/f/lNP3/5TT9/+My/f/lNP3/4zL9/+cz/f/jMv3/4zL9/+My/f/jMv3/4zL + 9/+My/f/jMfv/4zL9/+l1/f/a7bv/xCC9//O5///AAAAAHO2//8Yhvf/Wq7v/zmi5/8Ykuf/GJLn/xiS + 5/8Ykuf/GJLn/yGa7/8hlu//IZrv/zGi7/+My/f/jMv3/5TT9/97w/f/MaLv/yGa7/85pu//IZrv/zGi + 7/97w+//lM/3/5TP9/+My/f/jMv3/4zL9/+My/f/jMv3/4zL9/+My/f/jMfv/4zL9/+My/f/jMv3/0Ke + 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAHO2//8Yivf/WrLv/zmi5/8Qkuf/GJLn/xiS5/8Ykuf/GJLn/xiS + 5/8Ykuf/GJLn/2u67/+My/f/jMv3/2O29/8hmu//IZrv/yGa7/8hmu//GJLn/3vD7/+My/f/c8P3/4TH + 9/+My/f/jMv3/4zL9/+My/f/jMv3/4zL9/+Mx+//c77v/63X9/9jtvf/EIL3/87n//8AAAAAAAAAAAAA + AAAAAAAAAAAAAHO2//8Yivf/WrLv/zmi5/8Qjuf/EJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/MZ7v/4zL + 9/+Uz/f/hMv3/xiS5/8Ykuf/GJLn/xiS5/8hmu//Wrb3/1Ky7/8Ykuf/IZrn/4zL9/+Ew+//WrLv/1qy + 7/+Mx+//c773/yGa5/9aru//Wq7v/wiC9//O5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 + //8Yivf/Y7bv/zmi5/8Ykuf/EJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/c8P3/4zL9/+My/f/UrLv/0Ki + 7/8xou//GJLn/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/e8P3/1qy7/8Ykuf/GJLe/3O+7/9jtu//WrLv/0Ki + 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/Y7bv/0Ki + 7/8Qjuf/GJLn/xiS5/8Qkuf/GJLn/xiS5/9asu//jMv3/4zL9/+My/f/jMv3/2u67/8Ykuf/GJLn/xiS + 5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xCS5/8Ykuf/GJLn/1qy7/85ouf/EIL3/9bn//8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/Y7bv/zmi5/8Qjuf/EJLn/xCS + 5/8Qkuf/GJLn/0qq7/+My/f/jMv3/4zH7/+Ew+//Wq7v/xiS5/8Ykuf/GJLn/xiS5/8Ykuf/GJLn/xiS + 5/8Qkuf/EJLn/xiS5/9jtu//QqLv/wiC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/Y7bv/0Ki5/8Qjuf/EJLn/xiO3v8Yjt7/OaLn/4zH + 7/+My/f/c77v/xiS5/8Qkuf/GJLn/xCO5/8Ykuf/GJLn/xCO5/8Ykuf/EI7n/xCO5/8Ykuf/Y7bv/0Ki + 7/8Qgvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHO2//8Yivf/a7bv/0Ki5/8Yjt7/EI7e/xiO3v8hluf/jMfv/4zL9/9ruu//EI7n/xCO + 5/8Qjuf/EI7n/xCO5/8Qjuf/EI7n/xCO5/8Qjuf/GJLn/2Oy5/9Cou//CIL3/9bn//8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 + //8Yhvf/a7bv/0Ki5/8Qjt7/GI7e/zGe5/+Mx+//jMfv/2u67/8Yjt7/EI7n/xCO5/8Qjuf/EI7n/xCO + 3v8Yjt7/EI7e/xiS5/9jsuf/QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yivf/a7bv/0Ki + 5/8Qjt7/QqLn/4zH7/+Mx+//hMPv/1qy7/8xnuf/EI7n/xCO3v8Qjuf/EI7e/xCO3v8Yjt7/Y7Ln/0Ki + 7/8Igvf/zuf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/a7bv/0Ki5/9aruf/jMfv/4zH + 7/+Mx+//jMfv/2u25/8Qjt7/EI7e/xCO3v8Qjt7/GI7e/2u27/9Cou//CIL3/9bn//8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//8Yhvf/a7bv/4zH7/+Ew+//hMPv/2u27/9asu//QqLn/wiK + 3v8Qjt7/CIbe/xiO3v9rtu//QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHO2//8Yhvf/tdv3/6XP9/+Ew+//EI7e/xCO3v8Iit7/CIbe/wiG3v8Yjt7/a7bv/0Ki + 7/8Qgvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 + //9Knvf/tdv3/4TD7/8Iht7/CIbe/wiG3v8Iht7/EI7e/2u25/9Couf/CH33/9bn//8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//9Kovf/nM/3/zme + 5/8Iht7/CIbe/xCO3v9rtuf/QqLv/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//9Cnvf/pdf3/0Ki5/8Qjt7/a7bn/0Ke + 7/8Igvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2//85nu//a7bn/2u27/9Cnu//EIL3/9bn//8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHO2//8Yhvf/MZ7n/xCC9//W5///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO2 + //8Qgvf/1uf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//+f//4AAAP//w///gAAA//+B//+AAAD//wD//4AAAP/+ + AH//gAAA//wAP/+AAAD/+AAf/4AAAP/wAA//gAAA/+AAB/+AAAD/wAAD/4AAAP+AAAH/gAAA/wAAAP+A + AAD+AAAAf4AAAPwAAAA/gAAA+AAAAB+AAADwAAAAD4AAAOAAAAAHgAAAwAAAAAOAAACAAAAAAYAAAAAA + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAgAAAwAAAAAGAAADgAAAAA4AAAPAAAAAHgAAA+AAAAA+A + AAD8AAAAH4AAAP4AAAA/gAAA/wAAAH+AAAD/gAAA/4AAAP/AAAH/gAAA/+AAA/+AAAD/8AAH/4AAAP/4 + AA//gAAA//wAH/+AAAD//gA//4AAAP//AH//gAAA//+A//+AAAD//8H//4AAAP//4///gAAAAAAAAAAo + AAAAKQAAAFIAAAABAAgAAAAAACINAAAAAAAAAAAAAAAAAAAAAAAACH33/wiG3v8Iit7/EI7e/xiO3v8Y + kt7/EI7n/xCS5/8Ykuf/CIL3/xCC9/8Yhvf/GIr3/zGK5/85juf/IZbn/yGa5/8hlu//IZrv/yme7/8x + nuf/OZ7n/zmS7/8xnu//OZ7v/ymW9/8xlvf/OZr3/ymi7/85ouf/MaLv/zmm7/8povf/Mab3/zmi9/8x + qvf/Oar3/zmu//9Cnu//Qp73/0qe9/9Couf/QqLv/0qq7/9aruf/Uq7v/1qu7/9Ssu//WrLv/0Km9/9K + ovf/Sq73/0qi//9Qofj/UrL3/1q29/9auvf/Urb//2Oy5/9rtuf/Y7bv/2u27/9ruu//c77v/2O29/9r + tvf/a773/2O+//9zvvf/c7b//3u6//97w+//a8P//3PD9/97w/f/c8P//3vH//97y///ir/7/4TD7/+M + x+//hMf3/4zH9/+Ey/f/jMv3/4TL//+Uz/f/nM/3/5TP//+U0/f/nNP3/5TT//+c1///pc/3/6XX9/+t + 1/f/rdv3/6XX//+12/f/zuf//9bn////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A + AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAP////////////////////// + //9lNf//////////////////////////AAAA////////////////////////ZAkJY/////////////// + //////////8AAAD//////////////////////2UAMVsZDf///////////////////////wAAAP////// + //////////////9kACI2WVogZP//////////////////////AAAA////////////////////ZQAjOSVV + YWEgFv////////////////////8AAAD//////////////////2QAIkhIS2FhYVwhZP////////////// + /////wAAAP////////////////9lCSI5S1xcYWFcXGEhJv//////////////////AAAA//////////// + ////ZAoiOSQlTWFcXFxcYWEXZP////////////////8AAAD//////////////2UKIjYjISRbXFxcXFxb + YWEZKP///////////////wAAAP////////////9kChs2ISNITFxcXFxcXFxcYWEZZf////////////// + AAAA////////////ZQkiNiEhIU1cXFxcXFxcXFtcXGEaKP////////////8AAAD//////////2QKIjYh + ICAhIUhcXFxcXFxcW1xcV2EZZf///////////wAAAP////////9lC1JUHCAgICEhQ1xbXFxcXFtbW1tX + XGEaMv//////////AAAA////////YwtSYEwcICAgIDhTXFtcW1tbW1tbWVhYWmEZZf////////8AAAD/ + /////2ULU2BZQBMcHCAgU1pbW1tbWltZWVlZWFhWWmEaMv///////wAAAP////9kClJgVlZUNhMeSB4g + IVZbW1tbW1lZWVZYWFZWWmERZf//////AAAA////ZQoYQEFWVlZWSlRZQhwgSVlZWVlZWVlZVlhWVlZW + Wl4ZMv////8AAAD//2MKGC0QERc+VlZWVlQhEzNUW1lWWVlZVlZZVlZWVlZUXV4SZf///wAAAP9lChgt + ERISERAvVlZWSRMTN1NTWVlWVlZWWVZWVlZWVlRUWl4ZMf//AAAAYwofLxIICAgRERItVlZWNhMTEx5Q + WVZZVlZWVlZWVlRUVFRUWlwSY/8AAAAKHi8HBxAHCAgIEhIvVFZUMEpCEkhZVFZWVlZWVlRWVlRUVFNU + WV4STQAAAE0SLx0QBwgICBISCBJCVlZUWVQfWUdUWVlUWVRXVFRUWVNZUFlgXEhkAAAA/2VcWyMFBxAH + EBIREh5UVFlKHhIfEh5HVlZUVFRUVFRUUFRTUyQHZP8AAAD//1UHOB0HCAgHCAgICD5UVEASEhISCEdU + SVNUVFNZVFNQP2BcXGX//wAAAP///2VcWx8HBwgIEAgIHlRWUwgICAgQNy8IEFRPMDBQPxAvOAdk//// + AAAA/////1USOB0FBwgHCAgISVRULyoeCAgICAgISjAIBT84OE1cZf////8AAAD//////2VcXCQHBxAH + BwgwVFRUVD4ICAgICAgICAcHBzgdB2T//////wAAAP///////00SOB0DBwMHCCtUVFBPLggICAgICAcH + BxA4TVxl////////AAAA/////////2VcXB8HBwUFHVBUPwgHCAYICAYIBgcQPB8HZP////////8AAAD/ + /////////1USQikFAwUQUFQ+BgYGBgYGBgcHBThNXGX//////////wAAAP///////////2VcXB8FBRRQ + UD4FBgYGBgMFAwg6Hwdk////////////AAAA/////////////00SQh0DKVBQTzAUBgMHAwMFOE1cZf// + //////////8AAAD//////////////2VcXCssUFBQUDsDAwMDBT4fB2T//////////////wAAAP////// + /////////1UMP1BPTz4wHQIDAgVCTVxl////////////////AAAA/////////////////2VcZGBPAwMC + AgIFPCQHZP////////////////8AAAD//////////////////1UzYE8CAgICAz5NXGX///////////// + /////wAAAP///////////////////2VjYx0CAgM+Hwdk////////////////////AAAA//////////// + /////////1UkXh0DPk1cZf////////////////////8AAAD//////////////////////2VjXEIfB2T/ + /////////////////////wAAAP///////////////////////1UMSFxl//////////////////////// + AAAA/////////////////////////2QMZP////////////////////////8AAAD//+f//4AAAP//w/// + gAAA//+B//+AAAD//wD//4AAAP/+AH//gAAA//wAP/+AAAD/+AAf/4AAAP/wAA//gAAA/+AAB/+AAAD/ + wAAD/4AAAP+AAAH/gAAA/wAAAP+AAAD+AAAAf4AAAPwAAAA/gAAA+AAAAB+AAADwAAAAD4AAAOAAAAAH + gAAAwAAAAAOAAACAAAAAAYAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAgAAAwAAAAAGAAADg + AAAAA4AAAPAAAAAHgAAA+AAAAA+AAAD8AAAAH4AAAP4AAAA/gAAA/wAAAH+AAAD/gAAA/4AAAP/AAAH/ + gAAA/+AAA/+AAAD/8AAH/4AAAP/4AA//gAAA//wAH/+AAAD//gA//4AAAP//AH//gAAA//+A//+AAAD/ + /8H//4AAAP//4///gAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChzfxX + XKj5/zyW84Yzf+UKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 1ub+Um6x+vgwmPj/N5jz/zCM6YMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAANXn/lZprvroMJr3/2i8+P+Bxvj/OJnx+zeM5nsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///wLE3f5TbLH68C+g+P9Ns/7/Xrz+/5nT/v+Uzv7/NqDz9ziS8H9Ikf4HAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAx9/+UnC1+/8tmfj/Yrz+/3vJ//+Oz///pdf//6LX//+Jy/7/R6T4/zue84RVqv8G + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAANXn/ldvsvruLZv4/0Wu+/9Qtv7/i9D//6HX//+g1///ndf//57X//+LzP3/ + SaX2/0Gd9n0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAADV5f9QbbL66DSc9/9Grvj/Nqr4/zeq+P+N0P//ndf//5zX//+c1/// + m9b//57V//+RzP7/OZv29kme9noAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu9v+V2+z+vsxl/f/R6z3/zKn9/9Qt/v/e8j//5rW//+c1/// + nNf//5zX//+c1///m9f//6HX//+Uzv7/RqL5/UWe+4RMmf8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANXl/1Bss/r7LZr3/0Sr9/8xpvf/L6X3/0ex+f98yv7/ + m9f//5zX//+c1///nNf//5zX//+Y1f//mtb//53X//+Kx/v/TqT4/0We+4QAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV5/5XcrT66GKw9/9XtPX/MKX1/ymi9/8ro/f/ + Mab3/1i5/f+Y1f//mdX//5zX//+c1///m9b//5XU//+W1P//mNT+/53S+v+Kyf3/RqL5/Umj9noAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8CwN/+UnK3+u5ttvf/ndT4/1m39/8povT/ + KaL2/ymi9/9Brvf/dsX4/5nV//+X1P//mNX//5bU//+V0///lNP+/5TT/v+U0vn/lc/+/5rS+/+Tzfz/ + P5z29keh9n1Vqv8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTd/lN9uvv/aLb3/6DW9/+Nzvf/ + V7L1/y2i8P8so/D/N6n4/0ux9v94xPf/k9H9/5TT//+U0///mNP7/5TT/f+U0/f/lNP3/5TS+P+Uz/// + lM/6/5nR9/+Py/z/SqT4/0Og94RIkf4HAAAAAAAAAAAAAAAAAAAAAAAAAADM5/5WbrL58D+f9P+CxPf/ + ks33/5PP9/+EyPf/X7f1/2C49P9yw/n/O6nz/yyj9v+Cyfj/lNP7/5TT+/+U0/v/lNP6/5TT9/+U0/f/ + lM/4/5TP/v+Uz/n/lM/3/5rS+P+Gx/n/SKX3/0ag9n8AAAAAAAAAAAAAAAAAAAAAzeb+Ummw+ugzmfL/ + Q6fu/zSg7v9GqPH/e8Ly/5TP9/+Qzff/kc73/3fE9/80pvP/O6j1/4TJ+P+U0/v/lNH3/5TT9/+U0/f/ + lNL3/5TQ9/+U0ff/lM/4/5TP9/+Uz/f/k8/3/5rP9/+Oyff/O57290qh9nsAAAAAAAAAALjb/ldss/n4 + Mpny/0Om7/8hlu7/H5Xt/yGW7/8sn+r/Zrry/5DN9/+Szvf/ZLv1/y2g8P9GrPT/c8P2/4LJ9v+T0vb/ + lND3/5TQ9/+Uz/f/lNH3/5TP9/+Uz/f/lM/3/5PO9/+Rzvf/jcv3/5bQ9/+SzPf/QaD2+0Sf94NMmf8K + bbT6/y+Y8v8/pO3/IZbr/xiS5/8Ykuf/HJTr/x6W7P8tn+//Zbny/47M9/+Hyff/UrHz/0ar8f8/qfL/ + TK7x/4zO9v+Sz/f/lNH3/5TP9/+Uz/f/lM/3/5PO9/+Tzvf/kM33/4zL9/+My/f/jMv3/5bO9/+Jx/f/ + RqH3/12r+4ZDnvr/OJ/y/zqj6v8ak+f/GJLn/xiS5/8Ykuf/Hpfs/x+Y7f8rnu3/cL/2/5PP9/+Ex/X/ + hcr2/3LA9v9RsvP/hMv1/4vL9v+U0ff/ks/3/5PQ9/+Rzff/lM73/47M9/+Pzff/jMv3/4zL9/+MyfT/ + j8z3/5fO9f9EoPX/jMT9/2mv/ldGoPn4Q6Hx/zag6P8Zk+f/GJLn/xiS5/8bler/IJju/yCY7v88p/D/ + jMv3/5DP9/+EyPf/Pqjw/zKj8P85pvD/QKjw/4XI8v+Sz/f/js33/4zL9/+Oy/f/jMv3/4zL9/+MyvX/ + i8nz/43L9v+Dxvb/Q5/z/3G1+fi42/5XAAAAAHO3/lJDn/roRaXx/zah6P8Yk+f/FpLn/xiS5/8Ykuf/ + GJLn/x2U6P9quvH/jcz3/3XA9/8imu3/H5jt/x+Y7f8fl+r/dcHy/2y99P9lufP/icr2/4bH9f9/xPX/ + icn1/4DE9f9uuu7/icbz/1Gq9/9psProzeb+UgAAAAAAAAAAAAAAAHO0/lZGofnwQKPw/zeh6f8Yk+f/ + FZLn/xiS5/8Ykuf/GZLn/z+m7/+Iyvf/isz3/zei6/8pmuv/HZXp/x2W6/85pO7/J5rp/xuV5/95wvX/ + XLLu/zqi6f9yvO3/YLXx/0Wn7f8+nfL/arP58Mzn/lYAAAAAAAAAAAAAAAAAAAAAAAAAAGuy/lNLo/r/ + RKTw/z6i7f8SkOf/GJLn/xSS5/8Xkuf/LZ3q/3fB9P+My/f/e8P1/2u68v8yn+r/GJLn/xiS5/8Ykuf/ + GJLn/zGf6/8imOj/FpLl/y6d6f9WsO7/Mprv/3S2+v++3f5TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + f3//Amy0/lJFnvnuS6fy/zag6P8Vkef/EJLn/xKS5v8mmOj/a7ry/4zL9/+FxfD/Z7bu/y6c6v8Xkuf/ + GJLn/xeS5/8Ykuf/FpHn/xGS5/8clej/Tqvt/zic8v9rsvnux9/+Uv///wIAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHK1/ldDn/roSabx/z6h6f8ZkuX/FY7f/x+T4f9fs+v/jMr1/2K27v8Tkef/ + E5Hn/xGP5/8Vkef/E4/n/xSQ5/8Rjuf/H5Xn/0io7P82m/L/a7L66M3n/lcAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK1/1BKofn7SKLw/0Ch5v8VkN//HZLh/1yx6/+MyPH/ + XrPt/xOO5P8Qjuf/EI7n/xCO5v8SjuL/EY7i/xuT5/9Ipun/N5rw/26z+fvV5f9QAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmv/ldKofn7Tabx/zyg5v8glOH/ + Z7Xr/4zH7/94vu7/QaXq/xuT5/8QjuH/EI7k/xGO3v8Xj97/Tajn/zab8f9rs/n7u9v+VwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK1/1BDnfro + UKby/1Sr6f95vez/isbv/4TD7/90u+z/Lpvi/xCO3v8Pjd7/H5Pg/1Kq6/86nPL/abL66NXl/1AAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAHK1/ldFnvnuX67z/5nM8/+IxPD/Q6Xo/zGd5f8UjuD/DIre/xyQ4P9Lpur/OJvy/3Cy+e7V5/5X + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAGy0/lJdqvv/j8X3/5DI8f8Qi9//Coje/wiG3v8QjN7/UKnm/zWZ7/9ztfr/ + x9/+UgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf3//Am61/lNirvrwgMD3/z2g5/8NiN//FI7f/1Cp5v86nPH/ + b7L58MTd/lP///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO0/lZZqfrodr7y/0Ok5v9Lp+f/ + Oprx/2mw+ujV5/5WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHO3/lJVqPb4 + QqDu/zSZ8P9xs/n41ub+UgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGmv/ldDnvn/cbT5/8Hb/lcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP/+f////D////g////wH///4Af//8AH//+AA///AAD//gAAf/wAAH/4AAA/ + 8AAAD+AAAA/AAAAHgAAAAQAAAAAAAAAAgAAAAcAAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/8AAP//gAH/ + /8AD///gB///8A////gf///8P////n//KAAAACAAAABAAAAAAQAIAAAAAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8Iht7/Coje/wyJ3v8Pjd7/EIvf/xCN3v8Vjt7/FZDf/xGO4f8UjuD/EY7m/xGR5v8Vkeb/ + HZLg/xiS5v8blef/H5Xn/xuV6v8dlen/Hpbs/x+Y7f8xiuf/OY7n/zCM6f8glOH/Lpvi/yGW6/8hlu7/ + Ipjo/yaZ6P8gmO3/KZrr/y2d6f8rnu3/LZ/v/zGd5f8xn+r/Mprv/zWZ7/8vmPL/LZr3/y2a+P8xl/f/ + OJPx/zyW8/8ymfL/Npnx/zCa9/80nPf/OZrx/zmc8f8+nfL/OZr3/zqd9f8+nvb/MJj4/zyg5v82oOj/ + NKDu/zqi6f8+oen/PqLt/zmk7v8/pe7/LKHw/ymi9v8so/b/L6X3/y+g+P8yo/D/NKbz/zeg9P8xpvb/ + Oabw/zyn8P87qfP/Pqjx/zuo9f82qfj/Qp7v/0Of8/9Bnfb/Sp73/0Oe+v9Gn/r/Rp/8/0Ch5v9DpOb/ + S6fn/02o5/9Cpen/QqDu/0Om7v9Fp+3/Sabp/0io7P9Oq+3/UKnm/1Kq6/9Uq+n/VrDu/12y6/9dsu3/ + QaLw/0Sk8P9Boff/RaD2/0ii8P9KpvH/Tabx/0mh9/9Ipfb/QKjw/0ap8f9Eq/f/Qa73/0as9f9MrvH/ + RqH6/0ek+P9Kovr/SqT4/06k+P9Frvn/UKby/1Gq9/9Vqff/X67z/1mp+/9cqfr/Xqv8/0ux9v9Hsfn/ + TbP+/1Gx8/9XsvX/V7T1/1m39/9ft/X/ULf7/1C2/v9Yuf3/Xrz+/2e16/9itu7/Z7bu/2667v90u+z/ + crzt/3i97f9jrvv/aa/7/2C18f9isPf/aLb3/2229/9lufL/YLj0/2S79f9quvH/bL30/2mx+v9tsvr/ + arT6/220+v9psf7/bLP+/2+0/v9ivP7/aLz4/3a+8v9wv/b/cLP6/3G0+v90tvr/c7b//326+/91wfL/ + csH2/3bA9f93xPf/e8Ly/3rC9f94xPf/f8T1/3LD+f92xfj/e8j//3zK/v+Ew+//isbv/4zH7/+FxfD/ + gMD3/4HE9v+Fx/X/iMXx/4nH9/+Pxff/hcjy/4LJ9v+Eyfb/i8nz/4zI8f+Jyvb/jMr2/4rM9/+NzPb/ + gcb4/4bH+f+Kx/v/jMT9/4LJ+P+Eyfj/icr9/4/L/P+LzP3/js///5DI8f+Rzvf/lM72/5nM8/+az/f/ + lM/4/5LM/f+Uzv7/i9D//43Q//+T0fb/lNH3/5nR9/+U0vr/k9H9/5TT/v+W1P//mdL6/53S+v+d1Pj/ + mdP+/5nV/v+c1v//osz9/6DW9/+h1///pdf//7nc/v+93P7/wNz+/8Te/v/C4P7/x+D+/8jg/v/O5/// + 1uf//wAAAAD////////////////////2//////////////////////////////////////////pJ//// + //////////////////////////////////9Fqv3/////////////////////////////////////9IyP + 8Or/////////////////////////////////qkKPver09OP2///////////////////////////////2 + hYzj9PTx8eSE////////////////////////////RYVPT+Px8fHx9P7///////////////////////// + //qFSYy98PHx8fHx9Or///////////////////////9FdElJhb3x8fHx8fDw9PH9//////////////// + /////opJQkJJjvDw8fHx6+vw7df//////////////////6HuikJCQ3S18Ovr8Ovr6+bq8f7///////// + //////7q88+JQUFPhLvq6uvs6uXo6OLg59h1////////////Psnl5cmenrpMRMnq6Oro5uXd6uDl6Ov9 + //////////pMRnS25eXQu0dMyeXl5ejm3ebd5t3l5s7///////9BdBUVFSGf5eWfInS7yeXm5ebo3Nzc + 5eXl5f3///+kQ0wdDBASFUGfz8mHdk120OXl3OXl5eXQz8/P5eWE//CMTBISEgwVFSKz5cnKs4fJz+Xo + 5eXl0OXPz8/9/vTx///+9nQMEBUVFUzP5clNRkpMyOXQz9DQz8/P5eWp//////+PTBAMDBAQHaDPsxUV + FR2yoZ3PycnIyfH+/v/////////+vQwQEAwQTM/PPCEQFT8eELVmPLKKdHH///////////aPdAwQDAwk + stC4oCUQDRAMRx0Mj/39/v/////////////+9k8MDCKfz8iQIQ0QDRAMDBWHjv////////////////+P + dBAIGZHQkQwMDAwMDAyM/f7////////////////////++k8QZsiRCAwMDAQMDHaO//////////////// + //////+pcRmQwJVbEAQMBIz9/v/////////////////////////+9uvPyJUaBAQOZY7///////////// + //////////////+288hMGgQEEOv+//////////////////////////////7+/owEBAxljP7///////// + ///////////////////////xTAyF/f7////////////////////////////////////+8Y+M//////// + //////////////////////////////+9/v///////////////////////////////////////72s//// + //////////////////5////8P///+D////Af///gB///wAf//4AD//8AAP/+AAB//AAAf/gAAD/wAAAP + 4AAAD8AAAAeAAAABAAAAAAAAAACAAAABwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//wAA//+AAf//wAP/ + /+AH///wD///+B////w////+f/8oAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2OX/FFqq+tM2lO+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwtr+FWOx+ctRsfv/er/4/jeY8HwAf/8CAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Of+FmOw+s9Jrvz/jdD//6HX//9+xf3/QqD1ggAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudz+FmWv+s09p/f/TrX7/5jV//+c1///nNb//4DD/P1IoPp/ + f3//AgAAAAAAAAAAAAAAAAAAAAAAAAAA0Of+FnS4+s0+p/b/LaT3/1O2+/+a1v//nNf//5nW//+Z1f// + gMH7/0ig+n8AAAAAAAAAAAAAAAAAAAAAwtr+FXu8+s+Oy/f/Qqv0/y2k9f9euvf/ltT+/5bU/v+U0/z/ + lNL6/5bQ/f9+wfn9SKL3gn9//wIAAAAAzOX/FGSv98tOqvL/ecL0/4LH9v93w/f/Nqb0/4zO+f+U0vn/ + lNP4/5TR9/+Uz/n/ldD3/37B+P9BoPZ8AAAAAGGw99M1nu7/HJTq/yKY7P9iuPL/g8j2/0Oq8v9gufT/ + kdD3/5TQ9/+U0Pf/k8/3/5DN9/+PzPf/fcD2/kui94REoPfTM57q/xiS5/8alOn/Ipnu/3PA9f+Hyvb/ + Ta/y/2K58/+Pzvb/kM33/4/M9/+Ny/f/jMr1/3vA9f9ytvrTcrL/FEqk98sxnur/F5Ln/xiS5/84ouz/ + hcj3/yib7P8eluv/UK/v/2G28f9muPD/d8Dy/16x8P9ttvnLzOX/FAAAAABttv4VS6P3zzSe6/8Ukuf/ + H5bo/3/E9f91vvH/JJjo/xiS5/8elej/GZTn/0Kl7f9lsffPwtr+FQAAAAAAAAAAAAAAAHO5/hZLpPfN + N57p/xqR4P91vu//OaLp/xGP5/8Sj+X/FJDm/zmf6/9nsPfN0Of+FgAAAAAAAAAAAAAAAAAAAAAAAAAA + aK3+Fk2k981Aoej/fcDt/2y47f8ak+L/FI/g/zyf6f9ksPfNudz+FgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABzuf4WWKj4z5DH8/8jleL/Dovf/zue6P9nsPfP0Of+FgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAG22/hVqsvnLQaLn/zqe5/9osffLwtr+FQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcrL/FEyk9tNmsPbT2OX/FAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP5/AAD8fwAA+B8AAPAfAADgDwAAwAMAAIADAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAD4HwAA + /D8AAP5/AAAoAAAAEAAAACAAAAABAAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAA/w6L3/8Uj+D/ + EY/n/xKP5f8UkOb/FJLn/xeS5/8akeD/GpPi/xiS5/8ZlOf/GpTp/xyU6v8elej/Hpbr/x+W6P8jleL/ + JJjo/yKY7f8om+z/Op7n/zGe6v8znur/NJ7r/zee6f81nu7/OZ/r/zue6P88n+n/NpTw/ziY8P85mvf/ + OaLp/zii7P8tpPb/Nqb0/z2n9/8+p/b/Sp73/0Gi5/9Aoej/QqXt/1Cv7/9CoPf/Q6H1/0qi9/9MpPb/ + Q6ry/0Kr9P9OqvL/Ta/y/0Wh+P9IoPr/SKL4/0yj+P9KpPj/S6T4/0yk+P9NpPj/Sa78/1mp+f9bqvr/ + TrX7/16x8P9euvf/UbH7/1O2+/9suO3/db7v/2av+v9htvH/ZbH3/2ew9/9iuPL/Zrjw/2C59P9isPj/ + Y7H6/2Sw+v9lsPj/Z7H4/2iw+P9rs/r/bbb6/2mx/v9rsv7/b7T+/3W+8f9zt/r/c7b//3W4+v97vPr/ + fcDt/3fA8v9zwPX/d8P3/3vA9f95wvT/fcH3/3/E9f96wPn/fsH4/3/C+v9+xf3/gsf2/4PI9v+FyPf/ + h8r2/4zK9f+Ny/f/jsv3/4/M9/+Pzvb/gMH7/4DE/f+Mzvn/kMfz/5DN9/+Tz/f/lM/5/43Q//+R0Pf/ + lND3/5XQ9/+U0vn/ltD9/5TT/P+W1P7/mNX//5nV//+Z1v//mtb//5zW//+h1///vNz+/8De/v/E3v7/ + xd7+/87n///W5///AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ + AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAP////////// + ////////////////////i///////////////////P3+LjP//////////////iz+Dg4P///////////// + MSM/g4ODi4z/////////jD8jQX9/fX19////////MWBqYCR6fX16f4uM////gz8jQWoxQXp6enp6ff// + /z8LBhNfbDNMenp0i4yM////jIM/I3QUCz9BQWxo//////8/CwtqXxQLP4OM/////////4yDgyQGBgtD + ////////////QWxBP4OM//////////////+Mgz8//////////////////4uM//////////////////// + ///////////+fwAA/H8AAPgfAADwHwAA4A8AAMADAACAAwAAAAAAAAAAAACAAQAAwAMAAOAHAADwDwAA + +B8AAPw/AAD+fwAA + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.Designer.cs b/JenkinsTray/UI/Controls/NotificationSettingsControl.Designer.cs similarity index 97% rename from HudsonTrayTracker/UI/Controls/NotificationSettingsControl.Designer.cs rename to JenkinsTray/UI/Controls/NotificationSettingsControl.Designer.cs index a5c166a..cf9d979 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.Designer.cs +++ b/JenkinsTray/UI/Controls/NotificationSettingsControl.Designer.cs @@ -1,117 +1,117 @@ -namespace Hudson.TrayTracker.UI.Controls -{ - partial class NotificationSettingsControl - { - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.pathEdit = new DevExpress.XtraEditors.ButtonEdit(); - this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.statusLabel = new DevExpress.XtraEditors.LabelControl(); - this.testSoundButton = new DevExpress.XtraEditors.SimpleButton(); - ((System.ComponentModel.ISupportInitialize)(this.pathEdit.Properties)).BeginInit(); - this.tableLayoutPanel.SuspendLayout(); - this.SuspendLayout(); - // - // pathEdit - // - this.pathEdit.Dock = System.Windows.Forms.DockStyle.Fill; - this.pathEdit.Location = new System.Drawing.Point(3, 28); - this.pathEdit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.pathEdit.Name = "pathEdit"; - this.pathEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(), - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Close)}); - this.pathEdit.Size = new System.Drawing.Size(117, 22); - this.pathEdit.TabIndex = 1; - this.pathEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.pathEdit_ButtonClick); - this.pathEdit.EditValueChanged += new System.EventHandler(this.pathEdit_EditValueChanged); - // - // tableLayoutPanel - // - this.tableLayoutPanel.AutoSize = true; - this.tableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel.ColumnCount = 2; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.Controls.Add(this.pathEdit, 0, 1); - this.tableLayoutPanel.Controls.Add(this.statusLabel, 0, 0); - this.tableLayoutPanel.Controls.Add(this.testSoundButton, 1, 1); - this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 2; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel.Size = new System.Drawing.Size(216, 60); - this.tableLayoutPanel.TabIndex = 2; - // - // statusLabel - // - this.statusLabel.Location = new System.Drawing.Point(3, 4); - this.statusLabel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.statusLabel.Name = "statusLabel"; - this.statusLabel.Size = new System.Drawing.Size(36, 16); - this.statusLabel.TabIndex = 2; - this.statusLabel.Text = "Sound"; - // - // testSoundButton - // - this.testSoundButton.Location = new System.Drawing.Point(126, 28); - this.testSoundButton.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.testSoundButton.Name = "testSoundButton"; - this.testSoundButton.Size = new System.Drawing.Size(87, 28); - this.testSoundButton.TabIndex = 3; - this.testSoundButton.Text = "Test"; - this.testSoundButton.Click += new System.EventHandler(this.testSoundButton_Click); - // - // NotificationSettingsControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSize = true; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.Controls.Add(this.tableLayoutPanel); - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.Name = "NotificationSettingsControl"; - this.Size = new System.Drawing.Size(216, 60); - ((System.ComponentModel.ISupportInitialize)(this.pathEdit.Properties)).EndInit(); - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private DevExpress.XtraEditors.ButtonEdit pathEdit; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - private DevExpress.XtraEditors.LabelControl statusLabel; - private DevExpress.XtraEditors.SimpleButton testSoundButton; - } -} +namespace Jenkins.Tray.UI.Controls +{ + partial class NotificationSettingsControl + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.pathEdit = new DevExpress.XtraEditors.ButtonEdit(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.statusLabel = new DevExpress.XtraEditors.LabelControl(); + this.testSoundButton = new DevExpress.XtraEditors.SimpleButton(); + ((System.ComponentModel.ISupportInitialize)(this.pathEdit.Properties)).BeginInit(); + this.tableLayoutPanel.SuspendLayout(); + this.SuspendLayout(); + // + // pathEdit + // + this.pathEdit.Dock = System.Windows.Forms.DockStyle.Fill; + this.pathEdit.Location = new System.Drawing.Point(3, 28); + this.pathEdit.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.pathEdit.Name = "pathEdit"; + this.pathEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(), + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Close)}); + this.pathEdit.Size = new System.Drawing.Size(117, 22); + this.pathEdit.TabIndex = 1; + this.pathEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.pathEdit_ButtonClick); + this.pathEdit.EditValueChanged += new System.EventHandler(this.pathEdit_EditValueChanged); + // + // tableLayoutPanel + // + this.tableLayoutPanel.AutoSize = true; + this.tableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel.ColumnCount = 2; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel.Controls.Add(this.pathEdit, 0, 1); + this.tableLayoutPanel.Controls.Add(this.statusLabel, 0, 0); + this.tableLayoutPanel.Controls.Add(this.testSoundButton, 1, 1); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 2; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel.Size = new System.Drawing.Size(216, 60); + this.tableLayoutPanel.TabIndex = 2; + // + // statusLabel + // + this.statusLabel.Location = new System.Drawing.Point(3, 4); + this.statusLabel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(36, 16); + this.statusLabel.TabIndex = 2; + this.statusLabel.Text = "Sound"; + // + // testSoundButton + // + this.testSoundButton.Location = new System.Drawing.Point(126, 28); + this.testSoundButton.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.testSoundButton.Name = "testSoundButton"; + this.testSoundButton.Size = new System.Drawing.Size(87, 28); + this.testSoundButton.TabIndex = 3; + this.testSoundButton.Text = "Test"; + this.testSoundButton.Click += new System.EventHandler(this.testSoundButton_Click); + // + // NotificationSettingsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.Controls.Add(this.tableLayoutPanel); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "NotificationSettingsControl"; + this.Size = new System.Drawing.Size(216, 60); + ((System.ComponentModel.ISupportInitialize)(this.pathEdit.Properties)).EndInit(); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraEditors.ButtonEdit pathEdit; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private DevExpress.XtraEditors.LabelControl statusLabel; + private DevExpress.XtraEditors.SimpleButton testSoundButton; + } +} diff --git a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.cs b/JenkinsTray/UI/Controls/NotificationSettingsControl.cs similarity index 91% rename from HudsonTrayTracker/UI/Controls/NotificationSettingsControl.cs rename to JenkinsTray/UI/Controls/NotificationSettingsControl.cs index 5d73ab2..6cd2e65 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.cs +++ b/JenkinsTray/UI/Controls/NotificationSettingsControl.cs @@ -1,117 +1,117 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using DevExpress.XtraEditors.Controls; -using Spring.Context.Support; -using System.Diagnostics; - -namespace Hudson.TrayTracker.UI.Controls -{ - public partial class NotificationSettingsControl : DevExpress.XtraEditors.XtraUserControl - { - ConfigurationService configurationService; - - public string Status { get; set; } - - public string SoundPath - { - get { return pathEdit.Text; } - set - { - pathEdit.Text = value; - testSoundButton.Enabled = string.IsNullOrEmpty(value) == false; - } - } - - public NotificationSettingsControl() - { - InitializeComponent(); - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - // designer mode (workaround: DesignMode is not chained to child controls) - if (DesignMode || Process.GetCurrentProcess().ProcessName == "devenv") - return; - - if (configurationService == null) - { - configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); - } - - statusLabel.Text = HudsonTrayTrackerResources.ResourceManager.GetString("NotificationSettings_" + Status); - } - - public void Initialize() - { - if (configurationService == null) - { - configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); - } - SoundPath = configurationService.GetSoundPath(Status); - } - - private void pathEdit_ButtonClick(object sender, ButtonPressedEventArgs e) - { - if (e.Button.Kind == ButtonPredefines.Close) - SetPath(null); - else if (e.Button.Kind == ButtonPredefines.Ellipsis) - ChooseFile(); - } - - private void ChooseFile() - { - OpenFileDialog fileDialog = new OpenFileDialog(); - fileDialog.CheckFileExists = true; - fileDialog.Filter = "Sound file (*.wav)|*.wav"; - - DialogResult res = fileDialog.ShowDialog(); - if (res == DialogResult.OK) - { - SetPath(fileDialog.FileName); - } - } - - private void SetPath(string path) - { - if (configurationService == null) - { - configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); - } - - configurationService.SetSoundPath(Status, path); - SoundPath = path; - } - - private void testSoundButton_Click(object sender, EventArgs e) - { - SoundPlayer.PlayFile(SoundPath); - } - - private void pathEdit_EditValueChanged(object sender, EventArgs e) - { - if (!String.IsNullOrEmpty(pathEdit.Text)) - { - SetPath(pathEdit.Text); - } - } - - public void InvalidateData() - { - if (String.IsNullOrEmpty(pathEdit.Text) || - !pathEdit.Text.EndsWith(".wav", true, System.Globalization.CultureInfo.CurrentCulture) || - !System.IO.File.Exists(pathEdit.Text)) - { - SetPath(String.Empty); - } - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using DevExpress.XtraEditors.Controls; +using Spring.Context.Support; +using System.Diagnostics; + +namespace Jenkins.Tray.UI.Controls +{ + public partial class NotificationSettingsControl : DevExpress.XtraEditors.XtraUserControl + { + ConfigurationService configurationService; + + public string Status { get; set; } + + public string SoundPath + { + get { return pathEdit.Text; } + set + { + pathEdit.Text = value; + testSoundButton.Enabled = string.IsNullOrEmpty(value) == false; + } + } + + public NotificationSettingsControl() + { + InitializeComponent(); + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + // designer mode (workaround: DesignMode is not chained to child controls) + if (DesignMode || Process.GetCurrentProcess().ProcessName == "devenv") + return; + + if (configurationService == null) + { + configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); + } + + statusLabel.Text = JenkinsTrayResources.ResourceManager.GetString("NotificationSettings_" + Status); + } + + public void Initialize() + { + if (configurationService == null) + { + configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); + } + SoundPath = configurationService.GetSoundPath(Status); + } + + private void pathEdit_ButtonClick(object sender, ButtonPressedEventArgs e) + { + if (e.Button.Kind == ButtonPredefines.Close) + SetPath(null); + else if (e.Button.Kind == ButtonPredefines.Ellipsis) + ChooseFile(); + } + + private void ChooseFile() + { + OpenFileDialog fileDialog = new OpenFileDialog(); + fileDialog.CheckFileExists = true; + fileDialog.Filter = "Sound file (*.wav)|*.wav"; + + DialogResult res = fileDialog.ShowDialog(); + if (res == DialogResult.OK) + { + SetPath(fileDialog.FileName); + } + } + + private void SetPath(string path) + { + if (configurationService == null) + { + configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); + } + + configurationService.SetSoundPath(Status, path); + SoundPath = path; + } + + private void testSoundButton_Click(object sender, EventArgs e) + { + SoundPlayer.PlayFile(SoundPath); + } + + private void pathEdit_EditValueChanged(object sender, EventArgs e) + { + if (!String.IsNullOrEmpty(pathEdit.Text)) + { + SetPath(pathEdit.Text); + } + } + + public void InvalidateData() + { + if (String.IsNullOrEmpty(pathEdit.Text) || + !pathEdit.Text.EndsWith(".wav", true, System.Globalization.CultureInfo.CurrentCulture) || + !System.IO.File.Exists(pathEdit.Text)) + { + SetPath(String.Empty); + } + } + } +} diff --git a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.resx b/JenkinsTray/UI/Controls/NotificationSettingsControl.resx similarity index 97% rename from HudsonTrayTracker/UI/Controls/NotificationSettingsControl.resx rename to JenkinsTray/UI/Controls/NotificationSettingsControl.resx index ff31a6d..19dc0dd 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationSettingsControl.resx +++ b/JenkinsTray/UI/Controls/NotificationSettingsControl.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.Designer.cs b/JenkinsTray/UI/Controls/NotificationsSettingsControl.Designer.cs similarity index 94% rename from HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.Designer.cs rename to JenkinsTray/UI/Controls/NotificationsSettingsControl.Designer.cs index 234ff63..ec6c263 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.Designer.cs +++ b/JenkinsTray/UI/Controls/NotificationsSettingsControl.Designer.cs @@ -1,186 +1,186 @@ -namespace Hudson.TrayTracker.UI.Controls -{ - partial class NotificationsSettingsControl - { - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.notificationSettingsControl1 = new Hudson.TrayTracker.UI.Controls.NotificationSettingsControl(); - this.notificationSettingsControl2 = new Hudson.TrayTracker.UI.Controls.NotificationSettingsControl(); - this.notificationSettingsControl3 = new Hudson.TrayTracker.UI.Controls.NotificationSettingsControl(); - this.notificationSettingsControl4 = new Hudson.TrayTracker.UI.Controls.NotificationSettingsControl(); - this.enableSoundCheckBox = new DevExpress.XtraEditors.CheckEdit(); - this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); - this.treatUnstableAsFailedCheckBox = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.enableSoundCheckBox.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); - this.groupControl1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.treatUnstableAsFailedCheckBox.Properties)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl2, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl3, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl4, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.enableSoundCheckBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.treatUnstableAsFailedCheckBox, 0, 6); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(2, 25); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(552, 391); - this.tableLayoutPanel1.TabIndex = 0; - // - // notificationSettingsControl1 - // - this.notificationSettingsControl1.AutoSize = true; - this.notificationSettingsControl1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.notificationSettingsControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.notificationSettingsControl1.Location = new System.Drawing.Point(3, 34); - this.notificationSettingsControl1.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.notificationSettingsControl1.Name = "notificationSettingsControl1"; - this.notificationSettingsControl1.Size = new System.Drawing.Size(546, 60); - this.notificationSettingsControl1.SoundPath = ""; - this.notificationSettingsControl1.Status = "Failed"; - this.notificationSettingsControl1.TabIndex = 1; - // - // notificationSettingsControl2 - // - this.notificationSettingsControl2.AutoSize = true; - this.notificationSettingsControl2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.notificationSettingsControl2.Dock = System.Windows.Forms.DockStyle.Fill; - this.notificationSettingsControl2.Location = new System.Drawing.Point(3, 104); - this.notificationSettingsControl2.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.notificationSettingsControl2.Name = "notificationSettingsControl2"; - this.notificationSettingsControl2.Size = new System.Drawing.Size(546, 60); - this.notificationSettingsControl2.SoundPath = ""; - this.notificationSettingsControl2.Status = "Fixed"; - this.notificationSettingsControl2.TabIndex = 2; - // - // notificationSettingsControl3 - // - this.notificationSettingsControl3.AutoSize = true; - this.notificationSettingsControl3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.notificationSettingsControl3.Dock = System.Windows.Forms.DockStyle.Fill; - this.notificationSettingsControl3.Location = new System.Drawing.Point(3, 174); - this.notificationSettingsControl3.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.notificationSettingsControl3.Name = "notificationSettingsControl3"; - this.notificationSettingsControl3.Size = new System.Drawing.Size(546, 60); - this.notificationSettingsControl3.SoundPath = ""; - this.notificationSettingsControl3.Status = "StillFailing"; - this.notificationSettingsControl3.TabIndex = 3; - // - // notificationSettingsControl4 - // - this.notificationSettingsControl4.AutoSize = true; - this.notificationSettingsControl4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.notificationSettingsControl4.Dock = System.Windows.Forms.DockStyle.Fill; - this.notificationSettingsControl4.Location = new System.Drawing.Point(3, 244); - this.notificationSettingsControl4.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); - this.notificationSettingsControl4.Name = "notificationSettingsControl4"; - this.notificationSettingsControl4.Size = new System.Drawing.Size(546, 60); - this.notificationSettingsControl4.SoundPath = ""; - this.notificationSettingsControl4.Status = "Succeeded"; - this.notificationSettingsControl4.TabIndex = 3; - // - // enableSoundCheckBox - // - this.enableSoundCheckBox.Location = new System.Drawing.Point(3, 4); - this.enableSoundCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.enableSoundCheckBox.Name = "enableSoundCheckBox"; - this.enableSoundCheckBox.Properties.Caption = "&Enable sound notifications"; - this.enableSoundCheckBox.Size = new System.Drawing.Size(175, 21); - this.enableSoundCheckBox.TabIndex = 0; - this.enableSoundCheckBox.CheckedChanged += new System.EventHandler(this.enableSoundCheckBox_CheckedChanged); - // - // groupControl1 - // - this.groupControl1.AppearanceCaption.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.groupControl1.AppearanceCaption.Options.UseFont = true; - this.groupControl1.Controls.Add(this.tableLayoutPanel1); - this.groupControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupControl1.Location = new System.Drawing.Point(0, 0); - this.groupControl1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.groupControl1.Name = "groupControl1"; - this.groupControl1.Size = new System.Drawing.Size(556, 418); - this.groupControl1.TabIndex = 1; - this.groupControl1.Text = "Configure sound notifications"; - // - // treatUnstableAsFailedCheckBox - // - this.treatUnstableAsFailedCheckBox.Location = new System.Drawing.Point(3, 313); - this.treatUnstableAsFailedCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.treatUnstableAsFailedCheckBox.Name = "treatUnstableAsFailedCheckBox"; - this.treatUnstableAsFailedCheckBox.Properties.Caption = "&Treat unstable as failed"; - this.treatUnstableAsFailedCheckBox.Size = new System.Drawing.Size(162, 21); - this.treatUnstableAsFailedCheckBox.TabIndex = 9; - this.treatUnstableAsFailedCheckBox.CheckedChanged += new System.EventHandler(this.treatUnstableAsFailedCheckBox_CheckedChanged); - // - // NotificationsSettingsControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupControl1); - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.Name = "NotificationsSettingsControl"; - this.Size = new System.Drawing.Size(556, 418); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.enableSoundCheckBox.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); - this.groupControl1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.treatUnstableAsFailedCheckBox.Properties)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private NotificationSettingsControl notificationSettingsControl1; - private NotificationSettingsControl notificationSettingsControl2; - private NotificationSettingsControl notificationSettingsControl3; - private NotificationSettingsControl notificationSettingsControl4; - private DevExpress.XtraEditors.GroupControl groupControl1; - private DevExpress.XtraEditors.CheckEdit enableSoundCheckBox; - private DevExpress.XtraEditors.CheckEdit treatUnstableAsFailedCheckBox; - } -} +namespace Jenkins.Tray.UI.Controls +{ + partial class NotificationsSettingsControl + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.notificationSettingsControl1 = new Jenkins.Tray.UI.Controls.NotificationSettingsControl(); + this.notificationSettingsControl2 = new Jenkins.Tray.UI.Controls.NotificationSettingsControl(); + this.notificationSettingsControl3 = new Jenkins.Tray.UI.Controls.NotificationSettingsControl(); + this.notificationSettingsControl4 = new Jenkins.Tray.UI.Controls.NotificationSettingsControl(); + this.enableSoundCheckBox = new DevExpress.XtraEditors.CheckEdit(); + this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); + this.treatUnstableAsFailedCheckBox = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.enableSoundCheckBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); + this.groupControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.treatUnstableAsFailedCheckBox.Properties)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl1, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl2, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl3, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.notificationSettingsControl4, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.enableSoundCheckBox, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.treatUnstableAsFailedCheckBox, 0, 6); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(2, 25); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 8; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(552, 391); + this.tableLayoutPanel1.TabIndex = 0; + // + // notificationSettingsControl1 + // + this.notificationSettingsControl1.AutoSize = true; + this.notificationSettingsControl1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.notificationSettingsControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.notificationSettingsControl1.Location = new System.Drawing.Point(3, 34); + this.notificationSettingsControl1.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.notificationSettingsControl1.Name = "notificationSettingsControl1"; + this.notificationSettingsControl1.Size = new System.Drawing.Size(546, 60); + this.notificationSettingsControl1.SoundPath = ""; + this.notificationSettingsControl1.Status = "Failed"; + this.notificationSettingsControl1.TabIndex = 1; + // + // notificationSettingsControl2 + // + this.notificationSettingsControl2.AutoSize = true; + this.notificationSettingsControl2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.notificationSettingsControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.notificationSettingsControl2.Location = new System.Drawing.Point(3, 104); + this.notificationSettingsControl2.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.notificationSettingsControl2.Name = "notificationSettingsControl2"; + this.notificationSettingsControl2.Size = new System.Drawing.Size(546, 60); + this.notificationSettingsControl2.SoundPath = ""; + this.notificationSettingsControl2.Status = "Fixed"; + this.notificationSettingsControl2.TabIndex = 2; + // + // notificationSettingsControl3 + // + this.notificationSettingsControl3.AutoSize = true; + this.notificationSettingsControl3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.notificationSettingsControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.notificationSettingsControl3.Location = new System.Drawing.Point(3, 174); + this.notificationSettingsControl3.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.notificationSettingsControl3.Name = "notificationSettingsControl3"; + this.notificationSettingsControl3.Size = new System.Drawing.Size(546, 60); + this.notificationSettingsControl3.SoundPath = ""; + this.notificationSettingsControl3.Status = "StillFailing"; + this.notificationSettingsControl3.TabIndex = 3; + // + // notificationSettingsControl4 + // + this.notificationSettingsControl4.AutoSize = true; + this.notificationSettingsControl4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.notificationSettingsControl4.Dock = System.Windows.Forms.DockStyle.Fill; + this.notificationSettingsControl4.Location = new System.Drawing.Point(3, 244); + this.notificationSettingsControl4.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5); + this.notificationSettingsControl4.Name = "notificationSettingsControl4"; + this.notificationSettingsControl4.Size = new System.Drawing.Size(546, 60); + this.notificationSettingsControl4.SoundPath = ""; + this.notificationSettingsControl4.Status = "Succeeded"; + this.notificationSettingsControl4.TabIndex = 3; + // + // enableSoundCheckBox + // + this.enableSoundCheckBox.Location = new System.Drawing.Point(3, 4); + this.enableSoundCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.enableSoundCheckBox.Name = "enableSoundCheckBox"; + this.enableSoundCheckBox.Properties.Caption = "&Enable sound notifications"; + this.enableSoundCheckBox.Size = new System.Drawing.Size(175, 21); + this.enableSoundCheckBox.TabIndex = 0; + this.enableSoundCheckBox.CheckedChanged += new System.EventHandler(this.enableSoundCheckBox_CheckedChanged); + // + // groupControl1 + // + this.groupControl1.AppearanceCaption.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.groupControl1.AppearanceCaption.Options.UseFont = true; + this.groupControl1.Controls.Add(this.tableLayoutPanel1); + this.groupControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupControl1.Location = new System.Drawing.Point(0, 0); + this.groupControl1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.groupControl1.Name = "groupControl1"; + this.groupControl1.Size = new System.Drawing.Size(556, 418); + this.groupControl1.TabIndex = 1; + this.groupControl1.Text = "Configure sound notifications"; + // + // treatUnstableAsFailedCheckBox + // + this.treatUnstableAsFailedCheckBox.Location = new System.Drawing.Point(3, 313); + this.treatUnstableAsFailedCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.treatUnstableAsFailedCheckBox.Name = "treatUnstableAsFailedCheckBox"; + this.treatUnstableAsFailedCheckBox.Properties.Caption = "&Treat unstable as failed"; + this.treatUnstableAsFailedCheckBox.Size = new System.Drawing.Size(162, 21); + this.treatUnstableAsFailedCheckBox.TabIndex = 9; + this.treatUnstableAsFailedCheckBox.CheckedChanged += new System.EventHandler(this.treatUnstableAsFailedCheckBox_CheckedChanged); + // + // NotificationsSettingsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupControl1); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.Name = "NotificationsSettingsControl"; + this.Size = new System.Drawing.Size(556, 418); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.enableSoundCheckBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); + this.groupControl1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.treatUnstableAsFailedCheckBox.Properties)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private NotificationSettingsControl notificationSettingsControl1; + private NotificationSettingsControl notificationSettingsControl2; + private NotificationSettingsControl notificationSettingsControl3; + private NotificationSettingsControl notificationSettingsControl4; + private DevExpress.XtraEditors.GroupControl groupControl1; + private DevExpress.XtraEditors.CheckEdit enableSoundCheckBox; + private DevExpress.XtraEditors.CheckEdit treatUnstableAsFailedCheckBox; + } +} diff --git a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.cs b/JenkinsTray/UI/Controls/NotificationsSettingsControl.cs similarity index 93% rename from HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.cs rename to JenkinsTray/UI/Controls/NotificationsSettingsControl.cs index fbf52ce..4533586 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.cs +++ b/JenkinsTray/UI/Controls/NotificationsSettingsControl.cs @@ -1,79 +1,79 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using Spring.Context.Support; - -namespace Hudson.TrayTracker.UI.Controls -{ - public partial class NotificationsSettingsControl : DevExpress.XtraEditors.XtraUserControl - { - ConfigurationService configurationService; - - public NotificationsSettingsControl() - { - InitializeComponent(); - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - // designer mode - if (DesignMode) - return; - - configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); - treatUnstableAsFailedCheckBox.Checked = configurationService.IsTreadUnstableAsFailed(); - enableSoundCheckBox.Checked = configurationService.IsSoundNotificationsEnabled(); - enableSoundCheckBox_CheckedChanged(null, null); - } - - public void InitializeValues() - { - notificationSettingsControl1.Initialize(); - notificationSettingsControl2.Initialize(); - notificationSettingsControl3.Initialize(); - notificationSettingsControl4.Initialize(); - } - - public bool SoundNotificationsEnabled() - { - return enableSoundCheckBox.Checked; - } - - private void enableSoundCheckBox_CheckedChanged(object sender, EventArgs e) - { - notificationSettingsControl1.Enabled = - notificationSettingsControl2.Enabled = - notificationSettingsControl3.Enabled = - notificationSettingsControl4.Enabled = - treatUnstableAsFailedCheckBox.Enabled = - enableSoundCheckBox.Checked; - configurationService.SetSoundNotifications(enableSoundCheckBox.Checked); - } - - public bool TreadUnstableAsFailed() - { - return treatUnstableAsFailedCheckBox.Checked; - } - - public void InvalidateData() - { - notificationSettingsControl1.InvalidateData(); - notificationSettingsControl2.InvalidateData(); - notificationSettingsControl3.InvalidateData(); - notificationSettingsControl4.InvalidateData(); - } - - private void treatUnstableAsFailedCheckBox_CheckedChanged(object sender, EventArgs e) - { - configurationService.SetTreadUnstableAsFailed(treatUnstableAsFailedCheckBox.Checked); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using Spring.Context.Support; + +namespace Jenkins.Tray.UI.Controls +{ + public partial class NotificationsSettingsControl : DevExpress.XtraEditors.XtraUserControl + { + ConfigurationService configurationService; + + public NotificationsSettingsControl() + { + InitializeComponent(); + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + // designer mode + if (DesignMode) + return; + + configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); + treatUnstableAsFailedCheckBox.Checked = configurationService.IsTreadUnstableAsFailed(); + enableSoundCheckBox.Checked = configurationService.IsSoundNotificationsEnabled(); + enableSoundCheckBox_CheckedChanged(null, null); + } + + public void InitializeValues() + { + notificationSettingsControl1.Initialize(); + notificationSettingsControl2.Initialize(); + notificationSettingsControl3.Initialize(); + notificationSettingsControl4.Initialize(); + } + + public bool SoundNotificationsEnabled() + { + return enableSoundCheckBox.Checked; + } + + private void enableSoundCheckBox_CheckedChanged(object sender, EventArgs e) + { + notificationSettingsControl1.Enabled = + notificationSettingsControl2.Enabled = + notificationSettingsControl3.Enabled = + notificationSettingsControl4.Enabled = + treatUnstableAsFailedCheckBox.Enabled = + enableSoundCheckBox.Checked; + configurationService.SetSoundNotifications(enableSoundCheckBox.Checked); + } + + public bool TreadUnstableAsFailed() + { + return treatUnstableAsFailedCheckBox.Checked; + } + + public void InvalidateData() + { + notificationSettingsControl1.InvalidateData(); + notificationSettingsControl2.InvalidateData(); + notificationSettingsControl3.InvalidateData(); + notificationSettingsControl4.InvalidateData(); + } + + private void treatUnstableAsFailedCheckBox_CheckedChanged(object sender, EventArgs e) + { + configurationService.SetTreadUnstableAsFailed(treatUnstableAsFailedCheckBox.Checked); + } + } +} diff --git a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.resx b/JenkinsTray/UI/Controls/NotificationsSettingsControl.resx similarity index 97% rename from HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.resx rename to JenkinsTray/UI/Controls/NotificationsSettingsControl.resx index ff31a6d..19dc0dd 100644 --- a/HudsonTrayTracker/UI/Controls/NotificationsSettingsControl.resx +++ b/JenkinsTray/UI/Controls/NotificationsSettingsControl.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ProjectListControl.Designer.cs b/JenkinsTray/UI/Controls/ProjectListControl.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/Controls/ProjectListControl.Designer.cs rename to JenkinsTray/UI/Controls/ProjectListControl.Designer.cs index 30d650a..388c729 100644 --- a/HudsonTrayTracker/UI/Controls/ProjectListControl.Designer.cs +++ b/JenkinsTray/UI/Controls/ProjectListControl.Designer.cs @@ -1,221 +1,221 @@ -namespace Hudson.TrayTracker.UI.Controls -{ - partial class ProjectListControl - { - /// - /// 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.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectListControl)); - this.projectsGridControl = new DevExpress.XtraGrid.GridControl(); - this.projectContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.selectAllProjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.unselectAllProjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.projectsGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.projectSelectedGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.projectSelectedCheckEdit = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit(); - this.projectNameGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); - this.bar2 = new DevExpress.XtraBars.Bar(); - this.toggleSelectionButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); - this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).BeginInit(); - this.projectContextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.projectSelectedCheckEdit)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); - this.SuspendLayout(); - // - // projectsGridControl - // - this.projectsGridControl.ContextMenuStrip = this.projectContextMenuStrip; - this.projectsGridControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.projectsGridControl.Location = new System.Drawing.Point(0, 26); - this.projectsGridControl.MainView = this.projectsGridView; - this.projectsGridControl.Name = "projectsGridControl"; - this.projectsGridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { - this.projectSelectedCheckEdit}); - this.projectsGridControl.Size = new System.Drawing.Size(680, 314); - this.projectsGridControl.TabIndex = 1; - this.projectsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.projectsGridView}); - this.projectsGridControl.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ProjectListControl_KeyPress); - this.projectsGridControl.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.projectsGridControl_MouseDoubleClick); - // - // projectContextMenuStrip - // - this.projectContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.selectAllProjectsMenuItem, - this.unselectAllProjectsMenuItem}); - this.projectContextMenuStrip.Name = "projectContextMenuStrip"; - this.projectContextMenuStrip.Size = new System.Drawing.Size(182, 48); - // - // selectAllProjectsMenuItem - // - this.selectAllProjectsMenuItem.Name = "selectAllProjectsMenuItem"; - this.selectAllProjectsMenuItem.Size = new System.Drawing.Size(181, 22); - this.selectAllProjectsMenuItem.Text = "Select all projects"; - this.selectAllProjectsMenuItem.Click += new System.EventHandler(this.selectAllProjectsMenuItem_Click); - // - // unselectAllProjectsMenuItem - // - this.unselectAllProjectsMenuItem.Name = "unselectAllProjectsMenuItem"; - this.unselectAllProjectsMenuItem.Size = new System.Drawing.Size(181, 22); - this.unselectAllProjectsMenuItem.Text = "Unselect all projects"; - this.unselectAllProjectsMenuItem.Click += new System.EventHandler(this.deselectAllProjectsMenuItem_Click); - // - // projectsGridView - // - this.projectsGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.projectSelectedGridColumn, - this.projectNameGridColumn}); - this.projectsGridView.GridControl = this.projectsGridControl; - this.projectsGridView.Name = "projectsGridView"; - this.projectsGridView.OptionsCustomization.AllowGroup = false; - this.projectsGridView.OptionsSelection.EnableAppearanceFocusedCell = false; - this.projectsGridView.OptionsView.ShowGroupPanel = false; - this.projectsGridView.OptionsView.ShowIndicator = false; - this.projectsGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { - new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.projectNameGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); - this.projectsGridView.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.projectsGridView_CustomUnboundColumnData); - // - // projectSelectedGridColumn - // - this.projectSelectedGridColumn.ColumnEdit = this.projectSelectedCheckEdit; - this.projectSelectedGridColumn.FieldName = "Selected"; - this.projectSelectedGridColumn.Name = "projectSelectedGridColumn"; - this.projectSelectedGridColumn.UnboundType = DevExpress.Data.UnboundColumnType.Boolean; - this.projectSelectedGridColumn.Visible = true; - this.projectSelectedGridColumn.VisibleIndex = 0; - this.projectSelectedGridColumn.Width = 28; - // - // projectSelectedCheckEdit - // - this.projectSelectedCheckEdit.AutoHeight = false; - this.projectSelectedCheckEdit.Name = "projectSelectedCheckEdit"; - this.projectSelectedCheckEdit.EditValueChanged += new System.EventHandler(this.projectSelectedCheckEdit_EditValueChanged); - // - // projectNameGridColumn - // - this.projectNameGridColumn.Caption = "Projects"; - this.projectNameGridColumn.FieldName = "Name"; - this.projectNameGridColumn.Name = "projectNameGridColumn"; - this.projectNameGridColumn.OptionsColumn.AllowEdit = false; - this.projectNameGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; - this.projectNameGridColumn.Visible = true; - this.projectNameGridColumn.VisibleIndex = 1; - this.projectNameGridColumn.Width = 302; - // - // barManager1 - // - this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { - this.bar2}); - this.barManager1.DockControls.Add(this.barDockControlTop); - this.barManager1.DockControls.Add(this.barDockControlBottom); - this.barManager1.DockControls.Add(this.barDockControlLeft); - this.barManager1.DockControls.Add(this.barDockControlRight); - this.barManager1.Form = this; - this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.toggleSelectionButtonItem}); - this.barManager1.MainMenu = this.bar2; - this.barManager1.MaxItemId = 7; - this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { - this.repositoryItemMarqueeProgressBar1}); - // - // bar2 - // - this.bar2.BarName = "Main menu"; - this.bar2.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top; - this.bar2.DockCol = 0; - this.bar2.DockRow = 0; - this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; - this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.toggleSelectionButtonItem)}); - this.bar2.OptionsBar.AllowQuickCustomization = false; - this.bar2.OptionsBar.DrawDragBorder = false; - this.bar2.OptionsBar.MultiLine = true; - this.bar2.OptionsBar.UseWholeRow = true; - this.bar2.Text = "Main menu"; - // - // toggleSelectionButtonItem - // - this.toggleSelectionButtonItem.Caption = "Select/unselect all projects"; - this.toggleSelectionButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("toggleSelectionButtonItem.Glyph"))); - this.toggleSelectionButtonItem.Id = 5; - this.toggleSelectionButtonItem.Name = "toggleSelectionButtonItem"; - this.toggleSelectionButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.toggleSelectionButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.toggleSelectionButtonItem_ItemClick); - // - // repositoryItemMarqueeProgressBar1 - // - this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; - // - // ProjectListControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.projectsGridControl); - this.Controls.Add(this.barDockControlLeft); - this.Controls.Add(this.barDockControlRight); - this.Controls.Add(this.barDockControlBottom); - this.Controls.Add(this.barDockControlTop); - this.Name = "ProjectListControl"; - this.Size = new System.Drawing.Size(680, 340); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).EndInit(); - this.projectContextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.projectSelectedCheckEdit)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraGrid.GridControl projectsGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView projectsGridView; - private DevExpress.XtraBars.BarManager barManager1; - private DevExpress.XtraBars.Bar bar2; - private DevExpress.XtraBars.BarDockControl barDockControlTop; - private DevExpress.XtraBars.BarDockControl barDockControlBottom; - private DevExpress.XtraBars.BarDockControl barDockControlLeft; - private DevExpress.XtraBars.BarDockControl barDockControlRight; - private DevExpress.XtraGrid.Columns.GridColumn projectNameGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn projectSelectedGridColumn; - private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit projectSelectedCheckEdit; - private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; - private System.Windows.Forms.ContextMenuStrip projectContextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem selectAllProjectsMenuItem; - private System.Windows.Forms.ToolStripMenuItem unselectAllProjectsMenuItem; - private DevExpress.XtraBars.BarButtonItem toggleSelectionButtonItem; - } +namespace Jenkins.Tray.UI.Controls +{ + partial class ProjectListControl + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectListControl)); + this.projectsGridControl = new DevExpress.XtraGrid.GridControl(); + this.projectContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.selectAllProjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.unselectAllProjectsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.projectsGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.projectSelectedGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.projectSelectedCheckEdit = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit(); + this.projectNameGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); + this.bar2 = new DevExpress.XtraBars.Bar(); + this.toggleSelectionButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).BeginInit(); + this.projectContextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.projectSelectedCheckEdit)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); + this.SuspendLayout(); + // + // projectsGridControl + // + this.projectsGridControl.ContextMenuStrip = this.projectContextMenuStrip; + this.projectsGridControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.projectsGridControl.Location = new System.Drawing.Point(0, 26); + this.projectsGridControl.MainView = this.projectsGridView; + this.projectsGridControl.Name = "projectsGridControl"; + this.projectsGridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.projectSelectedCheckEdit}); + this.projectsGridControl.Size = new System.Drawing.Size(680, 314); + this.projectsGridControl.TabIndex = 1; + this.projectsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.projectsGridView}); + this.projectsGridControl.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ProjectListControl_KeyPress); + this.projectsGridControl.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.projectsGridControl_MouseDoubleClick); + // + // projectContextMenuStrip + // + this.projectContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectAllProjectsMenuItem, + this.unselectAllProjectsMenuItem}); + this.projectContextMenuStrip.Name = "projectContextMenuStrip"; + this.projectContextMenuStrip.Size = new System.Drawing.Size(182, 48); + // + // selectAllProjectsMenuItem + // + this.selectAllProjectsMenuItem.Name = "selectAllProjectsMenuItem"; + this.selectAllProjectsMenuItem.Size = new System.Drawing.Size(181, 22); + this.selectAllProjectsMenuItem.Text = "Select all projects"; + this.selectAllProjectsMenuItem.Click += new System.EventHandler(this.selectAllProjectsMenuItem_Click); + // + // unselectAllProjectsMenuItem + // + this.unselectAllProjectsMenuItem.Name = "unselectAllProjectsMenuItem"; + this.unselectAllProjectsMenuItem.Size = new System.Drawing.Size(181, 22); + this.unselectAllProjectsMenuItem.Text = "Unselect all projects"; + this.unselectAllProjectsMenuItem.Click += new System.EventHandler(this.deselectAllProjectsMenuItem_Click); + // + // projectsGridView + // + this.projectsGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.projectSelectedGridColumn, + this.projectNameGridColumn}); + this.projectsGridView.GridControl = this.projectsGridControl; + this.projectsGridView.Name = "projectsGridView"; + this.projectsGridView.OptionsCustomization.AllowGroup = false; + this.projectsGridView.OptionsSelection.EnableAppearanceFocusedCell = false; + this.projectsGridView.OptionsView.ShowGroupPanel = false; + this.projectsGridView.OptionsView.ShowIndicator = false; + this.projectsGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.projectNameGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); + this.projectsGridView.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.projectsGridView_CustomUnboundColumnData); + // + // projectSelectedGridColumn + // + this.projectSelectedGridColumn.ColumnEdit = this.projectSelectedCheckEdit; + this.projectSelectedGridColumn.FieldName = "Selected"; + this.projectSelectedGridColumn.Name = "projectSelectedGridColumn"; + this.projectSelectedGridColumn.UnboundType = DevExpress.Data.UnboundColumnType.Boolean; + this.projectSelectedGridColumn.Visible = true; + this.projectSelectedGridColumn.VisibleIndex = 0; + this.projectSelectedGridColumn.Width = 28; + // + // projectSelectedCheckEdit + // + this.projectSelectedCheckEdit.AutoHeight = false; + this.projectSelectedCheckEdit.Name = "projectSelectedCheckEdit"; + this.projectSelectedCheckEdit.EditValueChanged += new System.EventHandler(this.projectSelectedCheckEdit_EditValueChanged); + // + // projectNameGridColumn + // + this.projectNameGridColumn.Caption = "Projects"; + this.projectNameGridColumn.FieldName = "Name"; + this.projectNameGridColumn.Name = "projectNameGridColumn"; + this.projectNameGridColumn.OptionsColumn.AllowEdit = false; + this.projectNameGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; + this.projectNameGridColumn.Visible = true; + this.projectNameGridColumn.VisibleIndex = 1; + this.projectNameGridColumn.Width = 302; + // + // barManager1 + // + this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { + this.bar2}); + this.barManager1.DockControls.Add(this.barDockControlTop); + this.barManager1.DockControls.Add(this.barDockControlBottom); + this.barManager1.DockControls.Add(this.barDockControlLeft); + this.barManager1.DockControls.Add(this.barDockControlRight); + this.barManager1.Form = this; + this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.toggleSelectionButtonItem}); + this.barManager1.MainMenu = this.bar2; + this.barManager1.MaxItemId = 7; + this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemMarqueeProgressBar1}); + // + // bar2 + // + this.bar2.BarName = "Main menu"; + this.bar2.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top; + this.bar2.DockCol = 0; + this.bar2.DockRow = 0; + this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; + this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.toggleSelectionButtonItem)}); + this.bar2.OptionsBar.AllowQuickCustomization = false; + this.bar2.OptionsBar.DrawDragBorder = false; + this.bar2.OptionsBar.MultiLine = true; + this.bar2.OptionsBar.UseWholeRow = true; + this.bar2.Text = "Main menu"; + // + // toggleSelectionButtonItem + // + this.toggleSelectionButtonItem.Caption = "Select/unselect all projects"; + this.toggleSelectionButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("toggleSelectionButtonItem.Glyph"))); + this.toggleSelectionButtonItem.Id = 5; + this.toggleSelectionButtonItem.Name = "toggleSelectionButtonItem"; + this.toggleSelectionButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.toggleSelectionButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.toggleSelectionButtonItem_ItemClick); + // + // repositoryItemMarqueeProgressBar1 + // + this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; + // + // ProjectListControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.projectsGridControl); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Name = "ProjectListControl"; + this.Size = new System.Drawing.Size(680, 340); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).EndInit(); + this.projectContextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.projectSelectedCheckEdit)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraGrid.GridControl projectsGridControl; + private DevExpress.XtraGrid.Views.Grid.GridView projectsGridView; + private DevExpress.XtraBars.BarManager barManager1; + private DevExpress.XtraBars.Bar bar2; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.XtraGrid.Columns.GridColumn projectNameGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn projectSelectedGridColumn; + private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit projectSelectedCheckEdit; + private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; + private System.Windows.Forms.ContextMenuStrip projectContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem selectAllProjectsMenuItem; + private System.Windows.Forms.ToolStripMenuItem unselectAllProjectsMenuItem; + private DevExpress.XtraBars.BarButtonItem toggleSelectionButtonItem; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ProjectListControl.cs b/JenkinsTray/UI/Controls/ProjectListControl.cs similarity index 87% rename from HudsonTrayTracker/UI/Controls/ProjectListControl.cs rename to JenkinsTray/UI/Controls/ProjectListControl.cs index 5e3907c..756896e 100644 --- a/HudsonTrayTracker/UI/Controls/ProjectListControl.cs +++ b/JenkinsTray/UI/Controls/ProjectListControl.cs @@ -1,190 +1,190 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using Hudson.TrayTracker.Entities; -using DevExpress.XtraBars; -using Hudson.TrayTracker.Utils.BackgroundProcessing; -using Spring.Context.Support; - -namespace Hudson.TrayTracker.UI.Controls -{ - public partial class ProjectListControl : DevExpress.XtraEditors.XtraUserControl - { - Server server; - List projectsDataSource; - - public ServersSettingsController Controller { get; set; } - public ConfigurationService ConfigurationService { get; set; } - public HudsonService HudsonService { get; set; } - - public ProjectListControl() - { - InitializeComponent(); - } - - public void Initialize() - { - } - - public void UpdateProjectList(Server server) - { - this.server = server; -#if SYNCRHONOUS - List dataSource = new List(); - - if (server != null) - { - IList projects = hudsonService.LoadProjects(server); - foreach (Project project in projects) - dataSource.Add(project); - } - - SetProjectsDataSource(dataSource); -#else - // clear the view - projectsGridControl.DataSource = null; - - if (server == null) - return; - - // disable the window, change the cursor, update the status - Cursor.Current = Cursors.WaitCursor; - Enabled = false; - string status = string.Format(HudsonTrayTrackerResources.LoadingProjects_FormatString, server.Url); - Controller.SetStatus(status, true); - - // run the process in background - Process process = new Process("Loading project " + server.Url); - IList projects = null; - process.DoWork += delegate - { - projects = HudsonService.LoadProjects(server); - }; - process.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) - { - string endStatus = ""; - - if (e.Error == null) - { - var dataSource = new List(); - foreach (Project project in projects) - dataSource.Add(project); - SetProjectsDataSource(dataSource); - } - else - { - endStatus = string.Format(HudsonTrayTrackerResources.FailedLoadingProjects_FormatString, server.Url); - } - - // enable the window, change the cursor, update the status - Enabled = true; - Cursor.Current = Cursors.Default; - Controller.SetStatus(endStatus, false); - }; - BackgroundProcessExecutor.Execute(process); -#endif - } - - private void SetProjectsDataSource(List dataSource) - { - projectsDataSource = dataSource; - projectsGridControl.DataSource = projectsDataSource; - } - - private void projectsGridView_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) - { - if (e.IsGetData) - { - Project project = projectsDataSource[e.ListSourceRowIndex]; - bool selected = project.Server.Projects.Contains(project); - e.Value = selected; - } - else if (e.IsSetData) - { - Project project = projectsDataSource[e.ListSourceRowIndex]; - bool selected = (bool)e.Value; - if (selected) - ConfigurationService.AddProject(project); - else - ConfigurationService.RemoveProject(project); - } - } - - private void projectSelectedCheckEdit_EditValueChanged(object sender, EventArgs e) - { - // validate the check box value as soon as it is clicked - ((CheckEdit)sender).DoValidate(); - projectsGridView.CloseEditor(); - } - - private void selectAllProjectsMenuItem_Click(object sender, EventArgs e) - { - if (projectsDataSource == null) - return; - SelectAllProjects(); - } - - private void deselectAllProjectsMenuItem_Click(object sender, EventArgs e) - { - if (projectsDataSource == null) - return; - UnselectAllProjects(); - } - - private void toggleSelectionButtonItem_ItemClick(object sender, ItemClickEventArgs e) - { - if (projectsDataSource == null) - return; - if (server.Projects.Count < projectsDataSource.Count) - SelectAllProjects(); - else - UnselectAllProjects(); - } - - private void SelectAllProjects() - { - ConfigurationService.AddProjects(projectsDataSource); - projectsGridView.RefreshData(); - } - - private void UnselectAllProjects() - { - ConfigurationService.RemoveProjects(projectsDataSource); - projectsGridView.RefreshData(); - } - - private void ProjectListControl_KeyPress(object sender, KeyPressEventArgs e) - { - switch (char.ToUpper(e.KeyChar)) - { - case (char)Keys.Space: - CheckSelectedProject(); - e.Handled = true; - break; - default: - break; - } - } - - private void CheckSelectedProject() - { - int[] selected = projectsGridView.GetSelectedRows(); - if (selected.Length == 1 && selected[0] <= projectsGridView.RowCount) - { - bool isChecked = (bool)projectsGridView.GetRowCellValue(selected[0], projectSelectedGridColumn); - projectsGridView.SetRowCellValue(selected[0], projectSelectedGridColumn, !isChecked); - } - } - - private void projectsGridControl_MouseDoubleClick(object sender, MouseEventArgs e) - { - CheckSelectedProject(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using Jenkins.Tray.Entities; +using DevExpress.XtraBars; +using Jenkins.Tray.Utils.BackgroundProcessing; +using Spring.Context.Support; + +namespace Jenkins.Tray.UI.Controls +{ + public partial class ProjectListControl : DevExpress.XtraEditors.XtraUserControl + { + Server server; + List projectsDataSource; + + public ServersSettingsController Controller { get; set; } + public ConfigurationService ConfigurationService { get; set; } + public JenkinsService JenkinsService { get; set; } + + public ProjectListControl() + { + InitializeComponent(); + } + + public void Initialize() + { + } + + public void UpdateProjectList(Server server) + { + this.server = server; +#if SYNCRHONOUS + List dataSource = new List(); + + if (server != null) + { + IList projects = jenkinsService.LoadProjects(server); + foreach (Project project in projects) + dataSource.Add(project); + } + + SetProjectsDataSource(dataSource); +#else + // clear the view + projectsGridControl.DataSource = null; + + if (server == null) + return; + + // disable the window, change the cursor, update the status + Cursor.Current = Cursors.WaitCursor; + Enabled = false; + string status = string.Format(JenkinsTrayResources.LoadingProjects_FormatString, server.Url); + Controller.SetStatus(status, true); + + // run the process in background + Process process = new Process("Loading project " + server.Url); + IList projects = null; + process.DoWork += delegate + { + projects = JenkinsService.LoadProjects(server); + }; + process.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) + { + string endStatus = ""; + + if (e.Error == null) + { + var dataSource = new List(); + foreach (Project project in projects) + dataSource.Add(project); + SetProjectsDataSource(dataSource); + } + else + { + endStatus = string.Format(JenkinsTrayResources.FailedLoadingProjects_FormatString, server.Url); + } + + // enable the window, change the cursor, update the status + Enabled = true; + Cursor.Current = Cursors.Default; + Controller.SetStatus(endStatus, false); + }; + BackgroundProcessExecutor.Execute(process); +#endif + } + + private void SetProjectsDataSource(List dataSource) + { + projectsDataSource = dataSource; + projectsGridControl.DataSource = projectsDataSource; + } + + private void projectsGridView_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) + { + if (e.IsGetData) + { + Project project = projectsDataSource[e.ListSourceRowIndex]; + bool selected = project.Server.Projects.Contains(project); + e.Value = selected; + } + else if (e.IsSetData) + { + Project project = projectsDataSource[e.ListSourceRowIndex]; + bool selected = (bool)e.Value; + if (selected) + ConfigurationService.AddProject(project); + else + ConfigurationService.RemoveProject(project); + } + } + + private void projectSelectedCheckEdit_EditValueChanged(object sender, EventArgs e) + { + // validate the check box value as soon as it is clicked + ((CheckEdit)sender).DoValidate(); + projectsGridView.CloseEditor(); + } + + private void selectAllProjectsMenuItem_Click(object sender, EventArgs e) + { + if (projectsDataSource == null) + return; + SelectAllProjects(); + } + + private void deselectAllProjectsMenuItem_Click(object sender, EventArgs e) + { + if (projectsDataSource == null) + return; + UnselectAllProjects(); + } + + private void toggleSelectionButtonItem_ItemClick(object sender, ItemClickEventArgs e) + { + if (projectsDataSource == null) + return; + if (server.Projects.Count < projectsDataSource.Count) + SelectAllProjects(); + else + UnselectAllProjects(); + } + + private void SelectAllProjects() + { + ConfigurationService.AddProjects(projectsDataSource); + projectsGridView.RefreshData(); + } + + private void UnselectAllProjects() + { + ConfigurationService.RemoveProjects(projectsDataSource); + projectsGridView.RefreshData(); + } + + private void ProjectListControl_KeyPress(object sender, KeyPressEventArgs e) + { + switch (char.ToUpper(e.KeyChar)) + { + case (char)Keys.Space: + CheckSelectedProject(); + e.Handled = true; + break; + default: + break; + } + } + + private void CheckSelectedProject() + { + int[] selected = projectsGridView.GetSelectedRows(); + if (selected.Length == 1 && selected[0] <= projectsGridView.RowCount) + { + bool isChecked = (bool)projectsGridView.GetRowCellValue(selected[0], projectSelectedGridColumn); + projectsGridView.SetRowCellValue(selected[0], projectSelectedGridColumn, !isChecked); + } + } + + private void projectsGridControl_MouseDoubleClick(object sender, MouseEventArgs e) + { + CheckSelectedProject(); + } + } +} diff --git a/HudsonTrayTracker/UI/Controls/ProjectListControl.resx b/JenkinsTray/UI/Controls/ProjectListControl.resx similarity index 98% rename from HudsonTrayTracker/UI/Controls/ProjectListControl.resx rename to JenkinsTray/UI/Controls/ProjectListControl.resx index d29fb82..056413a 100644 --- a/HudsonTrayTracker/UI/Controls/ProjectListControl.resx +++ b/JenkinsTray/UI/Controls/ProjectListControl.resx @@ -1,142 +1,142 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 142, 17 - - - 17, 17 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA - CxEBf2RfkQAAAeBJREFUOE+lk99LWmEYx9tf00W3ghcGgm2ti60RLJgMuhEMxn7A2EXddLWLiHCNXYw1 - 29iIzNTKbWxppufo/NHQ+WM6XcyWU6kw0WQXY5jffJ5xgreoizrwcHgP5/t53vf7fd5LADou9BDgnT8H - KqecxZIvA8faN9hWk7C6vsLyMYrZD+t46wzj9dJnzNj9eLnga8vQwc0VwO2HT6B/MInBu+MYGH6M64Yx - 9A2NoufWI2hv3ofmxh2orxkxNmWBFNsUAcvSdxY3W80z6++/JhbcCfjjv0TAojfNnc8CbP0uofHnPyCY - LIgAuyfF2z4NsOJy42q/HhOmZ+xLJF0UAVZXnM9MgHqjLoAkOQCVSs3iUvkAlk9RRLNlEUBOk2EkNhjv - 8c+1/RpsNgc03dojcT7faifyBYmNbREw+36d3aYdkPiy7gpMpinodL2COJNpcZyZzV0R8GY5xFEpHhCk - s7PrhDgWa/Es/ChURMArR4BzJgBFRW4rZ6ZtU2cSh0OA2S4jX6qKALNN4iFRxHvVAzbsuFiWgGmrF1vb - NRHwYt4L48hTzpiKR7jtNhmmjDB1JvHzOQ+Ku/sigD6uBHPwRDYgx/KIpAqI58ps1s9iFYWdOsqVhlDC - XVAW53nzZbpIHQI+X/wERE0BJQAAAABJRU5ErkJggg== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 142, 17 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAeBJREFUOE+lk99LWmEYx9tf00W3ghcGgm2ti60RLJgMuhEMxn7A2EXddLWLiHCNXYw1 + 29iIzNTKbWxppufo/NHQ+WM6XcyWU6kw0WQXY5jffJ5xgreoizrwcHgP5/t53vf7fd5LADou9BDgnT8H + KqecxZIvA8faN9hWk7C6vsLyMYrZD+t46wzj9dJnzNj9eLnga8vQwc0VwO2HT6B/MInBu+MYGH6M64Yx + 9A2NoufWI2hv3ofmxh2orxkxNmWBFNsUAcvSdxY3W80z6++/JhbcCfjjv0TAojfNnc8CbP0uofHnPyCY + LIgAuyfF2z4NsOJy42q/HhOmZ+xLJF0UAVZXnM9MgHqjLoAkOQCVSs3iUvkAlk9RRLNlEUBOk2EkNhjv + 8c+1/RpsNgc03dojcT7faifyBYmNbREw+36d3aYdkPiy7gpMpinodL2COJNpcZyZzV0R8GY5xFEpHhCk + s7PrhDgWa/Es/ChURMArR4BzJgBFRW4rZ6ZtU2cSh0OA2S4jX6qKALNN4iFRxHvVAzbsuFiWgGmrF1vb + NRHwYt4L48hTzpiKR7jtNhmmjDB1JvHzOQ+Ku/sigD6uBHPwRDYgx/KIpAqI58ps1s9iFYWdOsqVhlDC + XVAW53nzZbpIHQI+X/wERE0BJQAAAABJRU5ErkJggg== + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ServerListControl.Designer.cs b/JenkinsTray/UI/Controls/ServerListControl.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/Controls/ServerListControl.Designer.cs rename to JenkinsTray/UI/Controls/ServerListControl.Designer.cs index d20daf9..2d748b7 100644 --- a/HudsonTrayTracker/UI/Controls/ServerListControl.Designer.cs +++ b/JenkinsTray/UI/Controls/ServerListControl.Designer.cs @@ -1,265 +1,265 @@ -namespace Hudson.TrayTracker.UI.Controls -{ - partial class ServerListControl - { - /// - /// 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.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerListControl)); - this.serversGridControl = new DevExpress.XtraGrid.GridControl(); - this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.editServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.removeServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.serversGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.serverGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); - this.bar2 = new DevExpress.XtraBars.Bar(); - this.addServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.editServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.removeServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); - this.statusTextItem = new DevExpress.XtraBars.BarStaticItem(); - this.statusProgressItem = new DevExpress.XtraBars.BarEditItem(); - this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); - ((System.ComponentModel.ISupportInitialize)(this.serversGridControl)).BeginInit(); - this.contextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.serversGridView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); - this.SuspendLayout(); - // - // serversGridControl - // - this.serversGridControl.ContextMenuStrip = this.contextMenuStrip; - this.serversGridControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.serversGridControl.Location = new System.Drawing.Point(0, 26); - this.serversGridControl.MainView = this.serversGridView; - this.serversGridControl.Name = "serversGridControl"; - this.serversGridControl.Size = new System.Drawing.Size(680, 314); - this.serversGridControl.TabIndex = 0; - this.serversGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.serversGridView}); - // - // contextMenuStrip - // - this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.editServerMenuItem, - this.removeServerMenuItem}); - this.contextMenuStrip.Name = "contextMenuStrip"; - this.contextMenuStrip.Size = new System.Drawing.Size(152, 48); - this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); - // - // editServerMenuItem - // - this.editServerMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("editServerMenuItem.Image"))); - this.editServerMenuItem.Name = "editServerMenuItem"; - this.editServerMenuItem.Size = new System.Drawing.Size(151, 22); - this.editServerMenuItem.Text = "Edit server"; - this.editServerMenuItem.Click += new System.EventHandler(this.editServerMenuItem_Click); - // - // removeServerMenuItem - // - this.removeServerMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("removeServerMenuItem.Image"))); - this.removeServerMenuItem.Name = "removeServerMenuItem"; - this.removeServerMenuItem.Size = new System.Drawing.Size(151, 22); - this.removeServerMenuItem.Text = "Remove server"; - this.removeServerMenuItem.Click += new System.EventHandler(this.removeServerMenuItem_Click); - // - // serversGridView - // - this.serversGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.serverGridColumn}); - this.serversGridView.GridControl = this.serversGridControl; - this.serversGridView.Name = "serversGridView"; - this.serversGridView.OptionsCustomization.AllowGroup = false; - this.serversGridView.OptionsSelection.EnableAppearanceFocusedCell = false; - this.serversGridView.OptionsView.ShowGroupPanel = false; - this.serversGridView.OptionsView.ShowIndicator = false; - this.serversGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { - new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.serverGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); - this.serversGridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.serversGridView_FocusedRowChanged); - // - // serverGridColumn - // - this.serverGridColumn.Caption = "Servers"; - this.serverGridColumn.FieldName = "DisplayText"; - this.serverGridColumn.Name = "serverGridColumn"; - this.serverGridColumn.OptionsColumn.AllowEdit = false; - this.serverGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; - this.serverGridColumn.Visible = true; - this.serverGridColumn.VisibleIndex = 0; - // - // barManager1 - // - this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { - this.bar2}); - this.barManager1.DockControls.Add(this.barDockControlTop); - this.barManager1.DockControls.Add(this.barDockControlBottom); - this.barManager1.DockControls.Add(this.barDockControlLeft); - this.barManager1.DockControls.Add(this.barDockControlRight); - this.barManager1.Form = this; - this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.addServerButtonItem, - this.removeServerButtonItem, - this.statusTextItem, - this.statusProgressItem, - this.editServerButtonItem}); - this.barManager1.MainMenu = this.bar2; - this.barManager1.MaxItemId = 5; - this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { - this.repositoryItemMarqueeProgressBar1}); - // - // bar2 - // - this.bar2.BarName = "Main menu"; - this.bar2.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top; - this.bar2.DockCol = 0; - this.bar2.DockRow = 0; - this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; - this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.addServerButtonItem, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), - new DevExpress.XtraBars.LinkPersistInfo(this.editServerButtonItem), - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.removeServerButtonItem, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph)}); - this.bar2.OptionsBar.AllowQuickCustomization = false; - this.bar2.OptionsBar.DrawDragBorder = false; - this.bar2.OptionsBar.MultiLine = true; - this.bar2.OptionsBar.UseWholeRow = true; - this.bar2.Text = "Main menu"; - // - // addServerButtonItem - // - this.addServerButtonItem.Caption = "Add server"; - this.addServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("addServerButtonItem.Glyph"))); - this.addServerButtonItem.Id = 0; - this.addServerButtonItem.Name = "addServerButtonItem"; - this.addServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.addServerButtonItem_ItemClick); - // - // editServerButtonItem - // - this.editServerButtonItem.Caption = "Edit server"; - this.editServerButtonItem.Enabled = false; - this.editServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("editServerButtonItem.Glyph"))); - this.editServerButtonItem.Id = 4; - this.editServerButtonItem.Name = "editServerButtonItem"; - this.editServerButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.editServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.editServerButtonItem_ItemClick); - // - // removeServerButtonItem - // - this.removeServerButtonItem.Caption = "Remove server"; - this.removeServerButtonItem.Enabled = false; - this.removeServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("removeServerButtonItem.Glyph"))); - this.removeServerButtonItem.Id = 1; - this.removeServerButtonItem.Name = "removeServerButtonItem"; - this.removeServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.removeServerButtonItem_ItemClick); - // - // barDockControlTop - // - this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; - this.barDockControlTop.Location = new System.Drawing.Point(0, 0); - this.barDockControlTop.Size = new System.Drawing.Size(680, 26); - // - // barDockControlBottom - // - this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.barDockControlBottom.Location = new System.Drawing.Point(0, 340); - this.barDockControlBottom.Size = new System.Drawing.Size(680, 0); - // - // barDockControlLeft - // - this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; - this.barDockControlLeft.Location = new System.Drawing.Point(0, 26); - this.barDockControlLeft.Size = new System.Drawing.Size(0, 314); - // - // barDockControlRight - // - this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; - this.barDockControlRight.Location = new System.Drawing.Point(680, 26); - this.barDockControlRight.Size = new System.Drawing.Size(0, 314); - // - // statusTextItem - // - this.statusTextItem.Id = 2; - this.statusTextItem.Name = "statusTextItem"; - this.statusTextItem.TextAlignment = System.Drawing.StringAlignment.Near; - // - // statusProgressItem - // - this.statusProgressItem.Edit = this.repositoryItemMarqueeProgressBar1; - this.statusProgressItem.Id = 3; - this.statusProgressItem.Name = "statusProgressItem"; - // - // repositoryItemMarqueeProgressBar1 - // - this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; - // - // ServerListControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.Controls.Add(this.serversGridControl); - this.Controls.Add(this.barDockControlLeft); - this.Controls.Add(this.barDockControlRight); - this.Controls.Add(this.barDockControlBottom); - this.Controls.Add(this.barDockControlTop); - this.Name = "ServerListControl"; - this.Size = new System.Drawing.Size(680, 340); - ((System.ComponentModel.ISupportInitialize)(this.serversGridControl)).EndInit(); - this.contextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.serversGridView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraGrid.GridControl serversGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView serversGridView; - private DevExpress.XtraBars.BarManager barManager1; - private DevExpress.XtraBars.Bar bar2; - private DevExpress.XtraBars.BarButtonItem addServerButtonItem; - private DevExpress.XtraBars.BarButtonItem removeServerButtonItem; - private DevExpress.XtraBars.BarDockControl barDockControlTop; - private DevExpress.XtraBars.BarDockControl barDockControlBottom; - private DevExpress.XtraBars.BarDockControl barDockControlLeft; - private DevExpress.XtraBars.BarDockControl barDockControlRight; - private DevExpress.XtraGrid.Columns.GridColumn serverGridColumn; - private DevExpress.XtraBars.BarStaticItem statusTextItem; - private DevExpress.XtraBars.BarEditItem statusProgressItem; - private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; - private DevExpress.XtraBars.BarButtonItem editServerButtonItem; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem editServerMenuItem; - private System.Windows.Forms.ToolStripMenuItem removeServerMenuItem; - } +namespace Jenkins.Tray.UI.Controls +{ + partial class ServerListControl + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerListControl)); + this.serversGridControl = new DevExpress.XtraGrid.GridControl(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.editServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.serversGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.serverGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); + this.bar2 = new DevExpress.XtraBars.Bar(); + this.addServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.editServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.removeServerButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.statusTextItem = new DevExpress.XtraBars.BarStaticItem(); + this.statusProgressItem = new DevExpress.XtraBars.BarEditItem(); + this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); + ((System.ComponentModel.ISupportInitialize)(this.serversGridControl)).BeginInit(); + this.contextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.serversGridView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); + this.SuspendLayout(); + // + // serversGridControl + // + this.serversGridControl.ContextMenuStrip = this.contextMenuStrip; + this.serversGridControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.serversGridControl.Location = new System.Drawing.Point(0, 26); + this.serversGridControl.MainView = this.serversGridView; + this.serversGridControl.Name = "serversGridControl"; + this.serversGridControl.Size = new System.Drawing.Size(680, 314); + this.serversGridControl.TabIndex = 0; + this.serversGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.serversGridView}); + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.editServerMenuItem, + this.removeServerMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(152, 48); + this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); + // + // editServerMenuItem + // + this.editServerMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("editServerMenuItem.Image"))); + this.editServerMenuItem.Name = "editServerMenuItem"; + this.editServerMenuItem.Size = new System.Drawing.Size(151, 22); + this.editServerMenuItem.Text = "Edit server"; + this.editServerMenuItem.Click += new System.EventHandler(this.editServerMenuItem_Click); + // + // removeServerMenuItem + // + this.removeServerMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("removeServerMenuItem.Image"))); + this.removeServerMenuItem.Name = "removeServerMenuItem"; + this.removeServerMenuItem.Size = new System.Drawing.Size(151, 22); + this.removeServerMenuItem.Text = "Remove server"; + this.removeServerMenuItem.Click += new System.EventHandler(this.removeServerMenuItem_Click); + // + // serversGridView + // + this.serversGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.serverGridColumn}); + this.serversGridView.GridControl = this.serversGridControl; + this.serversGridView.Name = "serversGridView"; + this.serversGridView.OptionsCustomization.AllowGroup = false; + this.serversGridView.OptionsSelection.EnableAppearanceFocusedCell = false; + this.serversGridView.OptionsView.ShowGroupPanel = false; + this.serversGridView.OptionsView.ShowIndicator = false; + this.serversGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.serverGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); + this.serversGridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.serversGridView_FocusedRowChanged); + // + // serverGridColumn + // + this.serverGridColumn.Caption = "Servers"; + this.serverGridColumn.FieldName = "DisplayText"; + this.serverGridColumn.Name = "serverGridColumn"; + this.serverGridColumn.OptionsColumn.AllowEdit = false; + this.serverGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; + this.serverGridColumn.Visible = true; + this.serverGridColumn.VisibleIndex = 0; + // + // barManager1 + // + this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { + this.bar2}); + this.barManager1.DockControls.Add(this.barDockControlTop); + this.barManager1.DockControls.Add(this.barDockControlBottom); + this.barManager1.DockControls.Add(this.barDockControlLeft); + this.barManager1.DockControls.Add(this.barDockControlRight); + this.barManager1.Form = this; + this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.addServerButtonItem, + this.removeServerButtonItem, + this.statusTextItem, + this.statusProgressItem, + this.editServerButtonItem}); + this.barManager1.MainMenu = this.bar2; + this.barManager1.MaxItemId = 5; + this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemMarqueeProgressBar1}); + // + // bar2 + // + this.bar2.BarName = "Main menu"; + this.bar2.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Top; + this.bar2.DockCol = 0; + this.bar2.DockRow = 0; + this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; + this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.addServerButtonItem, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(this.editServerButtonItem), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.removeServerButtonItem, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph)}); + this.bar2.OptionsBar.AllowQuickCustomization = false; + this.bar2.OptionsBar.DrawDragBorder = false; + this.bar2.OptionsBar.MultiLine = true; + this.bar2.OptionsBar.UseWholeRow = true; + this.bar2.Text = "Main menu"; + // + // addServerButtonItem + // + this.addServerButtonItem.Caption = "Add server"; + this.addServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("addServerButtonItem.Glyph"))); + this.addServerButtonItem.Id = 0; + this.addServerButtonItem.Name = "addServerButtonItem"; + this.addServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.addServerButtonItem_ItemClick); + // + // editServerButtonItem + // + this.editServerButtonItem.Caption = "Edit server"; + this.editServerButtonItem.Enabled = false; + this.editServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("editServerButtonItem.Glyph"))); + this.editServerButtonItem.Id = 4; + this.editServerButtonItem.Name = "editServerButtonItem"; + this.editServerButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.editServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.editServerButtonItem_ItemClick); + // + // removeServerButtonItem + // + this.removeServerButtonItem.Caption = "Remove server"; + this.removeServerButtonItem.Enabled = false; + this.removeServerButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("removeServerButtonItem.Glyph"))); + this.removeServerButtonItem.Id = 1; + this.removeServerButtonItem.Name = "removeServerButtonItem"; + this.removeServerButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.removeServerButtonItem_ItemClick); + // + // barDockControlTop + // + this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; + this.barDockControlTop.Location = new System.Drawing.Point(0, 0); + this.barDockControlTop.Size = new System.Drawing.Size(680, 26); + // + // barDockControlBottom + // + this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.barDockControlBottom.Location = new System.Drawing.Point(0, 340); + this.barDockControlBottom.Size = new System.Drawing.Size(680, 0); + // + // barDockControlLeft + // + this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.barDockControlLeft.Location = new System.Drawing.Point(0, 26); + this.barDockControlLeft.Size = new System.Drawing.Size(0, 314); + // + // barDockControlRight + // + this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; + this.barDockControlRight.Location = new System.Drawing.Point(680, 26); + this.barDockControlRight.Size = new System.Drawing.Size(0, 314); + // + // statusTextItem + // + this.statusTextItem.Id = 2; + this.statusTextItem.Name = "statusTextItem"; + this.statusTextItem.TextAlignment = System.Drawing.StringAlignment.Near; + // + // statusProgressItem + // + this.statusProgressItem.Edit = this.repositoryItemMarqueeProgressBar1; + this.statusProgressItem.Id = 3; + this.statusProgressItem.Name = "statusProgressItem"; + // + // repositoryItemMarqueeProgressBar1 + // + this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; + // + // ServerListControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.Controls.Add(this.serversGridControl); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Name = "ServerListControl"; + this.Size = new System.Drawing.Size(680, 340); + ((System.ComponentModel.ISupportInitialize)(this.serversGridControl)).EndInit(); + this.contextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.serversGridView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraGrid.GridControl serversGridControl; + private DevExpress.XtraGrid.Views.Grid.GridView serversGridView; + private DevExpress.XtraBars.BarManager barManager1; + private DevExpress.XtraBars.Bar bar2; + private DevExpress.XtraBars.BarButtonItem addServerButtonItem; + private DevExpress.XtraBars.BarButtonItem removeServerButtonItem; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.XtraGrid.Columns.GridColumn serverGridColumn; + private DevExpress.XtraBars.BarStaticItem statusTextItem; + private DevExpress.XtraBars.BarEditItem statusProgressItem; + private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; + private DevExpress.XtraBars.BarButtonItem editServerButtonItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem editServerMenuItem; + private System.Windows.Forms.ToolStripMenuItem removeServerMenuItem; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ServerListControl.cs b/JenkinsTray/UI/Controls/ServerListControl.cs similarity index 93% rename from HudsonTrayTracker/UI/Controls/ServerListControl.cs rename to JenkinsTray/UI/Controls/ServerListControl.cs index ef8b827..e49e092 100644 --- a/HudsonTrayTracker/UI/Controls/ServerListControl.cs +++ b/JenkinsTray/UI/Controls/ServerListControl.cs @@ -1,135 +1,135 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using Hudson.TrayTracker.Entities; -using DevExpress.XtraBars; -using Hudson.TrayTracker.Utils.BackgroundProcessing; -using Spring.Context.Support; - -namespace Hudson.TrayTracker.UI.Controls -{ - public partial class ServerListControl : DevExpress.XtraEditors.XtraUserControl - { - BindingList serversDataSource; - - bool initialized; - - public ServersSettingsController Controller { get; set; } - public ConfigurationService ConfigurationService { get; set; } - - public ServerListControl() - { - InitializeComponent(); - } - - public void Initialize() - { - serversDataSource = new BindingList(); - foreach (Server server in ConfigurationService.Servers) - serversDataSource.Add(server); - serversGridControl.DataSource = serversDataSource; - - initialized = true; - - serversGridView_FocusedRowChanged(null, null); - } - - private void addServerButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - EditServerForm namingForm = new EditServerForm(); - if (namingForm.ShowDialog() != DialogResult.OK) - return; - - Server server = ConfigurationService.AddServer( - namingForm.ServerAddress, namingForm.ServerName, - namingForm.Username, namingForm.Password, - namingForm.IgnoreUntrustedCertificate); - if (server == null) - return; - - serversDataSource.Add(server); - } - - private void editServerButtonItem_ItemClick(object sender, ItemClickEventArgs e) - { - EditSelectedServer(); - } - private void editServerMenuItem_Click(object sender, EventArgs e) - { - EditSelectedServer(); - } - private void EditSelectedServer() - { - Server server = GetSelectedServer(); - if (server == null) - return; - - EditServerForm namingForm = new EditServerForm(server); - if (namingForm.ShowDialog() != DialogResult.OK) - return; - - ConfigurationService.UpdateServer(server, - namingForm.ServerAddress, namingForm.ServerName, - namingForm.Username, namingForm.Password, - namingForm.IgnoreUntrustedCertificate); - - serversGridView.RefreshData(); - Controller.UpdateProjectList(server); - } - - private void removeServerButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - RemoveSelectedServer(); - } - private void removeServerMenuItem_Click(object sender, EventArgs e) - { - RemoveSelectedServer(); - } - private void RemoveSelectedServer() - { - Server server = GetSelectedServer(); - if (server == null) - return; - - serversDataSource.Remove(server); - ConfigurationService.RemoveServer(server); - } - - private void serversGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) - { - if (initialized == false) - return; - - Server server = GetSelectedServer(); - - // update the toolbar - editServerButtonItem.Enabled - = removeServerButtonItem.Enabled - = server != null; - - // update the project list - Controller.UpdateProjectList(server); - } - - private Server GetSelectedServer() - { - object row = serversGridView.GetFocusedRow(); - Server server = row as Server; - return server; - } - - private void contextMenuStrip_Opening(object sender, CancelEventArgs e) - { - Server server = GetSelectedServer(); - editServerMenuItem.Enabled - = removeServerMenuItem.Enabled - = (server != null); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using Jenkins.Tray.Entities; +using DevExpress.XtraBars; +using Jenkins.Tray.Utils.BackgroundProcessing; +using Spring.Context.Support; + +namespace Jenkins.Tray.UI.Controls +{ + public partial class ServerListControl : DevExpress.XtraEditors.XtraUserControl + { + BindingList serversDataSource; + + bool initialized; + + public ServersSettingsController Controller { get; set; } + public ConfigurationService ConfigurationService { get; set; } + + public ServerListControl() + { + InitializeComponent(); + } + + public void Initialize() + { + serversDataSource = new BindingList(); + foreach (Server server in ConfigurationService.Servers) + serversDataSource.Add(server); + serversGridControl.DataSource = serversDataSource; + + initialized = true; + + serversGridView_FocusedRowChanged(null, null); + } + + private void addServerButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + EditServerForm namingForm = new EditServerForm(); + if (namingForm.ShowDialog() != DialogResult.OK) + return; + + Server server = ConfigurationService.AddServer( + namingForm.ServerAddress, namingForm.ServerName, + namingForm.Username, namingForm.Password, + namingForm.IgnoreUntrustedCertificate); + if (server == null) + return; + + serversDataSource.Add(server); + } + + private void editServerButtonItem_ItemClick(object sender, ItemClickEventArgs e) + { + EditSelectedServer(); + } + private void editServerMenuItem_Click(object sender, EventArgs e) + { + EditSelectedServer(); + } + private void EditSelectedServer() + { + Server server = GetSelectedServer(); + if (server == null) + return; + + EditServerForm namingForm = new EditServerForm(server); + if (namingForm.ShowDialog() != DialogResult.OK) + return; + + ConfigurationService.UpdateServer(server, + namingForm.ServerAddress, namingForm.ServerName, + namingForm.Username, namingForm.Password, + namingForm.IgnoreUntrustedCertificate); + + serversGridView.RefreshData(); + Controller.UpdateProjectList(server); + } + + private void removeServerButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + RemoveSelectedServer(); + } + private void removeServerMenuItem_Click(object sender, EventArgs e) + { + RemoveSelectedServer(); + } + private void RemoveSelectedServer() + { + Server server = GetSelectedServer(); + if (server == null) + return; + + serversDataSource.Remove(server); + ConfigurationService.RemoveServer(server); + } + + private void serversGridView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) + { + if (initialized == false) + return; + + Server server = GetSelectedServer(); + + // update the toolbar + editServerButtonItem.Enabled + = removeServerButtonItem.Enabled + = server != null; + + // update the project list + Controller.UpdateProjectList(server); + } + + private Server GetSelectedServer() + { + object row = serversGridView.GetFocusedRow(); + Server server = row as Server; + return server; + } + + private void contextMenuStrip_Opening(object sender, CancelEventArgs e) + { + Server server = GetSelectedServer(); + editServerMenuItem.Enabled + = removeServerMenuItem.Enabled + = (server != null); + } + } +} diff --git a/HudsonTrayTracker/UI/Controls/ServerListControl.resx b/JenkinsTray/UI/Controls/ServerListControl.resx similarity index 98% rename from HudsonTrayTracker/UI/Controls/ServerListControl.resx rename to JenkinsTray/UI/Controls/ServerListControl.resx index c4c5ce0..3455835 100644 --- a/HudsonTrayTracker/UI/Controls/ServerListControl.resx +++ b/JenkinsTray/UI/Controls/ServerListControl.resx @@ -1,204 +1,204 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 134, 17 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA - CxEBf2RfkQAAAd9JREFUOE+lk89L02Ecx7/RvYOH/oYukQg7VHdhBwUhsVMNZSEkkZlZ4I+iWoUTQwu2 - 0MyFa7OJU5vbUFGX5ZimZWWlgjLdd7YgD5KNbe3VnkesZGbJDu/Tw+v1+fE8jwIomWTPsK+2VNtVdgqR - wSv67P8WNDi+7O9qq8sV4GLjeV5f2pQoqQPqOyMyd2wRrlk+U9Wyytl7YXRGlUJDiNMNKnXmAAPOGhye - AG9uVkj4rkazKbA8h9bhJKaBBE39ceqdMW48jVJtjXLVus5D5wxeRwVfl4x8GivDYKiR8PWjR/KlwCiq - 2yPUpqqXm1cpaVQ5eSuEvknlvv0Vbqtewh+Gi+l9oOVg1gHOFB7KFstXnvRPkkgm0rIejeOfeo/rUVEa - XFl8+PjWzf0SjATm2YoQPvOO0teStyu8awem1seMu28TnLr4u+0L1UzMhvb9+W62dTDkn8M79pHvsThC - kEz+wN5cIGe29XjI011OsdsfXtoOBLz2Lc658koKThSltqTg8s3Q3jvBsfzSdEG786VcoKjsGpmle/At - 6lqMjr5p2ronZfzzG5g6x3cWmG1DUrCihlkIhnm3oIo5GZ1ewRNYpufFMg5f8O+CZoubnFwdGm3JP7Pj - CJn8RHmNmQp+AtlH74dZMIHrAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA - CxEBf2RfkQAAAitJREFUOE9j+P//P4OXp6eBh5fnHg9PTycvL08mkBixmMHR0YXZ2cU1HUj/d3J2/ubt - 5R3o7ePNjM0AK1sHlqDAACV3d7c8mDzIABYgTrKzd9pmbmn7397B5Y+Hh2eVrzeqISqahhzW9k5O3l5e - 3x0cnObADQAxgAZIArGFg6PLNisb+/929g7//X29N/r6+nCD5E0tbDndPT1X2No7/TY1Ne/W0jPhQTEA - xgEawgbEBfYOzr/t7Jz++/j6LrO0stezsrKbbGtj81/P0GSympYBP7L3MALL2taW0d7eSRPopfNm5tb/ - jYzNvhsaG71X09Jdp6yuy4keNjhDW9/AxEFP3+SnpZXtfz19o3sKyppC2AIWqwHGJiYKauo6l3T1DP8B - DfpvYmrxX0tb9xZRBhgamcqraWhfBRrwR0NTe42ImKSJnLzKNgND4/+q6tqZeL2goa0rIaugfEpOUfU/ - 0PZDkhJSQjx8fNz8QiLc8kpq0w0MjL+oahnIYg1EDQMLDjlFtUUS0oofdXQNn2jr6mvBFPIICHBwcnLz - 6eobnpWUUZgko6gGT2jwMJCSVfAWk1D4r6qm/V9FTaOVk5sXnAZgmIWFmQkorqKionqfV0BQXl3XBJzk - wQoEBITYRETEWoWExf/LKyjv4uDiUePhE8DIEwICgsxmZpaTuXm5TNX1zBEGgAyRkVc1YmVjn8jAyGTH - zMLCiyszMTAwsDAxMXFhTYnE5kC8KZFUQwAsbBHh5aTRYwAAAABJRU5ErkJggg== - - - - 17, 17 - - - - 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 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 134, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAd9JREFUOE+lk89L02Ecx7/RvYOH/oYukQg7VHdhBwUhsVMNZSEkkZlZ4I+iWoUTQwu2 + 0MyFa7OJU5vbUFGX5ZimZWWlgjLdd7YgD5KNbe3VnkesZGbJDu/Tw+v1+fE8jwIomWTPsK+2VNtVdgqR + wSv67P8WNDi+7O9qq8sV4GLjeV5f2pQoqQPqOyMyd2wRrlk+U9Wyytl7YXRGlUJDiNMNKnXmAAPOGhye + AG9uVkj4rkazKbA8h9bhJKaBBE39ceqdMW48jVJtjXLVus5D5wxeRwVfl4x8GivDYKiR8PWjR/KlwCiq + 2yPUpqqXm1cpaVQ5eSuEvknlvv0Vbqtewh+Gi+l9oOVg1gHOFB7KFstXnvRPkkgm0rIejeOfeo/rUVEa + XFl8+PjWzf0SjATm2YoQPvOO0teStyu8awem1seMu28TnLr4u+0L1UzMhvb9+W62dTDkn8M79pHvsThC + kEz+wN5cIGe29XjI011OsdsfXtoOBLz2Lc658koKThSltqTg8s3Q3jvBsfzSdEG786VcoKjsGpmle/At + 6lqMjr5p2ronZfzzG5g6x3cWmG1DUrCihlkIhnm3oIo5GZ1ewRNYpufFMg5f8O+CZoubnFwdGm3JP7Pj + CJn8RHmNmQp+AtlH74dZMIHrAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAitJREFUOE9j+P//P4OXp6eBh5fnHg9PTycvL08mkBixmMHR0YXZ2cU1HUj/d3J2/ubt + 5R3o7ePNjM0AK1sHlqDAACV3d7c8mDzIABYgTrKzd9pmbmn7397B5Y+Hh2eVrzeqISqahhzW9k5O3l5e + 3x0cnObADQAxgAZIArGFg6PLNisb+/929g7//X29N/r6+nCD5E0tbDndPT1X2No7/TY1Ne/W0jPhQTEA + xgEawgbEBfYOzr/t7Jz++/j6LrO0stezsrKbbGtj81/P0GSympYBP7L3MALL2taW0d7eSRPopfNm5tb/ + jYzNvhsaG71X09Jdp6yuy4keNjhDW9/AxEFP3+SnpZXtfz19o3sKyppC2AIWqwHGJiYKauo6l3T1DP8B + DfpvYmrxX0tb9xZRBhgamcqraWhfBRrwR0NTe42ImKSJnLzKNgND4/+q6tqZeL2goa0rIaugfEpOUfU/ + 0PZDkhJSQjx8fNz8QiLc8kpq0w0MjL+oahnIYg1EDQMLDjlFtUUS0oofdXQNn2jr6mvBFPIICHBwcnLz + 6eobnpWUUZgko6gGT2jwMJCSVfAWk1D4r6qm/V9FTaOVk5sXnAZgmIWFmQkorqKionqfV0BQXl3XBJzk + wQoEBITYRETEWoWExf/LKyjv4uDiUePhE8DIEwICgsxmZpaTuXm5TNX1zBEGgAyRkVc1YmVjn8jAyGTH + zMLCiyszMTAwsDAxMXFhTYnE5kC8KZFUQwAsbBHh5aTRYwAAAABJRU5ErkJggg== + + + + 17, 17 + + + + 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 + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.Designer.cs b/JenkinsTray/UI/Controls/ServersSettingsControl.Designer.cs similarity index 95% rename from HudsonTrayTracker/UI/Controls/ServersSettingsControl.Designer.cs rename to JenkinsTray/UI/Controls/ServersSettingsControl.Designer.cs index 94b89a5..02a8fd1 100644 --- a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.Designer.cs +++ b/JenkinsTray/UI/Controls/ServersSettingsControl.Designer.cs @@ -1,166 +1,166 @@ -namespace Hudson.TrayTracker.UI.Controls -{ - partial class ServersSettingsControl - { - /// - /// 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.components = new System.ComponentModel.Container(); - this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); - this.bar1 = new DevExpress.XtraBars.Bar(); - this.statusProgressItem = new DevExpress.XtraBars.BarEditItem(); - this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); - this.statusTextItem = new DevExpress.XtraBars.BarStaticItem(); - this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); - this.splitContainerControl1 = new DevExpress.XtraEditors.SplitContainerControl(); - this.serverListControl = new Hudson.TrayTracker.UI.Controls.ServerListControl(); - this.projectListControl = new Hudson.TrayTracker.UI.Controls.ProjectListControl(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit(); - this.splitContainerControl1.SuspendLayout(); - this.SuspendLayout(); - // - // barManager1 - // - this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { - this.bar1}); - this.barManager1.DockControls.Add(this.barDockControlTop); - this.barManager1.DockControls.Add(this.barDockControlBottom); - this.barManager1.DockControls.Add(this.barDockControlLeft); - this.barManager1.DockControls.Add(this.barDockControlRight); - this.barManager1.Form = this; - this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.statusTextItem, - this.statusProgressItem}); - this.barManager1.MaxItemId = 5; - this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { - this.repositoryItemMarqueeProgressBar1}); - this.barManager1.StatusBar = this.bar1; - // - // bar1 - // - this.bar1.BarName = "Status bar"; - this.bar1.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Bottom; - this.bar1.DockCol = 0; - this.bar1.DockRow = 0; - this.bar1.DockStyle = DevExpress.XtraBars.BarDockStyle.Bottom; - this.bar1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.Width, this.statusProgressItem, "", false, true, true, 50), - new DevExpress.XtraBars.LinkPersistInfo(this.statusTextItem)}); - this.bar1.OptionsBar.AllowQuickCustomization = false; - this.bar1.OptionsBar.AllowRename = true; - this.bar1.OptionsBar.DrawDragBorder = false; - this.bar1.OptionsBar.UseWholeRow = true; - this.bar1.Text = "Status bar"; - // - // statusProgressItem - // - this.statusProgressItem.Edit = this.repositoryItemMarqueeProgressBar1; - this.statusProgressItem.Id = 3; - this.statusProgressItem.Name = "statusProgressItem"; - // - // repositoryItemMarqueeProgressBar1 - // - this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; - // - // statusTextItem - // - this.statusTextItem.Id = 2; - this.statusTextItem.Name = "statusTextItem"; - this.statusTextItem.TextAlignment = System.Drawing.StringAlignment.Near; - // - // splitContainerControl1 - // - this.splitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainerControl1.Location = new System.Drawing.Point(0, 0); - this.splitContainerControl1.Name = "splitContainerControl1"; - this.splitContainerControl1.Panel1.Controls.Add(this.serverListControl); - this.splitContainerControl1.Panel1.Text = "Panel1"; - this.splitContainerControl1.Panel2.Controls.Add(this.projectListControl); - this.splitContainerControl1.Panel2.Text = "Panel2"; - this.splitContainerControl1.Size = new System.Drawing.Size(680, 317); - this.splitContainerControl1.SplitterPosition = 307; - this.splitContainerControl1.TabIndex = 5; - this.splitContainerControl1.Text = "splitContainerControl1"; - // - // serverListControl - // - this.serverListControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.serverListControl.Controller = null; - this.serverListControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.serverListControl.Location = new System.Drawing.Point(0, 0); - this.serverListControl.Name = "serverListControl"; - this.serverListControl.Size = new System.Drawing.Size(303, 313); - this.serverListControl.TabIndex = 0; - // - // projectListControl - // - this.projectListControl.Controller = null; - this.projectListControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.projectListControl.Location = new System.Drawing.Point(0, 0); - this.projectListControl.Name = "projectListControl"; - this.projectListControl.Size = new System.Drawing.Size(363, 313); - this.projectListControl.TabIndex = 0; - // - // ServersSettingsControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.splitContainerControl1); - this.Controls.Add(this.barDockControlLeft); - this.Controls.Add(this.barDockControlRight); - this.Controls.Add(this.barDockControlBottom); - this.Controls.Add(this.barDockControlTop); - this.Name = "ServersSettingsControl"; - this.Size = new System.Drawing.Size(680, 340); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).EndInit(); - this.splitContainerControl1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraBars.BarManager barManager1; - private DevExpress.XtraBars.BarDockControl barDockControlTop; - private DevExpress.XtraBars.BarDockControl barDockControlBottom; - private DevExpress.XtraBars.BarDockControl barDockControlLeft; - private DevExpress.XtraBars.BarDockControl barDockControlRight; - private DevExpress.XtraBars.Bar bar1; - private DevExpress.XtraBars.BarStaticItem statusTextItem; - private DevExpress.XtraBars.BarEditItem statusProgressItem; - private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; - private DevExpress.XtraEditors.SplitContainerControl splitContainerControl1; - private ServerListControl serverListControl; - private ProjectListControl projectListControl; - } +namespace Jenkins.Tray.UI.Controls +{ + partial class ServersSettingsControl + { + /// + /// 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.components = new System.ComponentModel.Container(); + this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); + this.bar1 = new DevExpress.XtraBars.Bar(); + this.statusProgressItem = new DevExpress.XtraBars.BarEditItem(); + this.repositoryItemMarqueeProgressBar1 = new DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar(); + this.statusTextItem = new DevExpress.XtraBars.BarStaticItem(); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.splitContainerControl1 = new DevExpress.XtraEditors.SplitContainerControl(); + this.serverListControl = new Jenkins.Tray.UI.Controls.ServerListControl(); + this.projectListControl = new Jenkins.Tray.UI.Controls.ProjectListControl(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit(); + this.splitContainerControl1.SuspendLayout(); + this.SuspendLayout(); + // + // barManager1 + // + this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { + this.bar1}); + this.barManager1.DockControls.Add(this.barDockControlTop); + this.barManager1.DockControls.Add(this.barDockControlBottom); + this.barManager1.DockControls.Add(this.barDockControlLeft); + this.barManager1.DockControls.Add(this.barDockControlRight); + this.barManager1.Form = this; + this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.statusTextItem, + this.statusProgressItem}); + this.barManager1.MaxItemId = 5; + this.barManager1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemMarqueeProgressBar1}); + this.barManager1.StatusBar = this.bar1; + // + // bar1 + // + this.bar1.BarName = "Status bar"; + this.bar1.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Bottom; + this.bar1.DockCol = 0; + this.bar1.DockRow = 0; + this.bar1.DockStyle = DevExpress.XtraBars.BarDockStyle.Bottom; + this.bar1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.Width, this.statusProgressItem, "", false, true, true, 50), + new DevExpress.XtraBars.LinkPersistInfo(this.statusTextItem)}); + this.bar1.OptionsBar.AllowQuickCustomization = false; + this.bar1.OptionsBar.AllowRename = true; + this.bar1.OptionsBar.DrawDragBorder = false; + this.bar1.OptionsBar.UseWholeRow = true; + this.bar1.Text = "Status bar"; + // + // statusProgressItem + // + this.statusProgressItem.Edit = this.repositoryItemMarqueeProgressBar1; + this.statusProgressItem.Id = 3; + this.statusProgressItem.Name = "statusProgressItem"; + // + // repositoryItemMarqueeProgressBar1 + // + this.repositoryItemMarqueeProgressBar1.Name = "repositoryItemMarqueeProgressBar1"; + // + // statusTextItem + // + this.statusTextItem.Id = 2; + this.statusTextItem.Name = "statusTextItem"; + this.statusTextItem.TextAlignment = System.Drawing.StringAlignment.Near; + // + // splitContainerControl1 + // + this.splitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainerControl1.Location = new System.Drawing.Point(0, 0); + this.splitContainerControl1.Name = "splitContainerControl1"; + this.splitContainerControl1.Panel1.Controls.Add(this.serverListControl); + this.splitContainerControl1.Panel1.Text = "Panel1"; + this.splitContainerControl1.Panel2.Controls.Add(this.projectListControl); + this.splitContainerControl1.Panel2.Text = "Panel2"; + this.splitContainerControl1.Size = new System.Drawing.Size(680, 317); + this.splitContainerControl1.SplitterPosition = 307; + this.splitContainerControl1.TabIndex = 5; + this.splitContainerControl1.Text = "splitContainerControl1"; + // + // serverListControl + // + this.serverListControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.serverListControl.Controller = null; + this.serverListControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.serverListControl.Location = new System.Drawing.Point(0, 0); + this.serverListControl.Name = "serverListControl"; + this.serverListControl.Size = new System.Drawing.Size(303, 313); + this.serverListControl.TabIndex = 0; + // + // projectListControl + // + this.projectListControl.Controller = null; + this.projectListControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.projectListControl.Location = new System.Drawing.Point(0, 0); + this.projectListControl.Name = "projectListControl"; + this.projectListControl.Size = new System.Drawing.Size(363, 313); + this.projectListControl.TabIndex = 0; + // + // ServersSettingsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainerControl1); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Name = "ServersSettingsControl"; + this.Size = new System.Drawing.Size(680, 340); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemMarqueeProgressBar1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).EndInit(); + this.splitContainerControl1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraBars.BarManager barManager1; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.XtraBars.Bar bar1; + private DevExpress.XtraBars.BarStaticItem statusTextItem; + private DevExpress.XtraBars.BarEditItem statusProgressItem; + private DevExpress.XtraEditors.Repository.RepositoryItemMarqueeProgressBar repositoryItemMarqueeProgressBar1; + private DevExpress.XtraEditors.SplitContainerControl splitContainerControl1; + private ServerListControl serverListControl; + private ProjectListControl projectListControl; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.cs b/JenkinsTray/UI/Controls/ServersSettingsControl.cs similarity index 92% rename from HudsonTrayTracker/UI/Controls/ServersSettingsControl.cs rename to JenkinsTray/UI/Controls/ServersSettingsControl.cs index 16dff01..c626cac 100644 --- a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.cs +++ b/JenkinsTray/UI/Controls/ServersSettingsControl.cs @@ -1,35 +1,35 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; - -namespace Hudson.TrayTracker.UI.Controls -{ - public partial class ServersSettingsControl : DevExpress.XtraEditors.XtraUserControl - { - ServersSettingsController controller; - - public ServersSettingsControl() - { - InitializeComponent(); - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - // designer mode - if (DesignMode) - return; - - controller = new ServersSettingsController(serverListControl, projectListControl, - statusTextItem, statusProgressItem); - serverListControl.Controller = controller; - projectListControl.Controller = controller; - controller.Initialize(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace Jenkins.Tray.UI.Controls +{ + public partial class ServersSettingsControl : DevExpress.XtraEditors.XtraUserControl + { + ServersSettingsController controller; + + public ServersSettingsControl() + { + InitializeComponent(); + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + // designer mode + if (DesignMode) + return; + + controller = new ServersSettingsController(serverListControl, projectListControl, + statusTextItem, statusProgressItem); + serverListControl.Controller = controller; + projectListControl.Controller = controller; + controller.Initialize(); + } + } +} diff --git a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.resx b/JenkinsTray/UI/Controls/ServersSettingsControl.resx similarity index 97% rename from HudsonTrayTracker/UI/Controls/ServersSettingsControl.resx rename to JenkinsTray/UI/Controls/ServersSettingsControl.resx index f0bafaa..14f7d9b 100644 --- a/HudsonTrayTracker/UI/Controls/ServersSettingsControl.resx +++ b/JenkinsTray/UI/Controls/ServersSettingsControl.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/Controls/ServersSettingsController.cs b/JenkinsTray/UI/Controls/ServersSettingsController.cs similarity index 81% rename from HudsonTrayTracker/UI/Controls/ServersSettingsController.cs rename to JenkinsTray/UI/Controls/ServersSettingsController.cs index 3e502a2..b268547 100644 --- a/HudsonTrayTracker/UI/Controls/ServersSettingsController.cs +++ b/JenkinsTray/UI/Controls/ServersSettingsController.cs @@ -1,56 +1,56 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Hudson.TrayTracker.BusinessComponents; -using Spring.Context.Support; -using Hudson.TrayTracker.Entities; -using DevExpress.XtraBars; - -namespace Hudson.TrayTracker.UI.Controls -{ - public class ServersSettingsController - { - ConfigurationService configurationService; - HudsonService hudsonService; - - ServerListControl serverListControl; - ProjectListControl projectListControl; - BarStaticItem statusTextItem; - BarEditItem statusProgressItem; - - public ServersSettingsController(ServerListControl serverListControl, - ProjectListControl projectListControl, - BarStaticItem statusTextItem, - BarEditItem statusProgressItem) - { - this.serverListControl = serverListControl; - this.projectListControl = projectListControl; - this.statusTextItem = statusTextItem; - this.statusProgressItem = statusProgressItem; - - configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); - hudsonService = (HudsonService)ContextRegistry.GetContext().GetObject("HudsonService"); - serverListControl.ConfigurationService = configurationService; - projectListControl.ConfigurationService = configurationService; - projectListControl.HudsonService = hudsonService; - } - - public void Initialize() - { - serverListControl.Initialize(); - projectListControl.Initialize(); - } - - public void UpdateProjectList(Server server) - { - projectListControl.UpdateProjectList(server); - } - - internal void SetStatus(string status, bool updating) - { - statusTextItem.Caption = status; - statusProgressItem.Visibility = updating ? BarItemVisibility.Always : BarItemVisibility.Never; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Jenkins.Tray.BusinessComponents; +using Spring.Context.Support; +using Jenkins.Tray.Entities; +using DevExpress.XtraBars; + +namespace Jenkins.Tray.UI.Controls +{ + public class ServersSettingsController + { + ConfigurationService configurationService; + JenkinsService jenkinsService; + + ServerListControl serverListControl; + ProjectListControl projectListControl; + BarStaticItem statusTextItem; + BarEditItem statusProgressItem; + + public ServersSettingsController(ServerListControl serverListControl, + ProjectListControl projectListControl, + BarStaticItem statusTextItem, + BarEditItem statusProgressItem) + { + this.serverListControl = serverListControl; + this.projectListControl = projectListControl; + this.statusTextItem = statusTextItem; + this.statusProgressItem = statusProgressItem; + + configurationService = (ConfigurationService)ContextRegistry.GetContext().GetObject("ConfigurationService"); + jenkinsService = (JenkinsService)ContextRegistry.GetContext().GetObject("JenkinsService"); + serverListControl.ConfigurationService = configurationService; + projectListControl.ConfigurationService = configurationService; + projectListControl.JenkinsService = jenkinsService; + } + + public void Initialize() + { + serverListControl.Initialize(); + projectListControl.Initialize(); + } + + public void UpdateProjectList(Server server) + { + projectListControl.UpdateProjectList(server); + } + + internal void SetStatus(string status, bool updating) + { + statusTextItem.Caption = status; + statusProgressItem.Visibility = updating ? BarItemVisibility.Always : BarItemVisibility.Never; + } + } +} diff --git a/HudsonTrayTracker/UI/EditServerForm.cs b/JenkinsTray/UI/EditServerForm.cs similarity index 95% rename from HudsonTrayTracker/UI/EditServerForm.cs rename to JenkinsTray/UI/EditServerForm.cs index 4031371..29aa422 100644 --- a/HudsonTrayTracker/UI/EditServerForm.cs +++ b/JenkinsTray/UI/EditServerForm.cs @@ -1,122 +1,122 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -using DevExpress.XtraEditors; -using Hudson.TrayTracker.Entities; - -namespace Hudson.TrayTracker.UI -{ - public partial class EditServerForm : DevExpress.XtraEditors.XtraForm - { - public EditServerForm() - { - InitializeComponent(); - urlTextBox.TextChanged += delegate { ValidateForm(); }; - } - - public EditServerForm(Server server) - : this() - { - ServerAddress = server.Url; - ServerName = server.DisplayName; - IgnoreUntrustedCertificate = server.IgnoreUntrustedCertificate; - if (server.Credentials != null) - { - RequiresAuthentication = true; - Username = server.Credentials.Username; - Password = server.Credentials.Password; - } - } - - public string ServerAddress - { - get { return urlTextBox.Text; } - set { urlTextBox.Text = value; } - } - - public string ServerName - { - get { return displayNameTextEdit.Text; } - set { displayNameTextEdit.Text = value; } - } - - public bool RequiresAuthentication - { - get { return authenticationCheckBox.CheckState == CheckState.Checked; } - set { authenticationCheckBox.CheckState = value ? CheckState.Checked : CheckState.Unchecked; } - } - - public string Username - { - get - { - if (RequiresAuthentication == false) - return null; - return usernameTextBox.Text; - } - set { usernameTextBox.Text = value; } - } - - public string Password - { - get - { - if (RequiresAuthentication == false) - return null; - return passwordTextBox.Text; - } - set { passwordTextBox.Text = value; } - } - - public bool IgnoreUntrustedCertificate - { - get { return ignoreUntrustedCertificateCheckBox.CheckState == CheckState.Checked; } - set { ignoreUntrustedCertificateCheckBox.CheckState = value ? CheckState.Checked : CheckState.Unchecked; } - } - - protected virtual bool IsUrlValid(string url) - { - url = url.Trim(); - bool valid = String.IsNullOrEmpty(url) == false && url != "http://" && url != "https://"; - return valid; - } - - private void ValidateForm() - { - string url = urlTextBox.Text; - bool nameValid = IsUrlValid(url); - - validateButton.Enabled = nameValid; - } - - private void authenticationCheckBox_CheckStateChanged(object sender, EventArgs e) - { - usernameLabel.Enabled - = usernameTextBox.Enabled - = passwordLabel.Enabled - = passwordTextBox.Enabled - = RequiresAuthentication; - } - - private void urlTextBox_Leave(object sender, EventArgs e) - { - string url = ServerAddress; - if (String.IsNullOrEmpty(url) == false - && url.StartsWith("http://") == false - && url.StartsWith("https://") == false) - { - ServerAddress = "http://" + url; - } - } - - private void EditServerForm_FormClosing(object sender, FormClosingEventArgs e) - { - urlTextBox_Leave(null, null); - } - } +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using DevExpress.XtraEditors; +using Jenkins.Tray.Entities; + +namespace Jenkins.Tray.UI +{ + public partial class EditServerForm : DevExpress.XtraEditors.XtraForm + { + public EditServerForm() + { + InitializeComponent(); + urlTextBox.TextChanged += delegate { ValidateForm(); }; + } + + public EditServerForm(Server server) + : this() + { + ServerAddress = server.Url; + ServerName = server.DisplayName; + IgnoreUntrustedCertificate = server.IgnoreUntrustedCertificate; + if (server.Credentials != null) + { + RequiresAuthentication = true; + Username = server.Credentials.Username; + Password = server.Credentials.Password; + } + } + + public string ServerAddress + { + get { return urlTextBox.Text; } + set { urlTextBox.Text = value; } + } + + public string ServerName + { + get { return displayNameTextEdit.Text; } + set { displayNameTextEdit.Text = value; } + } + + public bool RequiresAuthentication + { + get { return authenticationCheckBox.CheckState == CheckState.Checked; } + set { authenticationCheckBox.CheckState = value ? CheckState.Checked : CheckState.Unchecked; } + } + + public string Username + { + get + { + if (RequiresAuthentication == false) + return null; + return usernameTextBox.Text; + } + set { usernameTextBox.Text = value; } + } + + public string Password + { + get + { + if (RequiresAuthentication == false) + return null; + return passwordTextBox.Text; + } + set { passwordTextBox.Text = value; } + } + + public bool IgnoreUntrustedCertificate + { + get { return ignoreUntrustedCertificateCheckBox.CheckState == CheckState.Checked; } + set { ignoreUntrustedCertificateCheckBox.CheckState = value ? CheckState.Checked : CheckState.Unchecked; } + } + + protected virtual bool IsUrlValid(string url) + { + url = url.Trim(); + bool valid = String.IsNullOrEmpty(url) == false && url != "http://" && url != "https://"; + return valid; + } + + private void ValidateForm() + { + string url = urlTextBox.Text; + bool nameValid = IsUrlValid(url); + + validateButton.Enabled = nameValid; + } + + private void authenticationCheckBox_CheckStateChanged(object sender, EventArgs e) + { + usernameLabel.Enabled + = usernameTextBox.Enabled + = passwordLabel.Enabled + = passwordTextBox.Enabled + = RequiresAuthentication; + } + + private void urlTextBox_Leave(object sender, EventArgs e) + { + string url = ServerAddress; + if (String.IsNullOrEmpty(url) == false + && url.StartsWith("http://") == false + && url.StartsWith("https://") == false) + { + ServerAddress = "http://" + url; + } + } + + private void EditServerForm_FormClosing(object sender, FormClosingEventArgs e) + { + urlTextBox_Leave(null, null); + } + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/EditServerForm.designer.cs b/JenkinsTray/UI/EditServerForm.designer.cs similarity index 97% rename from HudsonTrayTracker/UI/EditServerForm.designer.cs rename to JenkinsTray/UI/EditServerForm.designer.cs index 5652b91..e0329b1 100644 --- a/HudsonTrayTracker/UI/EditServerForm.designer.cs +++ b/JenkinsTray/UI/EditServerForm.designer.cs @@ -1,214 +1,214 @@ -namespace Hudson.TrayTracker.UI -{ - partial class EditServerForm - { - /// - /// 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(EditServerForm)); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.displayNameTextEdit = new DevExpress.XtraEditors.TextEdit(); - this.urlTextBox = new DevExpress.XtraEditors.TextEdit(); - this.displayNameLabel = new DevExpress.XtraEditors.LabelControl(); - this.urlLabel = new DevExpress.XtraEditors.LabelControl(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.validateButton = new DevExpress.XtraEditors.SimpleButton(); - this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); - this.authenticationCheckBox = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.usernameTextBox = new DevExpress.XtraEditors.TextEdit(); - this.passwordTextBox = new DevExpress.XtraEditors.TextEdit(); - this.passwordLabel = new DevExpress.XtraEditors.LabelControl(); - this.usernameLabel = new DevExpress.XtraEditors.LabelControl(); - this.ignoreUntrustedCertificateCheckBox = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.displayNameTextEdit.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.urlTextBox.Properties)).BeginInit(); - this.tableLayoutPanel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.authenticationCheckBox.Properties)).BeginInit(); - this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.usernameTextBox.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.passwordTextBox.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ignoreUntrustedCertificateCheckBox.Properties)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); - this.tableLayoutPanel1.Controls.Add(this.displayNameTextEdit, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.urlTextBox, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.displayNameLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.urlLabel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.authenticationCheckBox, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.ignoreUntrustedCertificateCheckBox, 0, 5); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - // - // displayNameTextEdit - // - resources.ApplyResources(this.displayNameTextEdit, "displayNameTextEdit"); - this.displayNameTextEdit.Name = "displayNameTextEdit"; - // - // urlTextBox - // - resources.ApplyResources(this.urlTextBox, "urlTextBox"); - this.urlTextBox.Name = "urlTextBox"; - this.urlTextBox.Leave += new System.EventHandler(this.urlTextBox_Leave); - // - // displayNameLabel - // - this.displayNameLabel.Appearance.Options.UseTextOptions = true; - this.displayNameLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - resources.ApplyResources(this.displayNameLabel, "displayNameLabel"); - this.displayNameLabel.Name = "displayNameLabel"; - // - // urlLabel - // - this.urlLabel.Appearance.Options.UseTextOptions = true; - this.urlLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - resources.ApplyResources(this.urlLabel, "urlLabel"); - this.urlLabel.Name = "urlLabel"; - // - // tableLayoutPanel2 - // - resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 2); - this.tableLayoutPanel2.Controls.Add(this.validateButton, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - // - // validateButton - // - this.validateButton.DialogResult = System.Windows.Forms.DialogResult.OK; - resources.ApplyResources(this.validateButton, "validateButton"); - this.validateButton.Name = "validateButton"; - // - // cancelButton - // - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.cancelButton, "cancelButton"); - this.cancelButton.Name = "cancelButton"; - // - // authenticationCheckBox - // - this.tableLayoutPanel1.SetColumnSpan(this.authenticationCheckBox, 2); - resources.ApplyResources(this.authenticationCheckBox, "authenticationCheckBox"); - this.authenticationCheckBox.Name = "authenticationCheckBox"; - this.authenticationCheckBox.Properties.AutoWidth = true; - this.authenticationCheckBox.Properties.Caption = resources.GetString("authenticationCheckBox.Properties.Caption"); - this.authenticationCheckBox.CheckStateChanged += new System.EventHandler(this.authenticationCheckBox_CheckStateChanged); - // - // tableLayoutPanel3 - // - resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3"); - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel3, 2); - this.tableLayoutPanel3.Controls.Add(this.usernameTextBox, 2, 0); - this.tableLayoutPanel3.Controls.Add(this.passwordTextBox, 2, 1); - this.tableLayoutPanel3.Controls.Add(this.passwordLabel, 1, 1); - this.tableLayoutPanel3.Controls.Add(this.usernameLabel, 1, 0); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - // - // usernameTextBox - // - resources.ApplyResources(this.usernameTextBox, "usernameTextBox"); - this.usernameTextBox.Name = "usernameTextBox"; - // - // passwordTextBox - // - resources.ApplyResources(this.passwordTextBox, "passwordTextBox"); - this.passwordTextBox.Name = "passwordTextBox"; - this.passwordTextBox.Properties.PasswordChar = '*'; - // - // passwordLabel - // - this.passwordLabel.Appearance.Options.UseTextOptions = true; - this.passwordLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - resources.ApplyResources(this.passwordLabel, "passwordLabel"); - this.passwordLabel.Name = "passwordLabel"; - // - // usernameLabel - // - this.usernameLabel.Appearance.Options.UseTextOptions = true; - this.usernameLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - resources.ApplyResources(this.usernameLabel, "usernameLabel"); - this.usernameLabel.Name = "usernameLabel"; - // - // ignoreUntrustedCertificateCheckBox - // - this.tableLayoutPanel1.SetColumnSpan(this.ignoreUntrustedCertificateCheckBox, 2); - resources.ApplyResources(this.ignoreUntrustedCertificateCheckBox, "ignoreUntrustedCertificateCheckBox"); - this.ignoreUntrustedCertificateCheckBox.Name = "ignoreUntrustedCertificateCheckBox"; - this.ignoreUntrustedCertificateCheckBox.Properties.AutoWidth = true; - this.ignoreUntrustedCertificateCheckBox.Properties.Caption = resources.GetString("ignoreUntrustedCertificateCheckBox.Properties.Caption"); - // - // EditServerForm - // - this.AcceptButton = this.validateButton; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelButton; - this.Controls.Add(this.tableLayoutPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "EditServerForm"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.EditServerForm_FormClosing); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.displayNameTextEdit.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.urlTextBox.Properties)).EndInit(); - this.tableLayoutPanel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.authenticationCheckBox.Properties)).EndInit(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.usernameTextBox.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.passwordTextBox.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ignoreUntrustedCertificateCheckBox.Properties)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private DevExpress.XtraEditors.TextEdit urlTextBox; - private DevExpress.XtraEditors.LabelControl urlLabel; - private DevExpress.XtraEditors.CheckEdit authenticationCheckBox; - private DevExpress.XtraEditors.TextEdit usernameTextBox; - private DevExpress.XtraEditors.TextEdit passwordTextBox; - private DevExpress.XtraEditors.LabelControl usernameLabel; - private DevExpress.XtraEditors.LabelControl passwordLabel; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private DevExpress.XtraEditors.SimpleButton validateButton; - private DevExpress.XtraEditors.SimpleButton cancelButton; - private DevExpress.XtraEditors.CheckEdit ignoreUntrustedCertificateCheckBox; - private DevExpress.XtraEditors.TextEdit displayNameTextEdit; - private DevExpress.XtraEditors.LabelControl displayNameLabel; - } +namespace Jenkins.Tray.UI +{ + partial class EditServerForm + { + /// + /// 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(EditServerForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.displayNameTextEdit = new DevExpress.XtraEditors.TextEdit(); + this.urlTextBox = new DevExpress.XtraEditors.TextEdit(); + this.displayNameLabel = new DevExpress.XtraEditors.LabelControl(); + this.urlLabel = new DevExpress.XtraEditors.LabelControl(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.validateButton = new DevExpress.XtraEditors.SimpleButton(); + this.cancelButton = new DevExpress.XtraEditors.SimpleButton(); + this.authenticationCheckBox = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.usernameTextBox = new DevExpress.XtraEditors.TextEdit(); + this.passwordTextBox = new DevExpress.XtraEditors.TextEdit(); + this.passwordLabel = new DevExpress.XtraEditors.LabelControl(); + this.usernameLabel = new DevExpress.XtraEditors.LabelControl(); + this.ignoreUntrustedCertificateCheckBox = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.displayNameTextEdit.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.urlTextBox.Properties)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.authenticationCheckBox.Properties)).BeginInit(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.usernameTextBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.passwordTextBox.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ignoreUntrustedCertificateCheckBox.Properties)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); + this.tableLayoutPanel1.Controls.Add(this.displayNameTextEdit, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.urlTextBox, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.displayNameLabel, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.urlLabel, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.authenticationCheckBox, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.ignoreUntrustedCertificateCheckBox, 0, 5); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + // + // displayNameTextEdit + // + resources.ApplyResources(this.displayNameTextEdit, "displayNameTextEdit"); + this.displayNameTextEdit.Name = "displayNameTextEdit"; + // + // urlTextBox + // + resources.ApplyResources(this.urlTextBox, "urlTextBox"); + this.urlTextBox.Name = "urlTextBox"; + this.urlTextBox.Leave += new System.EventHandler(this.urlTextBox_Leave); + // + // displayNameLabel + // + this.displayNameLabel.Appearance.Options.UseTextOptions = true; + this.displayNameLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + resources.ApplyResources(this.displayNameLabel, "displayNameLabel"); + this.displayNameLabel.Name = "displayNameLabel"; + // + // urlLabel + // + this.urlLabel.Appearance.Options.UseTextOptions = true; + this.urlLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + resources.ApplyResources(this.urlLabel, "urlLabel"); + this.urlLabel.Name = "urlLabel"; + // + // tableLayoutPanel2 + // + resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); + this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 2); + this.tableLayoutPanel2.Controls.Add(this.validateButton, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.cancelButton, 2, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + // + // validateButton + // + this.validateButton.DialogResult = System.Windows.Forms.DialogResult.OK; + resources.ApplyResources(this.validateButton, "validateButton"); + this.validateButton.Name = "validateButton"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.cancelButton, "cancelButton"); + this.cancelButton.Name = "cancelButton"; + // + // authenticationCheckBox + // + this.tableLayoutPanel1.SetColumnSpan(this.authenticationCheckBox, 2); + resources.ApplyResources(this.authenticationCheckBox, "authenticationCheckBox"); + this.authenticationCheckBox.Name = "authenticationCheckBox"; + this.authenticationCheckBox.Properties.AutoWidth = true; + this.authenticationCheckBox.Properties.Caption = resources.GetString("authenticationCheckBox.Properties.Caption"); + this.authenticationCheckBox.CheckStateChanged += new System.EventHandler(this.authenticationCheckBox_CheckStateChanged); + // + // tableLayoutPanel3 + // + resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3"); + this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel3, 2); + this.tableLayoutPanel3.Controls.Add(this.usernameTextBox, 2, 0); + this.tableLayoutPanel3.Controls.Add(this.passwordTextBox, 2, 1); + this.tableLayoutPanel3.Controls.Add(this.passwordLabel, 1, 1); + this.tableLayoutPanel3.Controls.Add(this.usernameLabel, 1, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + // + // usernameTextBox + // + resources.ApplyResources(this.usernameTextBox, "usernameTextBox"); + this.usernameTextBox.Name = "usernameTextBox"; + // + // passwordTextBox + // + resources.ApplyResources(this.passwordTextBox, "passwordTextBox"); + this.passwordTextBox.Name = "passwordTextBox"; + this.passwordTextBox.Properties.PasswordChar = '*'; + // + // passwordLabel + // + this.passwordLabel.Appearance.Options.UseTextOptions = true; + this.passwordLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + resources.ApplyResources(this.passwordLabel, "passwordLabel"); + this.passwordLabel.Name = "passwordLabel"; + // + // usernameLabel + // + this.usernameLabel.Appearance.Options.UseTextOptions = true; + this.usernameLabel.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + resources.ApplyResources(this.usernameLabel, "usernameLabel"); + this.usernameLabel.Name = "usernameLabel"; + // + // ignoreUntrustedCertificateCheckBox + // + this.tableLayoutPanel1.SetColumnSpan(this.ignoreUntrustedCertificateCheckBox, 2); + resources.ApplyResources(this.ignoreUntrustedCertificateCheckBox, "ignoreUntrustedCertificateCheckBox"); + this.ignoreUntrustedCertificateCheckBox.Name = "ignoreUntrustedCertificateCheckBox"; + this.ignoreUntrustedCertificateCheckBox.Properties.AutoWidth = true; + this.ignoreUntrustedCertificateCheckBox.Properties.Caption = resources.GetString("ignoreUntrustedCertificateCheckBox.Properties.Caption"); + // + // EditServerForm + // + this.AcceptButton = this.validateButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.Controls.Add(this.tableLayoutPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditServerForm"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.EditServerForm_FormClosing); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.displayNameTextEdit.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.urlTextBox.Properties)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.authenticationCheckBox.Properties)).EndInit(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.usernameTextBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.passwordTextBox.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ignoreUntrustedCertificateCheckBox.Properties)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private DevExpress.XtraEditors.TextEdit urlTextBox; + private DevExpress.XtraEditors.LabelControl urlLabel; + private DevExpress.XtraEditors.CheckEdit authenticationCheckBox; + private DevExpress.XtraEditors.TextEdit usernameTextBox; + private DevExpress.XtraEditors.TextEdit passwordTextBox; + private DevExpress.XtraEditors.LabelControl usernameLabel; + private DevExpress.XtraEditors.LabelControl passwordLabel; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private DevExpress.XtraEditors.SimpleButton validateButton; + private DevExpress.XtraEditors.SimpleButton cancelButton; + private DevExpress.XtraEditors.CheckEdit ignoreUntrustedCertificateCheckBox; + private DevExpress.XtraEditors.TextEdit displayNameTextEdit; + private DevExpress.XtraEditors.LabelControl displayNameLabel; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/EditServerForm.resx b/JenkinsTray/UI/EditServerForm.resx similarity index 98% rename from HudsonTrayTracker/UI/EditServerForm.resx rename to JenkinsTray/UI/EditServerForm.resx index ff5c404..294daae 100644 --- a/HudsonTrayTracker/UI/EditServerForm.resx +++ b/JenkinsTray/UI/EditServerForm.resx @@ -1,1128 +1,1128 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - True - - - - GrowAndShrink - - - 2 - - - Fill - - - - 125, 29 - - - 412, 20 - - - 3 - - - displayNameTextEdit - - - DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 0 - - - Fill - - - 125, 3 - - - 412, 20 - - - 1 - - - urlTextBox - - - DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 1 - - - - Horizontal - - - 3, 29 - - - 116, 13 - - - 2 - - - Display name (optional): - - - displayNameLabel - - - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 2 - - - Horizontal - - - Fill - - - 3, 6 - - - 3, 6, 3, 3 - - - 26, 13 - - - 0 - - - URL: - - - urlLabel - - - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 3 - - - True - - - GrowAndShrink - - - 4 - - - 189, 3 - - - 75, 23 - - - 0 - - - OK - - - validateButton - - - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel2 - - - 0 - - - 270, 3 - - - 75, 23 - - - 1 - - - Cancel - - - cancelButton - - - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel2 - - - 1 - - - Fill - - - 3, 163 - - - 1 - - - 534, 85 - - - 7 - - - tableLayoutPanel2 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 4 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="validateButton" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="cancelButton" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,AutoSize,0,AutoSize,0,Percent,50" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> - - - 3, 55 - - - Authentication - - - 93, 19 - - - 4 - - - authenticationCheckBox - - - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 5 - - - True - - - GrowAndShrink - - - 3 - - - Fill - - - False - - - 84, 3 - - - 447, 20 - - - 1 - - - usernameTextBox - - - DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel3 - - - 0 - - - Fill - - - False - - - 84, 29 - - - 447, 20 - - - 3 - - - passwordTextBox - - - DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel3 - - - 1 - - - Horizontal - - - Fill - - - False - - - 23, 29 - - - 50, 13 - - - 2 - - - Password: - - - passwordLabel - - - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel3 - - - 2 - - - Horizontal - - - Fill - - - False - - - 23, 3 - - - 55, 13 - - - 0 - - - User name: - - - usernameLabel - - - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel3 - - - 3 - - - Fill - - - 3, 80 - - - 2 - - - 534, 52 - - - 5 - - - tableLayoutPanel3 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 6 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="usernameTextBox" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="passwordTextBox" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="passwordLabel" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="usernameLabel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,20,AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0" /></TableLayoutSettings> - - - 3, 138 - - - Ignore untrusted certificate (SSL) - - - 184, 19 - - - 6 - - - ignoreUntrustedCertificateCheckBox - - - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - tableLayoutPanel1 - - - 7 - - - Fill - - - 10, 10 - - - 7 - - - 448, 251 - - - 0 - - - tableLayoutPanel1 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="displayNameTextEdit" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="urlTextBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="displayNameLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="urlLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="6" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="authenticationCheckBox" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="tableLayoutPanel3" Row="4" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="ignoreUntrustedCertificateCheckBox" Row="5" RowSpan="1" Column="0" ColumnSpan="2" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings> - - - True - - - 6, 13 - - - True - - - GrowAndShrink - - - 468, 271 - - - - AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA - CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA - AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA - g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac - 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// - ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// - /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA - l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 - wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// - /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// - //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA - l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 - z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// - //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// - //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa - 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// - /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A - kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD - 7P////////////////////////////////////////////////////////////////////////////// - /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA - iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz - tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// - ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// - /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA - 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA - pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA - xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA - sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 - zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// - /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// - //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA - q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 - 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// - //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD - 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu - 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA - 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA - nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA - pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA - sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA - +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA - zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A - //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A - sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA - +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA - v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA - AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA - iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA - n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A - t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA - wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A - 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA - 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 - wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL - 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta - 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - 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 - MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 - NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 - OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ - Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC - QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI - RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL - SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O - TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS - UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW - VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e - HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh - ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn - JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx - MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 - NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 - OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ - Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND - QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG - RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL - S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P - TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS - UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX - VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY - WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY - WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA - nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA - pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA - rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA - hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A - tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A - jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA - vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb - oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA - xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// - ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA - zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA - pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA - f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA - rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA - hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A - tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// - //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA - vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt - w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA - xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ - 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA - zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// - //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA - 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// - ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A - 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji - 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A - jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA - vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA - lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA - xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 - tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA - zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// - ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA - 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA - rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A - 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A - tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA - 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA - vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA - 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA - xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA - 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA - zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA - pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA - 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA - rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A - 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A - tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA - 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA - vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA - 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA - xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA - 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA - zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA - /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA - 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A - //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A - 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A - tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA - 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA - vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA - 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA - xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA - 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA - zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb - jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA - q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 - pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA - xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA - 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA - 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i - y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ - 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY - FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi - IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 - NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB - AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 - fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz - cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 - fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 - JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 - PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH - R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT - UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY - GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi - ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 - ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE - QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP - TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW - VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA - f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA - iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A - k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee - 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew - 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A - sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA - vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA - x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA - 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A - 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA - 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA - 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA - /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA - rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A - uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA - w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA - zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA - f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A - sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A - 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 - zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 - 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz - BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY - FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk - IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW - EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - - - 10, 10, 10, 10 - - - CenterParent - - - Server settings - - - EditServerForm - - - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + True + + + + GrowAndShrink + + + 2 + + + Fill + + + + 125, 29 + + + 412, 20 + + + 3 + + + displayNameTextEdit + + + DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 0 + + + Fill + + + 125, 3 + + + 412, 20 + + + 1 + + + urlTextBox + + + DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 1 + + + + Horizontal + + + 3, 29 + + + 116, 13 + + + 2 + + + Display name (optional): + + + displayNameLabel + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 2 + + + Horizontal + + + Fill + + + 3, 6 + + + 3, 6, 3, 3 + + + 26, 13 + + + 0 + + + URL: + + + urlLabel + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 3 + + + True + + + GrowAndShrink + + + 4 + + + 189, 3 + + + 75, 23 + + + 0 + + + OK + + + validateButton + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel2 + + + 0 + + + 270, 3 + + + 75, 23 + + + 1 + + + Cancel + + + cancelButton + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel2 + + + 1 + + + Fill + + + 3, 163 + + + 1 + + + 534, 85 + + + 7 + + + tableLayoutPanel2 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel1 + + + 4 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="validateButton" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="cancelButton" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,50,AutoSize,0,AutoSize,0,Percent,50" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> + + + 3, 55 + + + Authentication + + + 93, 19 + + + 4 + + + authenticationCheckBox + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 5 + + + True + + + GrowAndShrink + + + 3 + + + Fill + + + False + + + 84, 3 + + + 447, 20 + + + 1 + + + usernameTextBox + + + DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel3 + + + 0 + + + Fill + + + False + + + 84, 29 + + + 447, 20 + + + 3 + + + passwordTextBox + + + DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel3 + + + 1 + + + Horizontal + + + Fill + + + False + + + 23, 29 + + + 50, 13 + + + 2 + + + Password: + + + passwordLabel + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel3 + + + 2 + + + Horizontal + + + Fill + + + False + + + 23, 3 + + + 55, 13 + + + 0 + + + User name: + + + usernameLabel + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel3 + + + 3 + + + Fill + + + 3, 80 + + + 2 + + + 534, 52 + + + 5 + + + tableLayoutPanel3 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel1 + + + 6 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="usernameTextBox" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="passwordTextBox" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="passwordLabel" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="usernameLabel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,20,AutoSize,0,Percent,100" /><Rows Styles="AutoSize,0,AutoSize,0" /></TableLayoutSettings> + + + 3, 138 + + + Ignore untrusted certificate (SSL) + + + 184, 19 + + + 6 + + + ignoreUntrustedCertificateCheckBox + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + tableLayoutPanel1 + + + 7 + + + Fill + + + 10, 10 + + + 7 + + + 448, 251 + + + 0 + + + tableLayoutPanel1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="displayNameTextEdit" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="urlTextBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="displayNameLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="urlLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="6" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="authenticationCheckBox" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="tableLayoutPanel3" Row="4" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="ignoreUntrustedCertificateCheckBox" Row="5" RowSpan="1" Column="0" ColumnSpan="2" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings> + + + True + + + 6, 13 + + + True + + + GrowAndShrink + + + 468, 271 + + + + AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA + CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA + g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac + 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// + ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// + /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA + l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 + wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// + /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// + //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA + l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 + z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// + //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// + //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa + 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// + //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A + kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD + 7P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA + iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz + tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// + ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// + /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA + 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA + pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA + xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA + sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 + zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// + /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// + //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA + q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 + 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// + //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD + 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu + 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA + 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA + nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA + pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA + sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA + +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA + zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A + //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A + sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA + +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA + v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA + iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA + n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A + t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA + wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A + 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA + 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 + wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL + 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta + 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + 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 + MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 + NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 + OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ + Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC + QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI + RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL + SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O + TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS + UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW + VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e + HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh + ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn + JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx + MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 + NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 + OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ + Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND + QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG + RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL + S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P + TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS + UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX + VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY + WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY + WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA + nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA + pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA + rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA + hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A + tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A + jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA + vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb + oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA + xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// + ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA + zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA + pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA + f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA + rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA + hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A + tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// + //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA + vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt + w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA + xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ + 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA + zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// + //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA + 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// + ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A + 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji + 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A + jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA + vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA + lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA + xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 + tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA + zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// + ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA + 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA + rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A + 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A + tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA + 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA + vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA + 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA + xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA + 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA + zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA + pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA + 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA + rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A + 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A + tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA + 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA + vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA + 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA + xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA + 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA + zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA + /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA + 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A + //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A + 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A + tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA + 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA + vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA + 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA + xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA + 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA + zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA + AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb + jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA + q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 + pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA + xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA + 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA + 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i + y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ + 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY + FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi + IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 + NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB + AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 + fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz + cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 + fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 + JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 + PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH + R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT + UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY + GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi + ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 + ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE + QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP + TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW + VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA + f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA + iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A + k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee + 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew + 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A + sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA + vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA + x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA + 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A + 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA + 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA + 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA + /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA + rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A + uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA + w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA + zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA + f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A + sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A + 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 + zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 + 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz + BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY + FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk + IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW + EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 10, 10, 10, 10 + + + CenterParent + + + Server settings + + + EditServerForm + + + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v10.1, Version=10.1.12.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/MainForm.Designer.cs b/JenkinsTray/UI/MainForm.Designer.cs similarity index 98% rename from HudsonTrayTracker/UI/MainForm.Designer.cs rename to JenkinsTray/UI/MainForm.Designer.cs index 567f017..9d5d185 100644 --- a/HudsonTrayTracker/UI/MainForm.Designer.cs +++ b/JenkinsTray/UI/MainForm.Designer.cs @@ -1,556 +1,556 @@ -namespace Hudson.TrayTracker.UI -{ - partial class MainForm - { - /// - /// 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.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.barManager = new DevExpress.XtraBars.BarManager(this.components); - this.bar2 = new DevExpress.XtraBars.Bar(); - this.settingsButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.refreshButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.exitButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.checkUpdatesButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.aboutButtonItem = new DevExpress.XtraBars.BarButtonItem(); - this.bar3 = new DevExpress.XtraBars.Bar(); - this.lastCheckBarStaticItem = new DevExpress.XtraBars.BarStaticItem(); - this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); - this.projectsGridControl = new DevExpress.XtraGrid.GridControl(); - this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.openProjectPageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openConsolePageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.runBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.acknowledgeStatusMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.acknowledgeProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.claimBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.removeProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.projectsGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.setAuthenticationTokenMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.serverGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.statusGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.repositoryItemPictureEdit3 = new DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit(); - this.nameGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.urlGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.buildDetailsGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.lastBuildGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.lastSuccessGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.lastSuccessUserGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.lastFailureGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.lastFailureUserGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.claimedByGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.claimReasonGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - ((System.ComponentModel.ISupportInitialize)(this.barManager)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).BeginInit(); - this.contextMenuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemPictureEdit3)).BeginInit(); - this.SuspendLayout(); - // - // barManager - // - this.barManager.Bars.AddRange(new DevExpress.XtraBars.Bar[] { - this.bar2, - this.bar3}); - this.barManager.DockControls.Add(this.barDockControlTop); - this.barManager.DockControls.Add(this.barDockControlBottom); - this.barManager.DockControls.Add(this.barDockControlLeft); - this.barManager.DockControls.Add(this.barDockControlRight); - this.barManager.Form = this; - this.barManager.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.settingsButtonItem, - this.aboutButtonItem, - this.refreshButtonItem, - this.exitButtonItem, - this.lastCheckBarStaticItem, - this.checkUpdatesButtonItem}); - this.barManager.MainMenu = this.bar2; - this.barManager.MaxItemId = 6; - this.barManager.StatusBar = this.bar3; - // - // bar2 - // - this.bar2.BarName = "Main menu"; - this.bar2.DockCol = 0; - this.bar2.DockRow = 0; - this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; - this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.settingsButtonItem), - new DevExpress.XtraBars.LinkPersistInfo(this.refreshButtonItem), - new DevExpress.XtraBars.LinkPersistInfo(this.exitButtonItem), - new DevExpress.XtraBars.LinkPersistInfo(this.checkUpdatesButtonItem), - new DevExpress.XtraBars.LinkPersistInfo(this.aboutButtonItem)}); - this.bar2.OptionsBar.AllowQuickCustomization = false; - this.bar2.OptionsBar.DrawDragBorder = false; - this.bar2.OptionsBar.MultiLine = true; - this.bar2.OptionsBar.UseWholeRow = true; - this.bar2.Text = "Main menu"; - // - // settingsButtonItem - // - this.settingsButtonItem.Caption = "Settings"; - this.settingsButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("settingsButtonItem.Glyph"))); - this.settingsButtonItem.Id = 0; - this.settingsButtonItem.Name = "settingsButtonItem"; - this.settingsButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.settingsButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.settingsButtonItem_ItemClick); - // - // refreshButtonItem - // - this.refreshButtonItem.Caption = "Refresh"; - this.refreshButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("refreshButtonItem.Glyph"))); - this.refreshButtonItem.Id = 2; - this.refreshButtonItem.Name = "refreshButtonItem"; - this.refreshButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.refreshButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.refreshButtonItem_ItemClick); - // - // exitButtonItem - // - this.exitButtonItem.Caption = "Exit"; - this.exitButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("exitButtonItem.Glyph"))); - this.exitButtonItem.Id = 3; - this.exitButtonItem.Name = "exitButtonItem"; - this.exitButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.exitButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.exitButtonItem_ItemClick); - // - // checkUpdatesButtonItem - // - this.checkUpdatesButtonItem.Caption = "Check for updates"; - this.checkUpdatesButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("checkUpdatesButtonItem.Glyph"))); - this.checkUpdatesButtonItem.Id = 5; - this.checkUpdatesButtonItem.Name = "checkUpdatesButtonItem"; - this.checkUpdatesButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.checkUpdatesButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.checkUpdatesButtonItem_ItemClick); - // - // aboutButtonItem - // - this.aboutButtonItem.Caption = "About"; - this.aboutButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("aboutButtonItem.Glyph"))); - this.aboutButtonItem.Id = 1; - this.aboutButtonItem.Name = "aboutButtonItem"; - this.aboutButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.aboutButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.aboutButtonItem_ItemClick); - // - // bar3 - // - this.bar3.BarName = "Status bar"; - this.bar3.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Bottom; - this.bar3.DockCol = 0; - this.bar3.DockRow = 0; - this.bar3.DockStyle = DevExpress.XtraBars.BarDockStyle.Bottom; - this.bar3.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.lastCheckBarStaticItem)}); - this.bar3.OptionsBar.AllowQuickCustomization = false; - this.bar3.OptionsBar.DrawDragBorder = false; - this.bar3.OptionsBar.UseWholeRow = true; - this.bar3.Text = "Status bar"; - // - // lastCheckBarStaticItem - // - this.lastCheckBarStaticItem.Caption = "Last check: -"; - this.lastCheckBarStaticItem.Id = 4; - this.lastCheckBarStaticItem.Name = "lastCheckBarStaticItem"; - this.lastCheckBarStaticItem.TextAlignment = System.Drawing.StringAlignment.Near; - // - // barDockControlTop - // - this.barDockControlTop.CausesValidation = false; - this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; - this.barDockControlTop.Location = new System.Drawing.Point(0, 0); - this.barDockControlTop.Size = new System.Drawing.Size(879, 26); - // - // barDockControlBottom - // - this.barDockControlBottom.CausesValidation = false; - this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.barDockControlBottom.Location = new System.Drawing.Point(0, 384); - this.barDockControlBottom.Size = new System.Drawing.Size(879, 28); - // - // barDockControlLeft - // - this.barDockControlLeft.CausesValidation = false; - this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; - this.barDockControlLeft.Location = new System.Drawing.Point(0, 26); - this.barDockControlLeft.Size = new System.Drawing.Size(0, 358); - // - // barDockControlRight - // - this.barDockControlRight.CausesValidation = false; - this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; - this.barDockControlRight.Location = new System.Drawing.Point(879, 26); - this.barDockControlRight.Size = new System.Drawing.Size(0, 358); - // - // projectsGridControl - // - this.projectsGridControl.ContextMenuStrip = this.contextMenuStrip; - this.projectsGridControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.projectsGridControl.Location = new System.Drawing.Point(0, 26); - this.projectsGridControl.MainView = this.projectsGridView; - this.projectsGridControl.Name = "projectsGridControl"; - this.projectsGridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { - this.repositoryItemPictureEdit3}); - this.projectsGridControl.Size = new System.Drawing.Size(879, 358); - this.projectsGridControl.TabIndex = 4; - this.projectsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.projectsGridView}); - // - // contextMenuStrip - // - this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openProjectPageMenuItem, - this.openConsolePageMenuItem, - this.runBuildMenuItem, - this.toolStripSeparator1, - this.acknowledgeStatusMenuItem, - this.acknowledgeProjectMenuItem, - this.toolStripSeparator4, - this.setAuthenticationTokenMenuItem, - this.toolStripSeparator2, - this.claimBuildMenuItem, - this.toolStripSeparator3, - this.removeProjectMenuItem}); - this.contextMenuStrip.Name = "contextMenuStrip"; - this.contextMenuStrip.Size = new System.Drawing.Size(230, 176); - this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); - // - // openProjectPageMenuItem - // - this.openProjectPageMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openProjectPageMenuItem.Image"))); - this.openProjectPageMenuItem.Name = "openProjectPageMenuItem"; - this.openProjectPageMenuItem.Size = new System.Drawing.Size(229, 22); - this.openProjectPageMenuItem.Text = "Open project page"; - this.openProjectPageMenuItem.Click += new System.EventHandler(this.openProjectPageMenuItem_Click); - // - // openConsolePageMenuItem - // - this.openConsolePageMenuItem.Name = "openConsolePageMenuItem"; - this.openConsolePageMenuItem.Size = new System.Drawing.Size(229, 22); - this.openConsolePageMenuItem.Text = "View console output"; - this.openConsolePageMenuItem.Click += new System.EventHandler(this.openConsolePageMenuItem_Click); - // - // runBuildMenuItem - // - this.runBuildMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("runBuildMenuItem.Image"))); - this.runBuildMenuItem.Name = "runBuildMenuItem"; - this.runBuildMenuItem.Size = new System.Drawing.Size(229, 22); - this.runBuildMenuItem.Text = "Run build"; - this.runBuildMenuItem.Click += new System.EventHandler(this.runBuildMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(226, 6); - // - // acknowledgeStatusMenuItem - // - this.acknowledgeStatusMenuItem.Name = "acknowledgeStatusMenuItem"; - this.acknowledgeStatusMenuItem.Size = new System.Drawing.Size(229, 22); - this.acknowledgeStatusMenuItem.Text = "Acknowledge status"; - this.acknowledgeStatusMenuItem.Click += new System.EventHandler(this.acknowledgeMenuItem_Click); - // - // acknowledgeProjectMenuItem - // - this.acknowledgeProjectMenuItem.Name = "acknowledgeProjectMenuItem"; - this.acknowledgeProjectMenuItem.Size = new System.Drawing.Size(229, 22); - this.acknowledgeProjectMenuItem.Text = "Acknowledge project"; - this.acknowledgeProjectMenuItem.Click += new System.EventHandler(this.acknowledgeProjectMenuItem_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(226, 6); - // - // claimBuildMenuItem - // - this.claimBuildMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("claimBuildMenuItem.Image"))); - this.claimBuildMenuItem.Name = "claimBuildMenuItem"; - this.claimBuildMenuItem.Size = new System.Drawing.Size(229, 22); - this.claimBuildMenuItem.Text = "Claim this build"; - this.claimBuildMenuItem.Click += new System.EventHandler(this.claimBuildMenuItem_Click); - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(226, 6); - // - // removeProjectMenuItem - // - this.removeProjectMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("removeProjectMenuItem.Image"))); - this.removeProjectMenuItem.Name = "removeProjectMenuItem"; - this.removeProjectMenuItem.Size = new System.Drawing.Size(229, 22); - this.removeProjectMenuItem.Text = "Remove project"; - this.removeProjectMenuItem.Click += new System.EventHandler(this.removeProjectMenuItem_Click); - // - // projectsGridView - // - this.projectsGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.serverGridColumn, - this.statusGridColumn, - this.nameGridColumn, - this.urlGridColumn, - this.buildDetailsGridColumn, - this.lastBuildGridColumn, - this.lastSuccessGridColumn, - this.lastSuccessUserGridColumn, - this.lastFailureGridColumn, - this.lastFailureUserGridColumn, - this.claimedByGridColumn, - this.claimReasonGridColumn}); - this.projectsGridView.GridControl = this.projectsGridControl; - this.projectsGridView.GroupCount = 1; - this.projectsGridView.Name = "projectsGridView"; - this.projectsGridView.OptionsBehavior.AutoExpandAllGroups = true; - this.projectsGridView.OptionsCustomization.AllowGroup = false; - this.projectsGridView.OptionsSelection.EnableAppearanceFocusedCell = false; - this.projectsGridView.OptionsView.AnimationType = DevExpress.XtraGrid.Views.Base.GridAnimationType.AnimateAllContent; - this.projectsGridView.OptionsView.ShowGroupPanel = false; - this.projectsGridView.OptionsView.ShowIndicator = false; - this.projectsGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { - new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.serverGridColumn, DevExpress.Data.ColumnSortOrder.Ascending), - new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.nameGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); - this.projectsGridView.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(this.projectsGridView_CustomColumnSort); - this.projectsGridView.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.projectsGridView_CustomUnboundColumnData); - this.projectsGridView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.projectsGridView_MouseMove); - this.projectsGridView.DoubleClick += new System.EventHandler(this.projectsGridView_DoubleClick); - // - // setAuthenticationTokenMenuItem - // - this.setAuthenticationTokenMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("setAuthenticationTokenMenuItem.Image"))); - this.setAuthenticationTokenMenuItem.Name = "setAuthenticationTokenMenuItem"; - this.setAuthenticationTokenMenuItem.Size = new System.Drawing.Size(203, 22); - this.setAuthenticationTokenMenuItem.Text = "Set authentication token"; - this.setAuthenticationTokenMenuItem.Click += new System.EventHandler(this.setAuthenticationTokenMenuItem_Click); - // - // serverGridColumn - // - this.serverGridColumn.Caption = "Server"; - this.serverGridColumn.FieldName = "Server"; - this.serverGridColumn.Name = "serverGridColumn"; - this.serverGridColumn.OptionsColumn.AllowEdit = false; - // - // statusGridColumn - // - this.statusGridColumn.Caption = " "; - this.statusGridColumn.ColumnEdit = this.repositoryItemPictureEdit3; - this.statusGridColumn.FieldName = "statusGridColumn"; - this.statusGridColumn.ImageIndex = 0; - this.statusGridColumn.Name = "statusGridColumn"; - this.statusGridColumn.UnboundType = DevExpress.Data.UnboundColumnType.Object; - this.statusGridColumn.Visible = true; - this.statusGridColumn.VisibleIndex = 0; - this.statusGridColumn.Width = 50; - // - // repositoryItemPictureEdit3 - // - this.repositoryItemPictureEdit3.Name = "repositoryItemPictureEdit3"; - // - // nameGridColumn - // - this.nameGridColumn.AppearanceCell.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.nameGridColumn.AppearanceCell.Options.UseFont = true; - this.nameGridColumn.AppearanceHeader.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.nameGridColumn.AppearanceHeader.Options.UseFont = true; - this.nameGridColumn.Caption = "Project"; - this.nameGridColumn.FieldName = "Name"; - this.nameGridColumn.Name = "nameGridColumn"; - this.nameGridColumn.OptionsColumn.AllowEdit = false; - this.nameGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; - this.nameGridColumn.Visible = true; - this.nameGridColumn.VisibleIndex = 1; - this.nameGridColumn.Width = 137; - // - // urlGridColumn - // - this.urlGridColumn.Caption = "URL"; - this.urlGridColumn.FieldName = "Url"; - this.urlGridColumn.Name = "urlGridColumn"; - this.urlGridColumn.OptionsColumn.AllowEdit = false; - this.urlGridColumn.Width = 157; - // - // buildDetailsGridColumn - // - this.buildDetailsGridColumn.AppearanceCell.Options.UseTextOptions = true; - this.buildDetailsGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; - this.buildDetailsGridColumn.Caption = "Details"; - this.buildDetailsGridColumn.FieldName = "buildDetailsStr"; - this.buildDetailsGridColumn.Name = "buildDetailsGridColumn"; - this.buildDetailsGridColumn.OptionsColumn.AllowEdit = false; - this.buildDetailsGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; - this.buildDetailsGridColumn.Visible = true; - this.buildDetailsGridColumn.VisibleIndex = 2; - this.buildDetailsGridColumn.Width = 200; - // - // lastBuildGridColumn - // - this.lastBuildGridColumn.AppearanceCell.Options.UseTextOptions = true; - this.lastBuildGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; - this.lastBuildGridColumn.Caption = "Last build"; - this.lastBuildGridColumn.FieldName = "lastBuildStr"; - this.lastBuildGridColumn.Name = "lastBuildGridColumn"; - this.lastBuildGridColumn.OptionsColumn.AllowEdit = false; - this.lastBuildGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; - this.lastBuildGridColumn.Visible = true; - this.lastBuildGridColumn.VisibleIndex = 3; - this.lastBuildGridColumn.Width = 121; - // - // lastSuccessGridColumn - // - this.lastSuccessGridColumn.AppearanceCell.Options.UseTextOptions = true; - this.lastSuccessGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; - this.lastSuccessGridColumn.Caption = "Last success"; - this.lastSuccessGridColumn.FieldName = "LastSuccessBuildStr"; - this.lastSuccessGridColumn.Name = "lastSuccessGridColumn"; - this.lastSuccessGridColumn.OptionsColumn.AllowEdit = false; - this.lastSuccessGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; - this.lastSuccessGridColumn.Visible = true; - this.lastSuccessGridColumn.VisibleIndex = 4; - this.lastSuccessGridColumn.Width = 121; - // - // lastSuccessUserGridColumn - // - this.lastSuccessUserGridColumn.Caption = "Last success user"; - this.lastSuccessUserGridColumn.FieldName = "LastSuccessUsers"; - this.lastSuccessUserGridColumn.Name = "lastSuccessUserGridColumn"; - this.lastSuccessUserGridColumn.OptionsColumn.AllowEdit = false; - this.lastSuccessUserGridColumn.Width = 57; - // - // lastFailureGridColumn - // - this.lastFailureGridColumn.AppearanceCell.Options.UseTextOptions = true; - this.lastFailureGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; - this.lastFailureGridColumn.Caption = "Last failure"; - this.lastFailureGridColumn.FieldName = "LastFailureBuildStr"; - this.lastFailureGridColumn.Name = "lastFailureGridColumn"; - this.lastFailureGridColumn.OptionsColumn.AllowEdit = false; - this.lastFailureGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; - this.lastFailureGridColumn.Visible = true; - this.lastFailureGridColumn.VisibleIndex = 5; - this.lastFailureGridColumn.Width = 124; - // - // lastFailureUserGridColumn - // - this.lastFailureUserGridColumn.Caption = "Last failure user"; - this.lastFailureUserGridColumn.FieldName = "LastFailureUsers"; - this.lastFailureUserGridColumn.Name = "lastFailureUserGridColumn"; - this.lastFailureUserGridColumn.OptionsColumn.AllowEdit = false; - this.lastFailureUserGridColumn.Visible = true; - this.lastFailureUserGridColumn.VisibleIndex = 6; - this.lastFailureUserGridColumn.Width = 65; - // - // claimedByGridColumn - // - this.claimedByGridColumn.Caption = "Claimed by"; - this.claimedByGridColumn.FieldName = "ClaimedBy"; - this.claimedByGridColumn.Name = "claimedByGridColumn"; - this.claimedByGridColumn.OptionsColumn.AllowEdit = false; - // - // claimReasonGridColumn - // - this.claimReasonGridColumn.Caption = "Claim reason"; - this.claimReasonGridColumn.FieldName = "ClaimReason"; - this.claimReasonGridColumn.Name = "claimReasonGridColumn"; - this.claimReasonGridColumn.OptionsColumn.AllowEdit = false; - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(879, 412); - this.Controls.Add(this.projectsGridControl); - this.Controls.Add(this.barDockControlLeft); - this.Controls.Add(this.barDockControlRight); - this.Controls.Add(this.barDockControlBottom); - this.Controls.Add(this.barDockControlTop); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.KeyPreview = true; - this.Name = "MainForm"; - this.Text = "Jenkins Tray"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HudsonTrayTrackerForm_FormClosing); - this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); - ((System.ComponentModel.ISupportInitialize)(this.barManager)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).EndInit(); - this.contextMenuStrip.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.repositoryItemPictureEdit3)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraBars.BarManager barManager; - private DevExpress.XtraBars.Bar bar2; - private DevExpress.XtraBars.Bar bar3; - private DevExpress.XtraBars.BarDockControl barDockControlTop; - private DevExpress.XtraBars.BarDockControl barDockControlBottom; - private DevExpress.XtraBars.BarDockControl barDockControlLeft; - private DevExpress.XtraBars.BarDockControl barDockControlRight; - private DevExpress.XtraBars.BarButtonItem settingsButtonItem; - private DevExpress.XtraBars.BarButtonItem aboutButtonItem; - private DevExpress.XtraGrid.GridControl projectsGridControl; - private DevExpress.XtraGrid.Views.Grid.GridView projectsGridView; - private DevExpress.XtraGrid.Columns.GridColumn nameGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn urlGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn buildDetailsGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn lastBuildGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn lastSuccessGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn lastFailureGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn serverGridColumn; - private DevExpress.XtraBars.BarButtonItem refreshButtonItem; - private DevExpress.XtraBars.BarButtonItem exitButtonItem; - private DevExpress.XtraBars.BarStaticItem lastCheckBarStaticItem; - private DevExpress.XtraGrid.Columns.GridColumn statusGridColumn; - private DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit repositoryItemPictureEdit3; - private System.Windows.Forms.ToolTip toolTip; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem openProjectPageMenuItem; - private System.Windows.Forms.ToolStripMenuItem runBuildMenuItem; - private DevExpress.XtraBars.BarButtonItem checkUpdatesButtonItem; - private System.Windows.Forms.ToolStripMenuItem acknowledgeStatusMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem removeProjectMenuItem; - private DevExpress.XtraGrid.Columns.GridColumn lastSuccessUserGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn lastFailureUserGridColumn; - private System.Windows.Forms.ToolStripMenuItem openConsolePageMenuItem; - private DevExpress.XtraGrid.Columns.GridColumn claimedByGridColumn; - private DevExpress.XtraGrid.Columns.GridColumn claimReasonGridColumn; - private System.Windows.Forms.ToolStripMenuItem claimBuildMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStripMenuItem acknowledgeProjectMenuItem; - private System.Windows.Forms.ToolStripMenuItem setAuthenticationTokenMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; - } +namespace Jenkins.Tray.UI +{ + partial class MainForm + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.barManager = new DevExpress.XtraBars.BarManager(this.components); + this.bar2 = new DevExpress.XtraBars.Bar(); + this.settingsButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.refreshButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.exitButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.checkUpdatesButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.aboutButtonItem = new DevExpress.XtraBars.BarButtonItem(); + this.bar3 = new DevExpress.XtraBars.Bar(); + this.lastCheckBarStaticItem = new DevExpress.XtraBars.BarStaticItem(); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.projectsGridControl = new DevExpress.XtraGrid.GridControl(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.openProjectPageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openConsolePageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.runBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.acknowledgeStatusMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.acknowledgeProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.claimBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.removeProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.projectsGridView = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.setAuthenticationTokenMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.serverGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.statusGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.repositoryItemPictureEdit3 = new DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit(); + this.nameGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.urlGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.buildDetailsGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lastBuildGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lastSuccessGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lastSuccessUserGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lastFailureGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lastFailureUserGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.claimedByGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.claimReasonGridColumn = new DevExpress.XtraGrid.Columns.GridColumn(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + ((System.ComponentModel.ISupportInitialize)(this.barManager)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).BeginInit(); + this.contextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemPictureEdit3)).BeginInit(); + this.SuspendLayout(); + // + // barManager + // + this.barManager.Bars.AddRange(new DevExpress.XtraBars.Bar[] { + this.bar2, + this.bar3}); + this.barManager.DockControls.Add(this.barDockControlTop); + this.barManager.DockControls.Add(this.barDockControlBottom); + this.barManager.DockControls.Add(this.barDockControlLeft); + this.barManager.DockControls.Add(this.barDockControlRight); + this.barManager.Form = this; + this.barManager.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.settingsButtonItem, + this.aboutButtonItem, + this.refreshButtonItem, + this.exitButtonItem, + this.lastCheckBarStaticItem, + this.checkUpdatesButtonItem}); + this.barManager.MainMenu = this.bar2; + this.barManager.MaxItemId = 6; + this.barManager.StatusBar = this.bar3; + // + // bar2 + // + this.bar2.BarName = "Main menu"; + this.bar2.DockCol = 0; + this.bar2.DockRow = 0; + this.bar2.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; + this.bar2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.settingsButtonItem), + new DevExpress.XtraBars.LinkPersistInfo(this.refreshButtonItem), + new DevExpress.XtraBars.LinkPersistInfo(this.exitButtonItem), + new DevExpress.XtraBars.LinkPersistInfo(this.checkUpdatesButtonItem), + new DevExpress.XtraBars.LinkPersistInfo(this.aboutButtonItem)}); + this.bar2.OptionsBar.AllowQuickCustomization = false; + this.bar2.OptionsBar.DrawDragBorder = false; + this.bar2.OptionsBar.MultiLine = true; + this.bar2.OptionsBar.UseWholeRow = true; + this.bar2.Text = "Main menu"; + // + // settingsButtonItem + // + this.settingsButtonItem.Caption = "Settings"; + this.settingsButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("settingsButtonItem.Glyph"))); + this.settingsButtonItem.Id = 0; + this.settingsButtonItem.Name = "settingsButtonItem"; + this.settingsButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.settingsButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.settingsButtonItem_ItemClick); + // + // refreshButtonItem + // + this.refreshButtonItem.Caption = "Refresh"; + this.refreshButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("refreshButtonItem.Glyph"))); + this.refreshButtonItem.Id = 2; + this.refreshButtonItem.Name = "refreshButtonItem"; + this.refreshButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.refreshButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.refreshButtonItem_ItemClick); + // + // exitButtonItem + // + this.exitButtonItem.Caption = "Exit"; + this.exitButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("exitButtonItem.Glyph"))); + this.exitButtonItem.Id = 3; + this.exitButtonItem.Name = "exitButtonItem"; + this.exitButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.exitButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.exitButtonItem_ItemClick); + // + // checkUpdatesButtonItem + // + this.checkUpdatesButtonItem.Caption = "Check for updates"; + this.checkUpdatesButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("checkUpdatesButtonItem.Glyph"))); + this.checkUpdatesButtonItem.Id = 5; + this.checkUpdatesButtonItem.Name = "checkUpdatesButtonItem"; + this.checkUpdatesButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.checkUpdatesButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.checkUpdatesButtonItem_ItemClick); + // + // aboutButtonItem + // + this.aboutButtonItem.Caption = "About"; + this.aboutButtonItem.Glyph = ((System.Drawing.Image)(resources.GetObject("aboutButtonItem.Glyph"))); + this.aboutButtonItem.Id = 1; + this.aboutButtonItem.Name = "aboutButtonItem"; + this.aboutButtonItem.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; + this.aboutButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.aboutButtonItem_ItemClick); + // + // bar3 + // + this.bar3.BarName = "Status bar"; + this.bar3.CanDockStyle = DevExpress.XtraBars.BarCanDockStyle.Bottom; + this.bar3.DockCol = 0; + this.bar3.DockRow = 0; + this.bar3.DockStyle = DevExpress.XtraBars.BarDockStyle.Bottom; + this.bar3.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.lastCheckBarStaticItem)}); + this.bar3.OptionsBar.AllowQuickCustomization = false; + this.bar3.OptionsBar.DrawDragBorder = false; + this.bar3.OptionsBar.UseWholeRow = true; + this.bar3.Text = "Status bar"; + // + // lastCheckBarStaticItem + // + this.lastCheckBarStaticItem.Caption = "Last check: -"; + this.lastCheckBarStaticItem.Id = 4; + this.lastCheckBarStaticItem.Name = "lastCheckBarStaticItem"; + this.lastCheckBarStaticItem.TextAlignment = System.Drawing.StringAlignment.Near; + // + // barDockControlTop + // + this.barDockControlTop.CausesValidation = false; + this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; + this.barDockControlTop.Location = new System.Drawing.Point(0, 0); + this.barDockControlTop.Size = new System.Drawing.Size(879, 26); + // + // barDockControlBottom + // + this.barDockControlBottom.CausesValidation = false; + this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.barDockControlBottom.Location = new System.Drawing.Point(0, 384); + this.barDockControlBottom.Size = new System.Drawing.Size(879, 28); + // + // barDockControlLeft + // + this.barDockControlLeft.CausesValidation = false; + this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.barDockControlLeft.Location = new System.Drawing.Point(0, 26); + this.barDockControlLeft.Size = new System.Drawing.Size(0, 358); + // + // barDockControlRight + // + this.barDockControlRight.CausesValidation = false; + this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; + this.barDockControlRight.Location = new System.Drawing.Point(879, 26); + this.barDockControlRight.Size = new System.Drawing.Size(0, 358); + // + // projectsGridControl + // + this.projectsGridControl.ContextMenuStrip = this.contextMenuStrip; + this.projectsGridControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.projectsGridControl.Location = new System.Drawing.Point(0, 26); + this.projectsGridControl.MainView = this.projectsGridView; + this.projectsGridControl.Name = "projectsGridControl"; + this.projectsGridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemPictureEdit3}); + this.projectsGridControl.Size = new System.Drawing.Size(879, 358); + this.projectsGridControl.TabIndex = 4; + this.projectsGridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.projectsGridView}); + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openProjectPageMenuItem, + this.openConsolePageMenuItem, + this.runBuildMenuItem, + this.toolStripSeparator1, + this.acknowledgeStatusMenuItem, + this.acknowledgeProjectMenuItem, + this.toolStripSeparator4, + this.setAuthenticationTokenMenuItem, + this.toolStripSeparator2, + this.claimBuildMenuItem, + this.toolStripSeparator3, + this.removeProjectMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(230, 176); + this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); + // + // openProjectPageMenuItem + // + this.openProjectPageMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openProjectPageMenuItem.Image"))); + this.openProjectPageMenuItem.Name = "openProjectPageMenuItem"; + this.openProjectPageMenuItem.Size = new System.Drawing.Size(229, 22); + this.openProjectPageMenuItem.Text = "Open project page"; + this.openProjectPageMenuItem.Click += new System.EventHandler(this.openProjectPageMenuItem_Click); + // + // openConsolePageMenuItem + // + this.openConsolePageMenuItem.Name = "openConsolePageMenuItem"; + this.openConsolePageMenuItem.Size = new System.Drawing.Size(229, 22); + this.openConsolePageMenuItem.Text = "View console output"; + this.openConsolePageMenuItem.Click += new System.EventHandler(this.openConsolePageMenuItem_Click); + // + // runBuildMenuItem + // + this.runBuildMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("runBuildMenuItem.Image"))); + this.runBuildMenuItem.Name = "runBuildMenuItem"; + this.runBuildMenuItem.Size = new System.Drawing.Size(229, 22); + this.runBuildMenuItem.Text = "Run build"; + this.runBuildMenuItem.Click += new System.EventHandler(this.runBuildMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(226, 6); + // + // acknowledgeStatusMenuItem + // + this.acknowledgeStatusMenuItem.Name = "acknowledgeStatusMenuItem"; + this.acknowledgeStatusMenuItem.Size = new System.Drawing.Size(229, 22); + this.acknowledgeStatusMenuItem.Text = "Acknowledge status"; + this.acknowledgeStatusMenuItem.Click += new System.EventHandler(this.acknowledgeMenuItem_Click); + // + // acknowledgeProjectMenuItem + // + this.acknowledgeProjectMenuItem.Name = "acknowledgeProjectMenuItem"; + this.acknowledgeProjectMenuItem.Size = new System.Drawing.Size(229, 22); + this.acknowledgeProjectMenuItem.Text = "Acknowledge project"; + this.acknowledgeProjectMenuItem.Click += new System.EventHandler(this.acknowledgeProjectMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(226, 6); + // + // claimBuildMenuItem + // + this.claimBuildMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("claimBuildMenuItem.Image"))); + this.claimBuildMenuItem.Name = "claimBuildMenuItem"; + this.claimBuildMenuItem.Size = new System.Drawing.Size(229, 22); + this.claimBuildMenuItem.Text = "Claim this build"; + this.claimBuildMenuItem.Click += new System.EventHandler(this.claimBuildMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(226, 6); + // + // removeProjectMenuItem + // + this.removeProjectMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("removeProjectMenuItem.Image"))); + this.removeProjectMenuItem.Name = "removeProjectMenuItem"; + this.removeProjectMenuItem.Size = new System.Drawing.Size(229, 22); + this.removeProjectMenuItem.Text = "Remove project"; + this.removeProjectMenuItem.Click += new System.EventHandler(this.removeProjectMenuItem_Click); + // + // projectsGridView + // + this.projectsGridView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.serverGridColumn, + this.statusGridColumn, + this.nameGridColumn, + this.urlGridColumn, + this.buildDetailsGridColumn, + this.lastBuildGridColumn, + this.lastSuccessGridColumn, + this.lastSuccessUserGridColumn, + this.lastFailureGridColumn, + this.lastFailureUserGridColumn, + this.claimedByGridColumn, + this.claimReasonGridColumn}); + this.projectsGridView.GridControl = this.projectsGridControl; + this.projectsGridView.GroupCount = 1; + this.projectsGridView.Name = "projectsGridView"; + this.projectsGridView.OptionsBehavior.AutoExpandAllGroups = true; + this.projectsGridView.OptionsCustomization.AllowGroup = false; + this.projectsGridView.OptionsSelection.EnableAppearanceFocusedCell = false; + this.projectsGridView.OptionsView.AnimationType = DevExpress.XtraGrid.Views.Base.GridAnimationType.AnimateAllContent; + this.projectsGridView.OptionsView.ShowGroupPanel = false; + this.projectsGridView.OptionsView.ShowIndicator = false; + this.projectsGridView.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.serverGridColumn, DevExpress.Data.ColumnSortOrder.Ascending), + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.nameGridColumn, DevExpress.Data.ColumnSortOrder.Ascending)}); + this.projectsGridView.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(this.projectsGridView_CustomColumnSort); + this.projectsGridView.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.projectsGridView_CustomUnboundColumnData); + this.projectsGridView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.projectsGridView_MouseMove); + this.projectsGridView.DoubleClick += new System.EventHandler(this.projectsGridView_DoubleClick); + // + // setAuthenticationTokenMenuItem + // + this.setAuthenticationTokenMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("setAuthenticationTokenMenuItem.Image"))); + this.setAuthenticationTokenMenuItem.Name = "setAuthenticationTokenMenuItem"; + this.setAuthenticationTokenMenuItem.Size = new System.Drawing.Size(203, 22); + this.setAuthenticationTokenMenuItem.Text = "Set authentication token"; + this.setAuthenticationTokenMenuItem.Click += new System.EventHandler(this.setAuthenticationTokenMenuItem_Click); + // + // serverGridColumn + // + this.serverGridColumn.Caption = "Server"; + this.serverGridColumn.FieldName = "Server"; + this.serverGridColumn.Name = "serverGridColumn"; + this.serverGridColumn.OptionsColumn.AllowEdit = false; + // + // statusGridColumn + // + this.statusGridColumn.Caption = " "; + this.statusGridColumn.ColumnEdit = this.repositoryItemPictureEdit3; + this.statusGridColumn.FieldName = "statusGridColumn"; + this.statusGridColumn.ImageIndex = 0; + this.statusGridColumn.Name = "statusGridColumn"; + this.statusGridColumn.UnboundType = DevExpress.Data.UnboundColumnType.Object; + this.statusGridColumn.Visible = true; + this.statusGridColumn.VisibleIndex = 0; + this.statusGridColumn.Width = 50; + // + // repositoryItemPictureEdit3 + // + this.repositoryItemPictureEdit3.Name = "repositoryItemPictureEdit3"; + // + // nameGridColumn + // + this.nameGridColumn.AppearanceCell.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.nameGridColumn.AppearanceCell.Options.UseFont = true; + this.nameGridColumn.AppearanceHeader.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.nameGridColumn.AppearanceHeader.Options.UseFont = true; + this.nameGridColumn.Caption = "Project"; + this.nameGridColumn.FieldName = "Name"; + this.nameGridColumn.Name = "nameGridColumn"; + this.nameGridColumn.OptionsColumn.AllowEdit = false; + this.nameGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; + this.nameGridColumn.Visible = true; + this.nameGridColumn.VisibleIndex = 1; + this.nameGridColumn.Width = 137; + // + // urlGridColumn + // + this.urlGridColumn.Caption = "URL"; + this.urlGridColumn.FieldName = "Url"; + this.urlGridColumn.Name = "urlGridColumn"; + this.urlGridColumn.OptionsColumn.AllowEdit = false; + this.urlGridColumn.Width = 157; + // + // buildDetailsGridColumn + // + this.buildDetailsGridColumn.AppearanceCell.Options.UseTextOptions = true; + this.buildDetailsGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near; + this.buildDetailsGridColumn.Caption = "Details"; + this.buildDetailsGridColumn.FieldName = "buildDetailsStr"; + this.buildDetailsGridColumn.Name = "buildDetailsGridColumn"; + this.buildDetailsGridColumn.OptionsColumn.AllowEdit = false; + this.buildDetailsGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.DisplayText; + this.buildDetailsGridColumn.Visible = true; + this.buildDetailsGridColumn.VisibleIndex = 2; + this.buildDetailsGridColumn.Width = 200; + // + // lastBuildGridColumn + // + this.lastBuildGridColumn.AppearanceCell.Options.UseTextOptions = true; + this.lastBuildGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; + this.lastBuildGridColumn.Caption = "Last build"; + this.lastBuildGridColumn.FieldName = "lastBuildStr"; + this.lastBuildGridColumn.Name = "lastBuildGridColumn"; + this.lastBuildGridColumn.OptionsColumn.AllowEdit = false; + this.lastBuildGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; + this.lastBuildGridColumn.Visible = true; + this.lastBuildGridColumn.VisibleIndex = 3; + this.lastBuildGridColumn.Width = 121; + // + // lastSuccessGridColumn + // + this.lastSuccessGridColumn.AppearanceCell.Options.UseTextOptions = true; + this.lastSuccessGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; + this.lastSuccessGridColumn.Caption = "Last success"; + this.lastSuccessGridColumn.FieldName = "LastSuccessBuildStr"; + this.lastSuccessGridColumn.Name = "lastSuccessGridColumn"; + this.lastSuccessGridColumn.OptionsColumn.AllowEdit = false; + this.lastSuccessGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; + this.lastSuccessGridColumn.Visible = true; + this.lastSuccessGridColumn.VisibleIndex = 4; + this.lastSuccessGridColumn.Width = 121; + // + // lastSuccessUserGridColumn + // + this.lastSuccessUserGridColumn.Caption = "Last success user"; + this.lastSuccessUserGridColumn.FieldName = "LastSuccessUsers"; + this.lastSuccessUserGridColumn.Name = "lastSuccessUserGridColumn"; + this.lastSuccessUserGridColumn.OptionsColumn.AllowEdit = false; + this.lastSuccessUserGridColumn.Width = 57; + // + // lastFailureGridColumn + // + this.lastFailureGridColumn.AppearanceCell.Options.UseTextOptions = true; + this.lastFailureGridColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; + this.lastFailureGridColumn.Caption = "Last failure"; + this.lastFailureGridColumn.FieldName = "LastFailureBuildStr"; + this.lastFailureGridColumn.Name = "lastFailureGridColumn"; + this.lastFailureGridColumn.OptionsColumn.AllowEdit = false; + this.lastFailureGridColumn.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom; + this.lastFailureGridColumn.Visible = true; + this.lastFailureGridColumn.VisibleIndex = 5; + this.lastFailureGridColumn.Width = 124; + // + // lastFailureUserGridColumn + // + this.lastFailureUserGridColumn.Caption = "Last failure user"; + this.lastFailureUserGridColumn.FieldName = "LastFailureUsers"; + this.lastFailureUserGridColumn.Name = "lastFailureUserGridColumn"; + this.lastFailureUserGridColumn.OptionsColumn.AllowEdit = false; + this.lastFailureUserGridColumn.Visible = true; + this.lastFailureUserGridColumn.VisibleIndex = 6; + this.lastFailureUserGridColumn.Width = 65; + // + // claimedByGridColumn + // + this.claimedByGridColumn.Caption = "Claimed by"; + this.claimedByGridColumn.FieldName = "ClaimedBy"; + this.claimedByGridColumn.Name = "claimedByGridColumn"; + this.claimedByGridColumn.OptionsColumn.AllowEdit = false; + // + // claimReasonGridColumn + // + this.claimReasonGridColumn.Caption = "Claim reason"; + this.claimReasonGridColumn.FieldName = "ClaimReason"; + this.claimReasonGridColumn.Name = "claimReasonGridColumn"; + this.claimReasonGridColumn.OptionsColumn.AllowEdit = false; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(879, 412); + this.Controls.Add(this.projectsGridControl); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Name = "MainForm"; + this.Text = "Jenkins Tray"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.JenkinsTrayForm_FormClosing); + this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); + ((System.ComponentModel.ISupportInitialize)(this.barManager)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridControl)).EndInit(); + this.contextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.projectsGridView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemPictureEdit3)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraBars.BarManager barManager; + private DevExpress.XtraBars.Bar bar2; + private DevExpress.XtraBars.Bar bar3; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.XtraBars.BarButtonItem settingsButtonItem; + private DevExpress.XtraBars.BarButtonItem aboutButtonItem; + private DevExpress.XtraGrid.GridControl projectsGridControl; + private DevExpress.XtraGrid.Views.Grid.GridView projectsGridView; + private DevExpress.XtraGrid.Columns.GridColumn nameGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn urlGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn buildDetailsGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn lastBuildGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn lastSuccessGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn lastFailureGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn serverGridColumn; + private DevExpress.XtraBars.BarButtonItem refreshButtonItem; + private DevExpress.XtraBars.BarButtonItem exitButtonItem; + private DevExpress.XtraBars.BarStaticItem lastCheckBarStaticItem; + private DevExpress.XtraGrid.Columns.GridColumn statusGridColumn; + private DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit repositoryItemPictureEdit3; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem openProjectPageMenuItem; + private System.Windows.Forms.ToolStripMenuItem runBuildMenuItem; + private DevExpress.XtraBars.BarButtonItem checkUpdatesButtonItem; + private System.Windows.Forms.ToolStripMenuItem acknowledgeStatusMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem removeProjectMenuItem; + private DevExpress.XtraGrid.Columns.GridColumn lastSuccessUserGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn lastFailureUserGridColumn; + private System.Windows.Forms.ToolStripMenuItem openConsolePageMenuItem; + private DevExpress.XtraGrid.Columns.GridColumn claimedByGridColumn; + private DevExpress.XtraGrid.Columns.GridColumn claimReasonGridColumn; + private System.Windows.Forms.ToolStripMenuItem claimBuildMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem acknowledgeProjectMenuItem; + private System.Windows.Forms.ToolStripMenuItem setAuthenticationTokenMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/MainForm.cs b/JenkinsTray/UI/MainForm.cs similarity index 85% rename from HudsonTrayTracker/UI/MainForm.cs rename to JenkinsTray/UI/MainForm.cs index a891e8b..d3d71a4 100644 --- a/HudsonTrayTracker/UI/MainForm.cs +++ b/JenkinsTray/UI/MainForm.cs @@ -1,875 +1,875 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Properties; -using DevExpress.XtraGrid.Views.Base; -using System.Drawing.Imaging; -using Common.Logging; -using System.Reflection; -using DevExpress.XtraGrid.Views.Grid.ViewInfo; -using System.Diagnostics; -using Hudson.TrayTracker.Utils.Logging; -using DevExpress.Utils.Controls; -using Hudson.TrayTracker.Utils; -using DevExpress.XtraGrid.Columns; -using Spring.Context.Support; -using DevExpress.Utils; - -namespace Hudson.TrayTracker.UI -{ - public partial class MainForm : DevExpress.XtraEditors.XtraForm - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public static MainForm Instance - { - get - { - MainForm instance = (MainForm)ContextRegistry.GetContext().GetObject("MainForm"); - return instance; - } - } - - BindingList projectsDataSource; - bool exiting; - int lastHoveredDSRowIndex = -1; - IDictionary iconsByKey; - Font normalMenuItemFont; - Font mainMenuItemFont; - - public ConfigurationService ConfigurationService { get; set; } - public HudsonService HudsonService { get; set; } - public ProjectsUpdateService ProjectsUpdateService { get; set; } - public ApplicationUpdateService ApplicationUpdateService { get; set; } - - public MainForm() - { - InitializeComponent(); - normalMenuItemFont = openProjectPageMenuItem.Font; - mainMenuItemFont = new Font(openProjectPageMenuItem.Font, FontStyle.Bold); - } - - private void Initialize() - { - ConfigurationService.ConfigurationUpdated += configurationService_ConfigurationUpdated; - ProjectsUpdateService.ProjectsUpdated += updateService_ProjectsUpdated; - - Disposed += delegate - { - ConfigurationService.ConfigurationUpdated -= configurationService_ConfigurationUpdated; - ProjectsUpdateService.ProjectsUpdated -= updateService_ProjectsUpdated; - }; - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - Initialize(); - UpdateClaimPluginIntegration(); - LoadIcons(); - LoadProjects(); - } - - void configurationService_ConfigurationUpdated() - { - UpdateClaimPluginIntegration(); - LoadProjects(); - if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon == false) - ResetIcon(); - } - - private delegate void ProjectsUpdatedDelegate(); - private void updateService_ProjectsUpdated() - { - Delegate del = new ProjectsUpdatedDelegate(OnProjectsUpdated); - BeginInvoke(del); - } - private void OnProjectsUpdated() - { - UpdateProjects(); - } - - private void settingsButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - SettingsForm.Instance.ShowDialog(); - } - - private void LoadProjects() - { - projectsDataSource = new BindingList(); - - foreach (Server server in ConfigurationService.Servers) - { - foreach (Project project in server.Projects) - { - ProjectWrapper wrapper = new ProjectWrapper(project); - projectsDataSource.Add(wrapper); - } - } - - projectsGridControl.DataSource = projectsDataSource; - projectsGridView.BestFitColumns(); - - UpdateStatusBar(); - } - - private void UpdateProjects() - { - projectsGridView.RefreshData(); - - UpdateStatusBar(); - } - - private void UpdateStatusBar() - { - lastCheckBarStaticItem.Caption = string.Format(HudsonTrayTrackerResources.LastCheck_Format, DateTime.Now); - } - - private void refreshButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - ProjectsUpdateService.UpdateProjects(); - } - - private void HudsonTrayTrackerForm_FormClosing(object sender, FormClosingEventArgs e) - { - if (exiting == false && e.CloseReason == CloseReason.UserClosing) - { - Hide(); - e.Cancel = true; - } - } - - public void Exit() - { - exiting = true; - Close(); - Application.Exit(); - } - - private void exitButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - Exit(); - } - - private void projectsGridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) - { - if (e.IsGetData) - { - if (e.Column == statusGridColumn) - { - ProjectWrapper projectWrapper = (ProjectWrapper)projectsDataSource[e.ListSourceRowIndex]; - byte[] imgBytes = iconsByKey[projectWrapper.Project.Status.Key]; - e.Value = imgBytes; - } - } - } - - private void LoadIcons() - { - iconsByKey = new Dictionary(); - - foreach (BuildStatusEnum statusValue in Enum.GetValues(typeof(BuildStatusEnum))) - { - LoadIcon(statusValue, false, false); - LoadIcon(statusValue, false, true); - LoadIcon(statusValue, true, false); - } - } - - private void LoadIcon(BuildStatusEnum statusValue, bool isInProgress, bool isStuck) - { - BuildStatus status = new BuildStatus(statusValue, isInProgress, isStuck); - if (iconsByKey.ContainsKey(status.Key)) - return; - - try - { - string resourceName = string.Format("Hudson.TrayTracker.Resources.StatusIcons.{0}.gif", status.Key); - Image img = ResourceImageHelper.CreateImageFromResources(resourceName, GetType().Assembly); - byte[] imgBytes = DevExpress.XtraEditors.Controls.ByteImageConverter.ToByteArray(img, ImageFormat.Gif); - iconsByKey.Add(status.Key, imgBytes); - } - catch (Exception ex) - { - XtraMessageBox.Show(HudsonTrayTrackerResources.FailedLoadingIcons_Text, - HudsonTrayTrackerResources.FailedLoadingIcons_Caption, - MessageBoxButtons.OK, MessageBoxIcon.Error); - LoggingHelper.LogError(logger, ex); - throw new Exception("Failed loading icon: " + status, ex); - } - } - - private void aboutButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - AboutForm.Instance.ShowDialog(); - } - - private void projectsGridView_MouseMove(object sender, MouseEventArgs e) - { - Point pt = new Point(e.X, e.Y); - GridHitInfo ghi = projectsGridView.CalcHitInfo(pt); - if (ghi.InRow) - { - int dsRowIndex = projectsGridView.GetDataSourceRowIndex(ghi.RowHandle); - if (lastHoveredDSRowIndex != dsRowIndex) - { - ProjectWrapper project = projectsDataSource[dsRowIndex]; - string message = HudsonTrayTrackerResources.ResourceManager - .GetString("BuildStatus_" + project.Project.Status.Key); - if (project.Project.Status.IsStuck && project.Project.Queue.InQueue) - { - message += string.Format(HudsonTrayTrackerResources.BuildDetails_InQueue_Since, project.Project.Queue.InQueueSince); - } - toolTip.SetToolTip(projectsGridControl, message); - } - lastHoveredDSRowIndex = dsRowIndex; - } - else - { - lastHoveredDSRowIndex = -1; - } - } - - private void projectsGridView_DoubleClick(object sender, EventArgs e) - { - Project project = GetSelectedProject(); - if (project == null) - return; - bool shouldOpenConsolePage = ShouldOpenConsolePage(project); - if (shouldOpenConsolePage) - OpenProjectConsolePage(project); - else - OpenProjectPage(project); - } - - private bool ShouldOpenConsolePage(Project project) - { - if (project == null) - return false; - BuildStatus status = project.Status; - bool res = BuildStatusUtils.IsErrorBuild(status) || status.IsInProgress; - return res; - } - - private void OpenSelectedProjectPage() - { - Project project = GetSelectedProject(); - OpenProjectPage(project); - } - - private void OpenProjectPage(Project project) - { - if (project == null) - return; - UIUtils.OpenWebPage(project.Url, logger); - } - - private void OpenSelectedProjectConsolePage() - { - Project project = GetSelectedProject(); - OpenProjectConsolePage(project); - } - - private void OpenProjectConsolePage(Project project) - { - if (project == null) - return; - string url = HudsonService.GetConsolePage(project); - UIUtils.OpenWebPage(url, logger); - } - - private class ProjectWrapper - { - public ProjectWrapper(Project project) - { - this.Project = project; - } - - public Project Project { get; private set; } - - public string Server - { - get { return Project.Server.DisplayText; } - } - public string Name - { - get { return Project.Name; } - } - public string Url - { - get { return Uri.UnescapeDataString(Project.Url); } - } - - public string buildDetailsStr - { - get - { - string details = string.Empty; - try - { - details = FormatBuildDetailsAndSummary(); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - XtraMessageBox.Show(string.Format(HudsonTrayTrackerResources.RunBuildFailed_Text, ex.Message), - HudsonTrayTrackerResources.RunBuildFailed_Caption); - } - return details; - } - } - public string lastBuildStr - { - get { return FormatBuildDetails(LastBuild); } - } - - public BuildDetails LastBuild - { - get { return Project.LastBuild; } - } - - public BuildDetails LastSuccessBuild - { - get { return Project.LastSuccessfulBuild; } - } - public string LastSuccessBuildStr - { - get { return FormatBuildDetails(LastSuccessBuild); } - } - public BuildDetails LastFailureBuild - { - get { return Project.LastFailedBuild; } - } - public string LastFailureBuildStr - { - get { return FormatBuildDetails(LastFailureBuild); } - } - public string LastSuccessUsers - { - get { return FormatUsers(Project.LastSuccessfulBuild); } - } - public string LastFailureUsers - { - get { return FormatUsers(Project.LastFailedBuild); } - } - public string ClaimedBy - { - get - { - // get a copy of the reference to avoid a race condition - var lastFailedBuild = Project.LastFailedBuild; - if (lastFailedBuild == null || lastFailedBuild.ClaimDetails == null) - return ""; - return Project.LastFailedBuild.ClaimDetails.User; - } - } - public string ClaimReason - { - get - { - // get a copy of the reference to avoid a race condition - var lastFailedBuild = Project.LastFailedBuild; - if (lastFailedBuild == null || lastFailedBuild.ClaimDetails == null) - return ""; - return Project.LastFailedBuild.ClaimDetails.Reason; - } - } - - private string FormatBuildDetailsAndSummary() - { - string details = string.Empty; - string buildCausesSummary = string.Empty; - - // get a copy of the reference to avoid a race condition - BuildStatus projectStatus = Project.Status; - BuildDetails lastBuild = Project.LastBuild; - - if (lastBuild != null) - { - // get a copy of the reference to avoid a race condition - BuildCauses lastBuildCauses = lastBuild.Causes; - - if (lastBuildCauses != null) - { - if (projectStatus.IsInProgress) - { - TimeSpan progressts = lastBuild.EstimatedDuration; - string timeleft = FormatEstimatedDuration(lastBuild); - - foreach (BuildCause cause in lastBuildCauses.Causes) - { - if (lastBuildCauses.HasUniqueCauses == false) - { - buildCausesSummary = HudsonTrayTrackerResources.BuildDetails_Cause_MultipleSources; - break; - } - - switch (cause.Cause) - { - case BuildCauseEnum.SCM: - { - if (lastBuild.Users.Count == 0) - { - buildCausesSummary = HudsonTrayTrackerResources.BuildDetails_Cause_SCM; - } - else if (lastBuild.Users.Count > 1) - { - buildCausesSummary = string.Format(HudsonTrayTrackerResources.BuildDetails_Cause_SCM_Multiple, lastBuild.Users.Count); - } - else - { - buildCausesSummary = string.Format(HudsonTrayTrackerResources.BuildDetails_Cause_SCM_Single, FormatUsers(lastBuild)); - } - } - break; - case BuildCauseEnum.User: - { - buildCausesSummary = string.Format(HudsonTrayTrackerResources.BuildDetails_Cause_User, cause.Starter); - } - break; - case BuildCauseEnum.RemoteHost: - { - buildCausesSummary = HudsonTrayTrackerResources.BuildDetails_Cause_RemoteHost; - } - break; - case BuildCauseEnum.Timer: - { - buildCausesSummary = HudsonTrayTrackerResources.BuildDetails_Cause_Timer; - } - break; - case BuildCauseEnum.UpstreamProject: - { - buildCausesSummary = HudsonTrayTrackerResources.BuildDetails_Cause_UpstreamProject; - } - break; - } - } - details = timeleft + buildCausesSummary; - } - else - { - if (projectStatus.Value == BuildStatusEnum.Successful) - { - details = FormatDuration(lastBuild); - } - else if (projectStatus.Value == BuildStatusEnum.Disabled) - { - details = string.Format("{0}. ", HudsonTrayTrackerResources.BuildStatus_Disabled); - } - else - { - details = projectStatus.Value.ToString() + ". "; - if (lastBuild.Users != null && !lastBuild.Users.IsEmpty) - { - details += string.Format(HudsonTrayTrackerResources.BuildDetails_BrokenBy, FormatUsers(lastBuild)); - } - } - } - if (Project.Queue.InQueue) - { - if (!projectStatus.IsInProgress) - { - details += string.Format(HudsonTrayTrackerResources.BuildDetails_InQueue_Why, Project.Queue.Why); - } - } - if (projectStatus.IsStuck) - { - details = "Queued, possibly stuck. " + string.Format(HudsonTrayTrackerResources.BuildDetails_InQueue_Why, Project.Queue.Why); - } - } - } - - return details; - } - - private string FormatBuildDetailsWithDisplayName(BuildDetails details) - { - if (details == null) - return "-"; - string shortDisplayName = details.DisplayName.Replace(Project.Name, string.Empty).Trim(); - - string res = string.Empty; - if (shortDisplayName.Equals(string.Concat("#", details.Number.ToString()))) - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_Format_NumberDate, - details.Number.ToString(), details.Time.ToLocalTime()); - } - else - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_Format_DisplayName_NumberDate, - shortDisplayName, details.Number.ToString(), details.Time.ToLocalTime()); - } - return res; - } - - private string FormatBuildDetails(BuildDetails details) - { - if (details == null) - return "-"; - string res = string.Format(HudsonTrayTrackerResources.BuildDetails_Format_NumberDate, - details.Number, details.Time.ToLocalTime()); - return res; - } - - private string FormatUsers(BuildDetails details) - { - if (details == null) - return "-"; - string res = StringUtils.Join(details.Users, HudsonTrayTrackerResources.BuildDetails_UserSeparator); - return res; - } - - private string FormatDuration(BuildDetails details) - { - if (details == null) - return string.Empty; - string res = string.Empty; - if (details.Duration.TotalHours > 1) - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_Duration_HHMM, - details.Duration.Days * 24 + details.Duration.Hours, details.Duration.Minutes); - } - else if (details.Duration.TotalMinutes < 1) - { - res = HudsonTrayTrackerResources.BuildDetails_Duration_0M; - } - else - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_Duration_MM, - Math.Max(details.Duration.Minutes + (details.Duration.Seconds >= 30 ? 1 : 0), 1)); - } - return res; - } - - private string FormatEstimatedDuration(BuildDetails details) - { - if (details == null) - return string.Empty; - string res = string.Empty; - DateTime endtime = details.Time.Add(details.EstimatedDuration); - TimeSpan timeleft = TimeSpan.FromTicks(endtime.Subtract(DateTime.UtcNow).Ticks); - - if (timeleft.TotalHours >= 1) - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_EstimatedDuration_HHMM_Remaining, - timeleft.Days * 24 + timeleft.Hours, timeleft.Minutes); - } - else if (timeleft.TotalHours < -1) - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_EstimatedDuration_HHMM_LongerThanUsual, - Math.Abs(timeleft.Days * 24 + timeleft.Hours), Math.Abs(timeleft.Minutes)); - } - else if (timeleft.TotalHours < 0) - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_EstimatedDuration_MM_LongerThanUsual, - Math.Abs(timeleft.Minutes)); - } - else - { - res = string.Format(HudsonTrayTrackerResources.BuildDetails_EstimatedDuration_MM_Remaining, - timeleft.Minutes); - } - return res; - } - } - - private void openProjectPageMenuItem_Click(object sender, EventArgs e) - { - OpenSelectedProjectPage(); - } - - private void openConsolePageMenuItem_Click(object sender, EventArgs e) - { - OpenSelectedProjectConsolePage(); - } - - private void runBuildMenuItem_Click(object sender, EventArgs e) - { - Project project = GetSelectedProject(); - if (project == null) - return; - try - { - HudsonService.SafeRunBuild(project); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - XtraMessageBox.Show(string.Format(HudsonTrayTrackerResources.RunBuildFailed_Text, ex.Message), - HudsonTrayTrackerResources.RunBuildFailed_Caption); - } - } - - private Project GetSelectedProject() - { - int[] rowHandles = projectsGridView.GetSelectedRows(); - if (rowHandles.Length != 1) - return null; - int rowHandle = rowHandles[0]; - int dsRowIndex = projectsGridView.GetDataSourceRowIndex(rowHandle); - ProjectWrapper projectWrapper = projectsDataSource[dsRowIndex]; - return projectWrapper.Project; - } - - public static void ShowOrFocus() - { - if (Instance.WindowState == FormWindowState.Minimized) - PInvokeUtils.RestoreForm(Instance); - else if (Instance.Visible) - Instance.Activate(); - else - Instance.Show(); - } - - private void checkUpdatesButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - bool hasUpdates; - try - { - hasUpdates = ApplicationUpdateService.CheckForUpdates_Synchronous( - ApplicationUpdateService.UpdateSource.User); - } - catch (Exception ex) - { - string errorMessage = String.Format(HudsonTrayTrackerResources.ErrorBoxMessage, ex.Message); - XtraMessageBox.Show(errorMessage, HudsonTrayTrackerResources.ErrorBoxCaption, - MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - if (hasUpdates == false) - { - XtraMessageBox.Show(HudsonTrayTrackerResources.ApplicationUpdates_NoUpdate_Text, - HudsonTrayTrackerResources.ApplicationUpdates_Caption, - MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - private void acknowledgeMenuItem_Click(object sender, EventArgs e) - { - ToolStripMenuItem menuItem = sender as ToolStripMenuItem; - Project project = GetSelectedProject(); - if (project == null) - return; - - if (menuItem.Checked) - { - TrayNotifier.Instance.ClearAcknowledgedStatus(project); - } - else - { - BuildStatus projectStatus = project.Status; - if (projectStatus.IsStuck || projectStatus.Value >= BuildStatusEnum.Indeterminate) - TrayNotifier.Instance.AcknowledgeStatus(project, projectStatus); - } - menuItem.Checked = !menuItem.Checked; - } - - private void stopAcknowledgingMenuItem_Click(object sender, EventArgs e) - { - Project project = GetSelectedProject(); - if (project == null) - return; - TrayNotifier.Instance.ClearAcknowledgedStatus(project); - } - - private void contextMenuStrip_Opening(object sender, CancelEventArgs e) - { - Project project = GetSelectedProject(); - bool isProjectSelected = project != null; - - if (project == null) - { - openProjectPageMenuItem.Enabled - = openConsolePageMenuItem.Enabled - = runBuildMenuItem.Enabled - = acknowledgeStatusMenuItem.Enabled - = claimBuildMenuItem.Enabled - = acknowledgeProjectMenuItem.Enabled - = false; - return; - } - - // get a copy of the reference to avoid a race condition - BuildStatus projectStatus = project.Status; - - acknowledgeProjectMenuItem.Checked = project.IsAcknowledged; - acknowledgeStatusMenuItem.Checked = TrayNotifier.Instance.IsStatusAcknowledged(project); - if (acknowledgeProjectMenuItem.Checked) - { - acknowledgeStatusMenuItem.Enabled = false; - } - else - { - acknowledgeStatusMenuItem.Enabled = ( projectStatus.IsStuck || projectStatus.Value >= BuildStatusEnum.Indeterminate ); - } - - bool shouldOpenConsolePage = ShouldOpenConsolePage(project); - if (shouldOpenConsolePage) - { - openProjectPageMenuItem.Font = normalMenuItemFont; - openConsolePageMenuItem.Font = mainMenuItemFont; - } - else - { - openConsolePageMenuItem.Font = normalMenuItemFont; - openProjectPageMenuItem.Font = mainMenuItemFont; - } - - // Claim - claimBuildMenuItem.Visible - = toolStripSeparator2.Visible - = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; - claimBuildMenuItem.Enabled - = toolStripSeparator2.Enabled - = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin && project.LastFailedBuild != null; - } - - private void removeProjectMenuItem_Click(object sender, EventArgs e) - { - Project project = GetSelectedProject(); - if (project == null) - return; - ConfigurationService.RemoveProject(project); - } - - private void claimBuildMenuItem_Click(object sender, EventArgs e) - { - Project project = GetSelectedProject(); - if (project == null) - return; - BuildDetails lastFailedBuild = project.LastFailedBuild; - if (lastFailedBuild == null) - return; - - var form = new ClaimBuildForm(); - form.Initialize(project, lastFailedBuild); - - var res = form.ShowDialog(); - if (res != DialogResult.OK) - return; - } - - private void projectsGridView_CustomColumnSort(object sender, CustomColumnSortEventArgs e) - { - int? res = DoCustomColumnSort(sender, e); - if (res == null) - return; - e.Handled = true; - e.Result = res.Value; - } - - private int? DoCustomColumnSort(object sender, CustomColumnSortEventArgs e) - { - DateTime? date1 = GetBuildDate(e.Column, e.ListSourceRowIndex1); - DateTime? date2 = GetBuildDate(e.Column, e.ListSourceRowIndex2); - if (date1 == null && date2 == null) - return null; - if (date1 == null) - return -1; - if (date2 == null) - return 1; - int res = date1.Value.CompareTo(date2.Value); - return res; - } - - private DateTime? GetBuildDate(GridColumn column, int listSourceRowIndex) - { - BuildDetails buildDetails = GetBuildDetails(column, listSourceRowIndex); - if (buildDetails == null) - return null; - return buildDetails.Time; - } - - private BuildDetails GetBuildDetails(GridColumn column, int listSourceRowIndex) - { - ProjectWrapper projectWrapper = (ProjectWrapper)projectsDataSource[listSourceRowIndex]; - if (column == lastSuccessGridColumn) - return projectWrapper.LastSuccessBuild; - if (column == lastFailureGridColumn) - return projectWrapper.LastFailureBuild; - if (column == lastBuildGridColumn) - return projectWrapper.LastBuild; - throw new Exception("Column not supported: " + column.Caption); - } - - private void MainForm_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.F5) - ProjectsUpdateService.UpdateProjects(); - } - - private delegate void UpdateIconDelegate(Icon icon); - public void UpdateIcon(Icon icon) - { - if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon == false) - return; - - if (InvokeRequired) - { - Delegate del = new UpdateIconDelegate(UpdateIcon); - MainForm.Instance.BeginInvoke(del, icon); - return; - } - - this.Icon = icon; - } - - private void ResetIcon() - { - // copied from the designer code - ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm)); - this.Icon = ((Icon)(resources.GetObject("$this.Icon"))); - } - - private void UpdateClaimPluginIntegration() - { - bool integrate = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; - if (integrate) - { - if (claimedByGridColumn.VisibleIndex == -1) - { - claimedByGridColumn.Visible = true; - claimedByGridColumn.VisibleIndex = projectsGridView.Columns.Count - 2; - } - if (claimReasonGridColumn.VisibleIndex == -1) - { - claimReasonGridColumn.Visible = true; - claimReasonGridColumn.VisibleIndex = 8; - } - } - else - { - claimedByGridColumn.Visible = false; - claimReasonGridColumn.Visible = false; - } - } - - private void acknowledgeProjectMenuItem_Click(object sender, EventArgs e) - { - ToolStripMenuItem menuItem = sender as ToolStripMenuItem; - Project project = GetSelectedProject(); - if (project == null) - return; - - menuItem.Checked = project.IsAcknowledged = !menuItem.Checked; - TrayNotifier.Instance.AcknowledgedProject(); - } - - private void setAuthenticationTokenMenuItem_Click(object sender, EventArgs e) - { - ToolStripMenuItem menuItem = sender as ToolStripMenuItem; - Project project = GetSelectedProject(); - if (project == null) - return; - - AuthenticationTokenForm.ShowDialogOrFocus(project); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Properties; +using DevExpress.XtraGrid.Views.Base; +using System.Drawing.Imaging; +using Common.Logging; +using System.Reflection; +using DevExpress.XtraGrid.Views.Grid.ViewInfo; +using System.Diagnostics; +using Jenkins.Tray.Utils.Logging; +using DevExpress.Utils.Controls; +using Jenkins.Tray.Utils; +using DevExpress.XtraGrid.Columns; +using Spring.Context.Support; +using DevExpress.Utils; + +namespace Jenkins.Tray.UI +{ + public partial class MainForm : DevExpress.XtraEditors.XtraForm + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public static MainForm Instance + { + get + { + MainForm instance = (MainForm)ContextRegistry.GetContext().GetObject("MainForm"); + return instance; + } + } + + BindingList projectsDataSource; + bool exiting; + int lastHoveredDSRowIndex = -1; + IDictionary iconsByKey; + Font normalMenuItemFont; + Font mainMenuItemFont; + + public ConfigurationService ConfigurationService { get; set; } + public JenkinsService JenkinsService { get; set; } + public ProjectsUpdateService ProjectsUpdateService { get; set; } + public ApplicationUpdateService ApplicationUpdateService { get; set; } + + public MainForm() + { + InitializeComponent(); + normalMenuItemFont = openProjectPageMenuItem.Font; + mainMenuItemFont = new Font(openProjectPageMenuItem.Font, FontStyle.Bold); + } + + private void Initialize() + { + ConfigurationService.ConfigurationUpdated += configurationService_ConfigurationUpdated; + ProjectsUpdateService.ProjectsUpdated += updateService_ProjectsUpdated; + + Disposed += delegate + { + ConfigurationService.ConfigurationUpdated -= configurationService_ConfigurationUpdated; + ProjectsUpdateService.ProjectsUpdated -= updateService_ProjectsUpdated; + }; + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + Initialize(); + UpdateClaimPluginIntegration(); + LoadIcons(); + LoadProjects(); + } + + void configurationService_ConfigurationUpdated() + { + UpdateClaimPluginIntegration(); + LoadProjects(); + if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon == false) + ResetIcon(); + } + + private delegate void ProjectsUpdatedDelegate(); + private void updateService_ProjectsUpdated() + { + Delegate del = new ProjectsUpdatedDelegate(OnProjectsUpdated); + BeginInvoke(del); + } + private void OnProjectsUpdated() + { + UpdateProjects(); + } + + private void settingsButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + SettingsForm.Instance.ShowDialog(); + } + + private void LoadProjects() + { + projectsDataSource = new BindingList(); + + foreach (Server server in ConfigurationService.Servers) + { + foreach (Project project in server.Projects) + { + ProjectWrapper wrapper = new ProjectWrapper(project); + projectsDataSource.Add(wrapper); + } + } + + projectsGridControl.DataSource = projectsDataSource; + projectsGridView.BestFitColumns(); + + UpdateStatusBar(); + } + + private void UpdateProjects() + { + projectsGridView.RefreshData(); + + UpdateStatusBar(); + } + + private void UpdateStatusBar() + { + lastCheckBarStaticItem.Caption = string.Format(JenkinsTrayResources.LastCheck_Format, DateTime.Now); + } + + private void refreshButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + ProjectsUpdateService.UpdateProjects(); + } + + private void JenkinsTrayForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (exiting == false && e.CloseReason == CloseReason.UserClosing) + { + Hide(); + e.Cancel = true; + } + } + + public void Exit() + { + exiting = true; + Close(); + Application.Exit(); + } + + private void exitButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + Exit(); + } + + private void projectsGridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) + { + if (e.IsGetData) + { + if (e.Column == statusGridColumn) + { + ProjectWrapper projectWrapper = (ProjectWrapper)projectsDataSource[e.ListSourceRowIndex]; + byte[] imgBytes = iconsByKey[projectWrapper.Project.Status.Key]; + e.Value = imgBytes; + } + } + } + + private void LoadIcons() + { + iconsByKey = new Dictionary(); + + foreach (BuildStatusEnum statusValue in Enum.GetValues(typeof(BuildStatusEnum))) + { + LoadIcon(statusValue, false, false); + LoadIcon(statusValue, false, true); + LoadIcon(statusValue, true, false); + } + } + + private void LoadIcon(BuildStatusEnum statusValue, bool isInProgress, bool isStuck) + { + BuildStatus status = new BuildStatus(statusValue, isInProgress, isStuck); + if (iconsByKey.ContainsKey(status.Key)) + return; + + try + { + string resourceName = string.Format("Jenkins.Tray.Resources.StatusIcons.{0}.gif", status.Key); + Image img = ResourceImageHelper.CreateImageFromResources(resourceName, GetType().Assembly); + byte[] imgBytes = DevExpress.XtraEditors.Controls.ByteImageConverter.ToByteArray(img, ImageFormat.Gif); + iconsByKey.Add(status.Key, imgBytes); + } + catch (Exception ex) + { + XtraMessageBox.Show(JenkinsTrayResources.FailedLoadingIcons_Text, + JenkinsTrayResources.FailedLoadingIcons_Caption, + MessageBoxButtons.OK, MessageBoxIcon.Error); + LoggingHelper.LogError(logger, ex); + throw new Exception("Failed loading icon: " + status, ex); + } + } + + private void aboutButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + AboutForm.Instance.ShowDialog(); + } + + private void projectsGridView_MouseMove(object sender, MouseEventArgs e) + { + Point pt = new Point(e.X, e.Y); + GridHitInfo ghi = projectsGridView.CalcHitInfo(pt); + if (ghi.InRow) + { + int dsRowIndex = projectsGridView.GetDataSourceRowIndex(ghi.RowHandle); + if (lastHoveredDSRowIndex != dsRowIndex) + { + ProjectWrapper project = projectsDataSource[dsRowIndex]; + string message = JenkinsTrayResources.ResourceManager + .GetString("BuildStatus_" + project.Project.Status.Key); + if (project.Project.Status.IsStuck && project.Project.Queue.InQueue) + { + message += string.Format(JenkinsTrayResources.BuildDetails_InQueue_Since, project.Project.Queue.InQueueSince); + } + toolTip.SetToolTip(projectsGridControl, message); + } + lastHoveredDSRowIndex = dsRowIndex; + } + else + { + lastHoveredDSRowIndex = -1; + } + } + + private void projectsGridView_DoubleClick(object sender, EventArgs e) + { + Project project = GetSelectedProject(); + if (project == null) + return; + bool shouldOpenConsolePage = ShouldOpenConsolePage(project); + if (shouldOpenConsolePage) + OpenProjectConsolePage(project); + else + OpenProjectPage(project); + } + + private bool ShouldOpenConsolePage(Project project) + { + if (project == null) + return false; + BuildStatus status = project.Status; + bool res = BuildStatusUtils.IsErrorBuild(status) || status.IsInProgress; + return res; + } + + private void OpenSelectedProjectPage() + { + Project project = GetSelectedProject(); + OpenProjectPage(project); + } + + private void OpenProjectPage(Project project) + { + if (project == null) + return; + UIUtils.OpenWebPage(project.Url, logger); + } + + private void OpenSelectedProjectConsolePage() + { + Project project = GetSelectedProject(); + OpenProjectConsolePage(project); + } + + private void OpenProjectConsolePage(Project project) + { + if (project == null) + return; + string url = JenkinsService.GetConsolePage(project); + UIUtils.OpenWebPage(url, logger); + } + + private class ProjectWrapper + { + public ProjectWrapper(Project project) + { + this.Project = project; + } + + public Project Project { get; private set; } + + public string Server + { + get { return Project.Server.DisplayText; } + } + public string Name + { + get { return Project.Name; } + } + public string Url + { + get { return Uri.UnescapeDataString(Project.Url); } + } + + public string buildDetailsStr + { + get + { + string details = string.Empty; + try + { + details = FormatBuildDetailsAndSummary(); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + XtraMessageBox.Show(string.Format(JenkinsTrayResources.RunBuildFailed_Text, ex.Message), + JenkinsTrayResources.RunBuildFailed_Caption); + } + return details; + } + } + public string lastBuildStr + { + get { return FormatBuildDetails(LastBuild); } + } + + public BuildDetails LastBuild + { + get { return Project.LastBuild; } + } + + public BuildDetails LastSuccessBuild + { + get { return Project.LastSuccessfulBuild; } + } + public string LastSuccessBuildStr + { + get { return FormatBuildDetails(LastSuccessBuild); } + } + public BuildDetails LastFailureBuild + { + get { return Project.LastFailedBuild; } + } + public string LastFailureBuildStr + { + get { return FormatBuildDetails(LastFailureBuild); } + } + public string LastSuccessUsers + { + get { return FormatUsers(Project.LastSuccessfulBuild); } + } + public string LastFailureUsers + { + get { return FormatUsers(Project.LastFailedBuild); } + } + public string ClaimedBy + { + get + { + // get a copy of the reference to avoid a race condition + var lastFailedBuild = Project.LastFailedBuild; + if (lastFailedBuild == null || lastFailedBuild.ClaimDetails == null) + return ""; + return Project.LastFailedBuild.ClaimDetails.User; + } + } + public string ClaimReason + { + get + { + // get a copy of the reference to avoid a race condition + var lastFailedBuild = Project.LastFailedBuild; + if (lastFailedBuild == null || lastFailedBuild.ClaimDetails == null) + return ""; + return Project.LastFailedBuild.ClaimDetails.Reason; + } + } + + private string FormatBuildDetailsAndSummary() + { + string details = string.Empty; + string buildCausesSummary = string.Empty; + + // get a copy of the reference to avoid a race condition + BuildStatus projectStatus = Project.Status; + BuildDetails lastBuild = Project.LastBuild; + + if (lastBuild != null) + { + // get a copy of the reference to avoid a race condition + BuildCauses lastBuildCauses = lastBuild.Causes; + + if (lastBuildCauses != null) + { + if (projectStatus.IsInProgress) + { + TimeSpan progressts = lastBuild.EstimatedDuration; + string timeleft = FormatEstimatedDuration(lastBuild); + + foreach (BuildCause cause in lastBuildCauses.Causes) + { + if (lastBuildCauses.HasUniqueCauses == false) + { + buildCausesSummary = JenkinsTrayResources.BuildDetails_Cause_MultipleSources; + break; + } + + switch (cause.Cause) + { + case BuildCauseEnum.SCM: + { + if (lastBuild.Users.Count == 0) + { + buildCausesSummary = JenkinsTrayResources.BuildDetails_Cause_SCM; + } + else if (lastBuild.Users.Count > 1) + { + buildCausesSummary = string.Format(JenkinsTrayResources.BuildDetails_Cause_SCM_Multiple, lastBuild.Users.Count); + } + else + { + buildCausesSummary = string.Format(JenkinsTrayResources.BuildDetails_Cause_SCM_Single, FormatUsers(lastBuild)); + } + } + break; + case BuildCauseEnum.User: + { + buildCausesSummary = string.Format(JenkinsTrayResources.BuildDetails_Cause_User, cause.Starter); + } + break; + case BuildCauseEnum.RemoteHost: + { + buildCausesSummary = JenkinsTrayResources.BuildDetails_Cause_RemoteHost; + } + break; + case BuildCauseEnum.Timer: + { + buildCausesSummary = JenkinsTrayResources.BuildDetails_Cause_Timer; + } + break; + case BuildCauseEnum.UpstreamProject: + { + buildCausesSummary = JenkinsTrayResources.BuildDetails_Cause_UpstreamProject; + } + break; + } + } + details = timeleft + buildCausesSummary; + } + else + { + if (projectStatus.Value == BuildStatusEnum.Successful) + { + details = FormatDuration(lastBuild); + } + else if (projectStatus.Value == BuildStatusEnum.Disabled) + { + details = string.Format("{0}. ", JenkinsTrayResources.BuildStatus_Disabled); + } + else + { + details = projectStatus.Value.ToString() + ". "; + if (lastBuild.Users != null && !lastBuild.Users.IsEmpty) + { + details += string.Format(JenkinsTrayResources.BuildDetails_BrokenBy, FormatUsers(lastBuild)); + } + } + } + if (Project.Queue.InQueue) + { + if (!projectStatus.IsInProgress) + { + details += string.Format(JenkinsTrayResources.BuildDetails_InQueue_Why, Project.Queue.Why); + } + } + if (projectStatus.IsStuck) + { + details = "Queued, possibly stuck. " + string.Format(JenkinsTrayResources.BuildDetails_InQueue_Why, Project.Queue.Why); + } + } + } + + return details; + } + + private string FormatBuildDetailsWithDisplayName(BuildDetails details) + { + if (details == null) + return "-"; + string shortDisplayName = details.DisplayName.Replace(Project.Name, string.Empty).Trim(); + + string res = string.Empty; + if (shortDisplayName.Equals(string.Concat("#", details.Number.ToString()))) + { + res = string.Format(JenkinsTrayResources.BuildDetails_Format_NumberDate, + details.Number.ToString(), details.Time.ToLocalTime()); + } + else + { + res = string.Format(JenkinsTrayResources.BuildDetails_Format_DisplayName_NumberDate, + shortDisplayName, details.Number.ToString(), details.Time.ToLocalTime()); + } + return res; + } + + private string FormatBuildDetails(BuildDetails details) + { + if (details == null) + return "-"; + string res = string.Format(JenkinsTrayResources.BuildDetails_Format_NumberDate, + details.Number, details.Time.ToLocalTime()); + return res; + } + + private string FormatUsers(BuildDetails details) + { + if (details == null) + return "-"; + string res = StringUtils.Join(details.Users, JenkinsTrayResources.BuildDetails_UserSeparator); + return res; + } + + private string FormatDuration(BuildDetails details) + { + if (details == null) + return string.Empty; + string res = string.Empty; + if (details.Duration.TotalHours > 1) + { + res = string.Format(JenkinsTrayResources.BuildDetails_Duration_HHMM, + details.Duration.Days * 24 + details.Duration.Hours, details.Duration.Minutes); + } + else if (details.Duration.TotalMinutes < 1) + { + res = JenkinsTrayResources.BuildDetails_Duration_0M; + } + else + { + res = string.Format(JenkinsTrayResources.BuildDetails_Duration_MM, + Math.Max(details.Duration.Minutes + (details.Duration.Seconds >= 30 ? 1 : 0), 1)); + } + return res; + } + + private string FormatEstimatedDuration(BuildDetails details) + { + if (details == null) + return string.Empty; + string res = string.Empty; + DateTime endtime = details.Time.Add(details.EstimatedDuration); + TimeSpan timeleft = TimeSpan.FromTicks(endtime.Subtract(DateTime.UtcNow).Ticks); + + if (timeleft.TotalHours >= 1) + { + res = string.Format(JenkinsTrayResources.BuildDetails_EstimatedDuration_HHMM_Remaining, + timeleft.Days * 24 + timeleft.Hours, timeleft.Minutes); + } + else if (timeleft.TotalHours < -1) + { + res = string.Format(JenkinsTrayResources.BuildDetails_EstimatedDuration_HHMM_LongerThanUsual, + Math.Abs(timeleft.Days * 24 + timeleft.Hours), Math.Abs(timeleft.Minutes)); + } + else if (timeleft.TotalHours < 0) + { + res = string.Format(JenkinsTrayResources.BuildDetails_EstimatedDuration_MM_LongerThanUsual, + Math.Abs(timeleft.Minutes)); + } + else + { + res = string.Format(JenkinsTrayResources.BuildDetails_EstimatedDuration_MM_Remaining, + timeleft.Minutes); + } + return res; + } + } + + private void openProjectPageMenuItem_Click(object sender, EventArgs e) + { + OpenSelectedProjectPage(); + } + + private void openConsolePageMenuItem_Click(object sender, EventArgs e) + { + OpenSelectedProjectConsolePage(); + } + + private void runBuildMenuItem_Click(object sender, EventArgs e) + { + Project project = GetSelectedProject(); + if (project == null) + return; + try + { + JenkinsService.SafeRunBuild(project); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + XtraMessageBox.Show(string.Format(JenkinsTrayResources.RunBuildFailed_Text, ex.Message), + JenkinsTrayResources.RunBuildFailed_Caption); + } + } + + private Project GetSelectedProject() + { + int[] rowHandles = projectsGridView.GetSelectedRows(); + if (rowHandles.Length != 1) + return null; + int rowHandle = rowHandles[0]; + int dsRowIndex = projectsGridView.GetDataSourceRowIndex(rowHandle); + ProjectWrapper projectWrapper = projectsDataSource[dsRowIndex]; + return projectWrapper.Project; + } + + public static void ShowOrFocus() + { + if (Instance.WindowState == FormWindowState.Minimized) + PInvokeUtils.RestoreForm(Instance); + else if (Instance.Visible) + Instance.Activate(); + else + Instance.Show(); + } + + private void checkUpdatesButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + bool hasUpdates; + try + { + hasUpdates = ApplicationUpdateService.CheckForUpdates_Synchronous( + ApplicationUpdateService.UpdateSource.User); + } + catch (Exception ex) + { + string errorMessage = String.Format(JenkinsTrayResources.ErrorBoxMessage, ex.Message); + XtraMessageBox.Show(errorMessage, JenkinsTrayResources.ErrorBoxCaption, + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (hasUpdates == false) + { + XtraMessageBox.Show(JenkinsTrayResources.ApplicationUpdates_NoUpdate_Text, + JenkinsTrayResources.ApplicationUpdates_Caption, + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void acknowledgeMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem menuItem = sender as ToolStripMenuItem; + Project project = GetSelectedProject(); + if (project == null) + return; + + if (menuItem.Checked) + { + TrayNotifier.Instance.ClearAcknowledgedStatus(project); + } + else + { + BuildStatus projectStatus = project.Status; + if (projectStatus.IsStuck || projectStatus.Value >= BuildStatusEnum.Indeterminate) + TrayNotifier.Instance.AcknowledgeStatus(project, projectStatus); + } + menuItem.Checked = !menuItem.Checked; + } + + private void stopAcknowledgingMenuItem_Click(object sender, EventArgs e) + { + Project project = GetSelectedProject(); + if (project == null) + return; + TrayNotifier.Instance.ClearAcknowledgedStatus(project); + } + + private void contextMenuStrip_Opening(object sender, CancelEventArgs e) + { + Project project = GetSelectedProject(); + bool isProjectSelected = project != null; + + if (project == null) + { + openProjectPageMenuItem.Enabled + = openConsolePageMenuItem.Enabled + = runBuildMenuItem.Enabled + = acknowledgeStatusMenuItem.Enabled + = claimBuildMenuItem.Enabled + = acknowledgeProjectMenuItem.Enabled + = false; + return; + } + + // get a copy of the reference to avoid a race condition + BuildStatus projectStatus = project.Status; + + acknowledgeProjectMenuItem.Checked = project.IsAcknowledged; + acknowledgeStatusMenuItem.Checked = TrayNotifier.Instance.IsStatusAcknowledged(project); + if (acknowledgeProjectMenuItem.Checked) + { + acknowledgeStatusMenuItem.Enabled = false; + } + else + { + acknowledgeStatusMenuItem.Enabled = ( projectStatus.IsStuck || projectStatus.Value >= BuildStatusEnum.Indeterminate ); + } + + bool shouldOpenConsolePage = ShouldOpenConsolePage(project); + if (shouldOpenConsolePage) + { + openProjectPageMenuItem.Font = normalMenuItemFont; + openConsolePageMenuItem.Font = mainMenuItemFont; + } + else + { + openConsolePageMenuItem.Font = normalMenuItemFont; + openProjectPageMenuItem.Font = mainMenuItemFont; + } + + // Claim + claimBuildMenuItem.Visible + = toolStripSeparator2.Visible + = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; + claimBuildMenuItem.Enabled + = toolStripSeparator2.Enabled + = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin && project.LastFailedBuild != null; + } + + private void removeProjectMenuItem_Click(object sender, EventArgs e) + { + Project project = GetSelectedProject(); + if (project == null) + return; + ConfigurationService.RemoveProject(project); + } + + private void claimBuildMenuItem_Click(object sender, EventArgs e) + { + Project project = GetSelectedProject(); + if (project == null) + return; + BuildDetails lastFailedBuild = project.LastFailedBuild; + if (lastFailedBuild == null) + return; + + var form = new ClaimBuildForm(); + form.Initialize(project, lastFailedBuild); + + var res = form.ShowDialog(); + if (res != DialogResult.OK) + return; + } + + private void projectsGridView_CustomColumnSort(object sender, CustomColumnSortEventArgs e) + { + int? res = DoCustomColumnSort(sender, e); + if (res == null) + return; + e.Handled = true; + e.Result = res.Value; + } + + private int? DoCustomColumnSort(object sender, CustomColumnSortEventArgs e) + { + DateTime? date1 = GetBuildDate(e.Column, e.ListSourceRowIndex1); + DateTime? date2 = GetBuildDate(e.Column, e.ListSourceRowIndex2); + if (date1 == null && date2 == null) + return null; + if (date1 == null) + return -1; + if (date2 == null) + return 1; + int res = date1.Value.CompareTo(date2.Value); + return res; + } + + private DateTime? GetBuildDate(GridColumn column, int listSourceRowIndex) + { + BuildDetails buildDetails = GetBuildDetails(column, listSourceRowIndex); + if (buildDetails == null) + return null; + return buildDetails.Time; + } + + private BuildDetails GetBuildDetails(GridColumn column, int listSourceRowIndex) + { + ProjectWrapper projectWrapper = (ProjectWrapper)projectsDataSource[listSourceRowIndex]; + if (column == lastSuccessGridColumn) + return projectWrapper.LastSuccessBuild; + if (column == lastFailureGridColumn) + return projectWrapper.LastFailureBuild; + if (column == lastBuildGridColumn) + return projectWrapper.LastBuild; + throw new Exception("Column not supported: " + column.Caption); + } + + private void MainForm_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.F5) + ProjectsUpdateService.UpdateProjects(); + } + + private delegate void UpdateIconDelegate(Icon icon); + public void UpdateIcon(Icon icon) + { + if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon == false) + return; + + if (InvokeRequired) + { + Delegate del = new UpdateIconDelegate(UpdateIcon); + MainForm.Instance.BeginInvoke(del, icon); + return; + } + + this.Icon = icon; + } + + private void ResetIcon() + { + // copied from the designer code + ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm)); + this.Icon = ((Icon)(resources.GetObject("$this.Icon"))); + } + + private void UpdateClaimPluginIntegration() + { + bool integrate = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; + if (integrate) + { + if (claimedByGridColumn.VisibleIndex == -1) + { + claimedByGridColumn.Visible = true; + claimedByGridColumn.VisibleIndex = projectsGridView.Columns.Count - 2; + } + if (claimReasonGridColumn.VisibleIndex == -1) + { + claimReasonGridColumn.Visible = true; + claimReasonGridColumn.VisibleIndex = 8; + } + } + else + { + claimedByGridColumn.Visible = false; + claimReasonGridColumn.Visible = false; + } + } + + private void acknowledgeProjectMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem menuItem = sender as ToolStripMenuItem; + Project project = GetSelectedProject(); + if (project == null) + return; + + menuItem.Checked = project.IsAcknowledged = !menuItem.Checked; + TrayNotifier.Instance.AcknowledgedProject(); + } + + private void setAuthenticationTokenMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem menuItem = sender as ToolStripMenuItem; + Project project = GetSelectedProject(); + if (project == null) + return; + + AuthenticationTokenForm.ShowDialogOrFocus(project); + } + } +} diff --git a/HudsonTrayTracker/UI/MainForm.resx b/JenkinsTray/UI/MainForm.resx similarity index 98% rename from HudsonTrayTracker/UI/MainForm.resx rename to JenkinsTray/UI/MainForm.resx index 99a396b..ece0e3f 100644 --- a/HudsonTrayTracker/UI/MainForm.resx +++ b/JenkinsTray/UI/MainForm.resx @@ -1,815 +1,815 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAAB3UlE - QVQ4T6WQ3UuTURyAF9130UV/QzeRBLuo7oVdKAiJXdVQFkIimdoH+FFUq3BiaMEWmrpobjZxanMbKuqy - HNO0rKxUKKZ7Zwv0QqqxzT3tHFGpva2ii+fiPec8z++cVwP8F6qL2fDXlep6yk4hGL5syFE9pEaj88ve - nvb6XCF+bDrHywtbEbFBQ3dUctse5ar1MxdbVzl7N4LepFBoDHO6UaHeEmTIVYvTG+TVjUop39FqtwLW - p9A2msI8lKR5MEGDK871xzFqbDGu2DZ44JrD56xk7ZOJDxNlGI21Ur529HC+DJjEdEeUuvT0CssqJU0K - J2+GMTQr3HO8wGMzSPndaDH993Uc2L+PM4UHc8TTNF2D0yRTyQw2YgkCM29xdxRlyNXFh45v/5udwFhw - cQfx/cQ3zkBrXlY56w3MbQ+Z9NwiNFO1e+3zNUzNh/eoBsTkkcACvon3fI8nZCCV2sTRUiBle5+XPP2l - tLMr/xTYRsjrXxOUV1RTcKIofUKD2z9HZ/8Ux/JLMwOdrudSFJPdY/P0Dr9GWY/zaGCW9t5pSWDxG+bu - SfWAxT4iAytKhKVQhDdLingn47MreIPL9D1bxukP/T7QYvVwJFePVlfyR1QDvy78K6qLfw+aH9lH74cB - EBSlAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAACHElE - QVQ4T2P4//8/RRirICkYqyAynr7zz38Q7t/07X/z8rf/y2Y9/p/VfwsoBZFHUVy38k9w+YKPq32brkrB - xECaOzb8/1+26Nf/xL5n/z3Kzk1F1gNnVCz+rdOy+u+p1P4n/61St9yBifes//K/YN63/zF9H/+7Vdz+ - b5t7/Ih56iFNmDzcgMql3yZULP723zn/9H+doAXvYOK1C1/8D2u999+59OYni+wL/42T9v3Xi97cA5OH - G1Cz9POFnOnv/5sm7/+vG7l+Lkw8d9Kd/w4Fp3NcSi9Ps807918vZtt/3bCl52HycAMal3/6nD717X/j - hL3/9eN2WIHE8vJusyZ1XAEy/zOEtd6xDm66BzZAK2D2Z5g+uAH1Sz99Tpv67r9Z6n64Acg4Z9Z7m7Qp - b/4bxu3CbkDFwo8XUqe8/W+fe/q/debRmTBxGK5d/mdexrQP//VjdvzXCV1yASYOV5A99WVffO/T/15V - N/4H1t98mzbxxZz8me9syhd8s2lY/Xd+/Yrf74Ob7//XDV/1XydsxUQMA8KabmsH1l8/6lF25b9v7Z3/ - cb3P/2dOe/c/b+bH/zmzPv0HaQaGPsj209pha3UwDABh1+LzvnY5x44ax+/+rxuzFYxBgaYXswUY8suB - mhed1gtdFoysB8UAEDaM36upG7GmTyd4wUUtvylfQFg7cO4l3bAlk7RCV+qiq0fhkIOxChKP/zMAAKH7 - vWcksHU/AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - 384, 17 - - - - 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 - gg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAACLUlE - QVQ4T52TvY/ScBjHuVIRKHA9JAgnL+VoC7TX0kLLS6EvFBTa0uj5J7gYF+PsfpOTMrg4ORgHY+LCYJwc - TYyJiYuDLu7GxHgxd/Hnr5fA8TZcrsmnzfN9nufTNPnVBwDw2ZYljGzr3ciyTNu2EC87L75eb+DvD67f - hU9g9vt/HNs5cMaOf9Owohro7YNbe8PhjfuzzBOgkDuabk6bbRXoxuBkNLIeus6yhKyIwY5umo5tHxmG - +Wwu8G5QkIa0jN5gqnR1oOkGuOk6b1x3jHl9uaWGhpb1UtXNY1luPmJ4KbIkmAElAcgD3egfa5oJxq77 - oq3ovKJoE7XbBbwoTWhG2F7cWRJ4dFR1S9fNCvykT41mB9TqjSOxXvtJM9zrYokLrc4vFYtUBcngq9Lf - tqICvlr7RhQr8U1za4FHXZIIurT/mePFf1AEJLkFGJb7uml2LRBrcp4us1+g4KRcYV8lkmkplyenglgH - VIm9tzq/VJRZLpUlih9yBQrAt79Pp3bjkVgM244nsPwe/VQQ6r8pRsgu7pwtC61grkA/T10r/NrnxB8s - V2VmvQiOB0MhLMZVxY/pDPEkU6DnZ2Qu2M0STjJFAIpmAUmXD0NY9PQMzEBRPwJzkiSp71F8J1/ipNMj - f9rE8XggkUgexq9cBXmi+DYYjtCRGL72T+D4jr/RaE+waFgu8c0zgUcmT9UuBS4/9m0hmh9Fo7N8FXih - CIKE5/Vi8yJsDM8P8P0HLGwR4Wl3ICYAAAAASUVORK5CYII= - - - - - AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA - CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA - AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA - g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac - 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// - ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// - /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA - l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 - wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// - /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// - //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA - l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 - z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// - //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// - //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa - 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// - /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A - kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD - 7P////////////////////////////////////////////////////////////////////////////// - /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA - iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz - tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// - ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// - /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA - 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA - pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA - xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA - sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 - zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// - /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// - //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA - q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 - 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// - //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD - 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu - 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA - 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA - nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA - pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA - sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA - +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA - zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A - //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A - sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA - +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA - v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA - AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA - iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA - n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A - t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA - wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A - 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA - 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 - wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL - 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta - 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAJyUkJCQhIiAgHx8eHR0bGhoY - GBcWFRUTEhIQEA8ODQ0NCwwICAkGBQUFAwMDAQEBAQAAAAAAAAAAAAAAAAAAACgnJyUkJCEiIB8fHh4d - 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 - Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC - QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI - RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL - SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O - TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS - UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW - VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e - HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh - ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn - JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx - MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 - NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 - OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ - Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND - QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG - RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL - S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P - TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS - UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX - VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY - WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY - WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA - nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA - pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA - rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA - hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A - tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A - jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA - vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb - oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA - xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// - ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA - zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA - pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA - f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA - rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA - hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A - tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// - //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA - vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt - w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA - xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ - 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA - zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// - //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA - 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// - ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A - 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji - 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A - jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA - vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA - lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA - xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 - tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA - zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// - ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA - 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA - rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A - 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A - tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA - 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA - vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA - 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA - xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA - 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA - zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA - pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA - 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA - rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A - 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A - tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA - 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA - vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA - 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA - xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA - 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA - zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA - /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA - 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A - //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A - 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A - tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA - 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA - vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA - 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA - xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA - 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA - zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb - jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA - q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 - pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA - xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA - 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA - 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i - y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ - 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY - FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi - IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 - NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB - AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 - fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz - cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 - fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 - JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 - PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH - R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT - UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY - GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi - ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 - ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE - QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP - TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW - VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA - f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA - iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A - k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee - 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew - 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A - sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA - vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA - x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA - 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A - 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA - 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA - 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA - /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA - rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A - uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA - w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA - zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA - f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A - sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A - 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 - zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 - 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz - BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY - FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk - IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW - EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - - - 294, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAAB3UlE + QVQ4T6WQ3UuTURyAF9130UV/QzeRBLuo7oVdKAiJXdVQFkIimdoH+FFUq3BiaMEWmrpobjZxanMbKuqy + HNO0rKxUKKZ7Zwv0QqqxzT3tHFGpva2ii+fiPec8z++cVwP8F6qL2fDXlep6yk4hGL5syFE9pEaj88ve + nvb6XCF+bDrHywtbEbFBQ3dUctse5ar1MxdbVzl7N4LepFBoDHO6UaHeEmTIVYvTG+TVjUop39FqtwLW + p9A2msI8lKR5MEGDK871xzFqbDGu2DZ44JrD56xk7ZOJDxNlGI21Ur529HC+DJjEdEeUuvT0CssqJU0K + J2+GMTQr3HO8wGMzSPndaDH993Uc2L+PM4UHc8TTNF2D0yRTyQw2YgkCM29xdxRlyNXFh45v/5udwFhw + cQfx/cQ3zkBrXlY56w3MbQ+Z9NwiNFO1e+3zNUzNh/eoBsTkkcACvon3fI8nZCCV2sTRUiBle5+XPP2l + tLMr/xTYRsjrXxOUV1RTcKIofUKD2z9HZ/8Ux/JLMwOdrudSFJPdY/P0Dr9GWY/zaGCW9t5pSWDxG+bu + SfWAxT4iAytKhKVQhDdLingn47MreIPL9D1bxukP/T7QYvVwJFePVlfyR1QDvy78K6qLfw+aH9lH74cB + EBSlAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAACHElE + QVQ4T2P4//8/RRirICkYqyAynr7zz38Q7t/07X/z8rf/y2Y9/p/VfwsoBZFHUVy38k9w+YKPq32brkrB + xECaOzb8/1+26Nf/xL5n/z3Kzk1F1gNnVCz+rdOy+u+p1P4n/61St9yBifes//K/YN63/zF9H/+7Vdz+ + b5t7/Ih56iFNmDzcgMql3yZULP723zn/9H+doAXvYOK1C1/8D2u999+59OYni+wL/42T9v3Xi97cA5OH + G1Cz9POFnOnv/5sm7/+vG7l+Lkw8d9Kd/w4Fp3NcSi9Ps807918vZtt/3bCl52HycAMal3/6nD717X/j + hL3/9eN2WIHE8vJusyZ1XAEy/zOEtd6xDm66BzZAK2D2Z5g+uAH1Sz99Tpv67r9Z6n64Acg4Z9Z7m7Qp + b/4bxu3CbkDFwo8XUqe8/W+fe/q/debRmTBxGK5d/mdexrQP//VjdvzXCV1yASYOV5A99WVffO/T/15V + N/4H1t98mzbxxZz8me9syhd8s2lY/Xd+/Yrf74Ob7//XDV/1XydsxUQMA8KabmsH1l8/6lF25b9v7Z3/ + cb3P/2dOe/c/b+bH/zmzPv0HaQaGPsj209pha3UwDABh1+LzvnY5x44ax+/+rxuzFYxBgaYXswUY8suB + mhed1gtdFoysB8UAEDaM36upG7GmTyd4wUUtvylfQFg7cO4l3bAlk7RCV+qiq0fhkIOxChKP/zMAAKH7 + vWcksHU/AAAAAElFTkSuQmCC + + + + + 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 + rkJggg== + + + + 384, 17 + + + + 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 + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr6AAAK+gEZ2P90AAACLUlE + QVQ4T52TvY/ScBjHuVIRKHA9JAgnL+VoC7TX0kLLS6EvFBTa0uj5J7gYF+PsfpOTMrg4ORgHY+LCYJwc + TYyJiYuDLu7GxHgxd/Hnr5fA8TZcrsmnzfN9nufTNPnVBwDw2ZYljGzr3ciyTNu2EC87L75eb+DvD67f + hU9g9vt/HNs5cMaOf9Owohro7YNbe8PhjfuzzBOgkDuabk6bbRXoxuBkNLIeus6yhKyIwY5umo5tHxmG + +Wwu8G5QkIa0jN5gqnR1oOkGuOk6b1x3jHl9uaWGhpb1UtXNY1luPmJ4KbIkmAElAcgD3egfa5oJxq77 + oq3ovKJoE7XbBbwoTWhG2F7cWRJ4dFR1S9fNCvykT41mB9TqjSOxXvtJM9zrYokLrc4vFYtUBcngq9Lf + tqICvlr7RhQr8U1za4FHXZIIurT/mePFf1AEJLkFGJb7uml2LRBrcp4us1+g4KRcYV8lkmkplyenglgH + VIm9tzq/VJRZLpUlih9yBQrAt79Pp3bjkVgM244nsPwe/VQQ6r8pRsgu7pwtC61grkA/T10r/NrnxB8s + V2VmvQiOB0MhLMZVxY/pDPEkU6DnZ2Qu2M0STjJFAIpmAUmXD0NY9PQMzEBRPwJzkiSp71F8J1/ipNMj + f9rE8XggkUgexq9cBXmi+DYYjtCRGL72T+D4jr/RaE+waFgu8c0zgUcmT9UuBS4/9m0hmh9Fo7N8FXih + CIKE5/Vi8yJsDM8P8P0HLGwR4Wl3ICYAAAAASUVORK5CYII= + + + + + AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA + CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA + g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac + 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// + ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// + /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA + l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 + wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// + /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// + //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA + l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 + z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// + //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// + //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa + 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// + //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A + kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD + 7P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA + iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz + tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// + ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// + /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA + 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA + pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA + xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA + sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 + zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// + /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// + //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA + q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 + 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// + //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD + 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu + 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA + 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA + nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA + pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA + sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA + +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA + zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A + //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A + sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA + +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA + v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA + iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA + n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A + t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA + wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A + 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA + 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 + wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL + 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta + 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAJyUkJCQhIiAgHx8eHR0bGhoY + GBcWFRUTEhIQEA8ODQ0NCwwICAkGBQUFAwMDAQEBAQAAAAAAAAAAAAAAAAAAACgnJyUkJCEiIB8fHh4d + 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 + Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC + QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI + RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL + SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O + TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS + UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW + VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e + HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh + ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn + JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx + MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 + NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 + OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ + Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND + QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG + RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL + S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P + TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS + UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX + VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY + WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY + WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA + nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA + pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA + rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA + hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A + tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A + jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA + vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb + oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA + xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// + ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA + zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA + pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA + f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA + rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA + hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A + tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// + //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA + vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt + w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA + xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ + 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA + zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// + //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA + 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// + ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A + 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji + 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A + jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA + vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA + lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA + xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 + tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA + zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// + ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA + 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA + rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A + 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A + tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA + 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA + vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA + 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA + xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA + 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA + zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA + pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA + 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA + rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A + 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A + tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA + 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA + vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA + 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA + xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA + 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA + zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA + /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA + 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A + //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A + 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A + tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA + 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA + vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA + 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA + xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA + 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA + zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA + AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb + jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA + q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 + pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA + xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA + 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA + 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i + y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ + 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY + FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi + IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 + NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB + AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 + fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz + cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 + fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 + JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 + PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH + R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT + UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY + GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi + ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 + ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE + QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP + TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW + VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA + f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA + iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A + k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee + 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew + 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A + sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA + vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA + x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA + 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A + 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA + 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA + 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA + /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA + rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A + uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA + w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA + zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA + f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A + sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A + 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 + zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 + 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz + BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY + FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk + IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW + EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 294, 17 + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/SettingsForm.Designer.cs b/JenkinsTray/UI/SettingsForm.Designer.cs similarity index 96% rename from HudsonTrayTracker/UI/SettingsForm.Designer.cs rename to JenkinsTray/UI/SettingsForm.Designer.cs index da8aad8..21d16ed 100644 --- a/HudsonTrayTracker/UI/SettingsForm.Designer.cs +++ b/JenkinsTray/UI/SettingsForm.Designer.cs @@ -1,332 +1,332 @@ -namespace Hudson.TrayTracker.UI -{ - partial class SettingsForm - { - /// - /// 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(SettingsForm)); - this.tabControl = new DevExpress.XtraTab.XtraTabControl(); - this.serversTabPage = new DevExpress.XtraTab.XtraTabPage(); - this.serversSettingsControl = new Hudson.TrayTracker.UI.Controls.ServersSettingsControl(); - this.notificationsTabPage = new DevExpress.XtraTab.XtraTabPage(); - this.notificationsSettingsControl = new Hudson.TrayTracker.UI.Controls.NotificationsSettingsControl(); - this.generalTabPage = new DevExpress.XtraTab.XtraTabPage(); - this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.checkForUpdatesCheckEdit = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.refreshLabel = new DevExpress.XtraEditors.LabelControl(); - this.refreshSpinEdit = new DevExpress.XtraEditors.SpinEdit(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.updateMainWindowIconCheckEdit = new DevExpress.XtraEditors.CheckEdit(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.integrateWithClaimPluginCheckEdit = new DevExpress.XtraEditors.CheckEdit(); - ((System.ComponentModel.ISupportInitialize)(this.tabControl)).BeginInit(); - this.tabControl.SuspendLayout(); - this.serversTabPage.SuspendLayout(); - this.notificationsTabPage.SuspendLayout(); - this.generalTabPage.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); - this.groupControl1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel5.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.checkForUpdatesCheckEdit.Properties)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.refreshSpinEdit.Properties)).BeginInit(); - this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.updateMainWindowIconCheckEdit.Properties)).BeginInit(); - this.tableLayoutPanel4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.integrateWithClaimPluginCheckEdit.Properties)).BeginInit(); - this.SuspendLayout(); - // - // tabControl - // - this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl.HeaderLocation = DevExpress.XtraTab.TabHeaderLocation.Left; - this.tabControl.Location = new System.Drawing.Point(0, 0); - this.tabControl.Name = "tabControl"; - this.tabControl.SelectedTabPage = this.serversTabPage; - this.tabControl.Size = new System.Drawing.Size(746, 411); - this.tabControl.TabIndex = 0; - this.tabControl.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { - this.serversTabPage, - this.notificationsTabPage, - this.generalTabPage}); - // - // serversTabPage - // - this.serversTabPage.Controls.Add(this.serversSettingsControl); - this.serversTabPage.Name = "serversTabPage"; - this.serversTabPage.Size = new System.Drawing.Size(717, 404); - this.serversTabPage.Text = "Servers and projects"; - // - // serversSettingsControl - // - this.serversSettingsControl.AutoSize = true; - this.serversSettingsControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.serversSettingsControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.serversSettingsControl.Location = new System.Drawing.Point(0, 0); - this.serversSettingsControl.LookAndFeel.UseDefaultLookAndFeel = false; - this.serversSettingsControl.LookAndFeel.UseWindowsXPTheme = true; - this.serversSettingsControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.serversSettingsControl.Name = "serversSettingsControl"; - this.serversSettingsControl.Size = new System.Drawing.Size(717, 404); - this.serversSettingsControl.TabIndex = 0; - // - // notificationsTabPage - // - this.notificationsTabPage.Controls.Add(this.notificationsSettingsControl); - this.notificationsTabPage.Name = "notificationsTabPage"; - this.notificationsTabPage.Size = new System.Drawing.Size(717, 404); - this.notificationsTabPage.Text = "Sound notifications"; - // - // notificationsSettingsControl - // - this.notificationsSettingsControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.notificationsSettingsControl.Location = new System.Drawing.Point(0, 0); - this.notificationsSettingsControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.notificationsSettingsControl.Name = "notificationsSettingsControl"; - this.notificationsSettingsControl.Size = new System.Drawing.Size(717, 404); - this.notificationsSettingsControl.TabIndex = 0; - // - // generalTabPage - // - this.generalTabPage.Controls.Add(this.groupControl1); - this.generalTabPage.Name = "generalTabPage"; - this.generalTabPage.Size = new System.Drawing.Size(717, 404); - this.generalTabPage.Text = "General"; - // - // groupControl1 - // - this.groupControl1.AppearanceCaption.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.groupControl1.AppearanceCaption.Options.UseFont = true; - this.groupControl1.Controls.Add(this.tableLayoutPanel2); - this.groupControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupControl1.Location = new System.Drawing.Point(0, 0); - this.groupControl1.Name = "groupControl1"; - this.groupControl1.Size = new System.Drawing.Size(717, 404); - this.groupControl1.TabIndex = 1; - this.groupControl1.Text = "General options"; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel5, 0, 3); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel1, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel4, 0, 2); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(2, 22); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 5; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 16F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(713, 380); - this.tableLayoutPanel2.TabIndex = 4; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.AutoSize = true; - this.tableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel5.ColumnCount = 1; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.Controls.Add(this.checkForUpdatesCheckEdit, 0, 0); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 97); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.RowCount = 1; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.Size = new System.Drawing.Size(707, 25); - this.tableLayoutPanel5.TabIndex = 6; - // - // checkForUpdatesCheckEdit - // - this.checkForUpdatesCheckEdit.Location = new System.Drawing.Point(3, 3); - this.checkForUpdatesCheckEdit.Name = "checkForUpdatesCheckEdit"; - this.checkForUpdatesCheckEdit.Properties.AutoWidth = true; - this.checkForUpdatesCheckEdit.Properties.Caption = "&Check for updates periodically"; - this.checkForUpdatesCheckEdit.Size = new System.Drawing.Size(167, 19); - this.checkForUpdatesCheckEdit.TabIndex = 0; - this.checkForUpdatesCheckEdit.CheckedChanged += new System.EventHandler(this.checkForUpdatesCheckEdit_CheckedChanged); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.refreshLabel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.refreshSpinEdit, 1, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(707, 26); - this.tableLayoutPanel1.TabIndex = 3; - // - // refreshLabel - // - this.refreshLabel.Location = new System.Drawing.Point(3, 6); - this.refreshLabel.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); - this.refreshLabel.Name = "refreshLabel"; - this.refreshLabel.Size = new System.Drawing.Size(97, 13); - this.refreshLabel.TabIndex = 4; - this.refreshLabel.Text = "&Refresh interval (s):"; - // - // refreshSpinEdit - // - this.refreshSpinEdit.EditValue = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.refreshSpinEdit.Location = new System.Drawing.Point(106, 3); - this.refreshSpinEdit.Name = "refreshSpinEdit"; - this.refreshSpinEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton()}); - this.refreshSpinEdit.Properties.Mask.EditMask = "N0"; - this.refreshSpinEdit.Properties.MaxValue = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.refreshSpinEdit.Size = new System.Drawing.Size(100, 20); - this.refreshSpinEdit.TabIndex = 1; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.ColumnCount = 1; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel3.Controls.Add(this.updateMainWindowIconCheckEdit, 0, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 35); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 1; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(707, 25); - this.tableLayoutPanel3.TabIndex = 4; - // - // updateMainWindowIconCheckEdit - // - this.updateMainWindowIconCheckEdit.Location = new System.Drawing.Point(3, 3); - this.updateMainWindowIconCheckEdit.Name = "updateMainWindowIconCheckEdit"; - this.updateMainWindowIconCheckEdit.Properties.AutoWidth = true; - this.updateMainWindowIconCheckEdit.Properties.Caption = "&Update the main window\'s icon"; - this.updateMainWindowIconCheckEdit.Size = new System.Drawing.Size(170, 19); - this.updateMainWindowIconCheckEdit.TabIndex = 5; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.AutoSize = true; - this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel4.ColumnCount = 1; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Controls.Add(this.integrateWithClaimPluginCheckEdit, 0, 0); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 66); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.RowCount = 1; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.Size = new System.Drawing.Size(707, 25); - this.tableLayoutPanel4.TabIndex = 5; - // - // integrateWithClaimPluginCheckEdit - // - this.integrateWithClaimPluginCheckEdit.Location = new System.Drawing.Point(3, 3); - this.integrateWithClaimPluginCheckEdit.Name = "integrateWithClaimPluginCheckEdit"; - this.integrateWithClaimPluginCheckEdit.Properties.AutoWidth = true; - this.integrateWithClaimPluginCheckEdit.Properties.Caption = "Integrate with Clai&m plugin (experimental)"; - this.integrateWithClaimPluginCheckEdit.Size = new System.Drawing.Size(224, 19); - this.integrateWithClaimPluginCheckEdit.TabIndex = 0; - // - // SettingsForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(746, 411); - this.Controls.Add(this.tabControl); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "SettingsForm"; - this.Text = "Jenkins Tray - Settings"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SettingsForm_FormClosing); - this.Load += new System.EventHandler(this.SettingsForm_Load); - ((System.ComponentModel.ISupportInitialize)(this.tabControl)).EndInit(); - this.tabControl.ResumeLayout(false); - this.serversTabPage.ResumeLayout(false); - this.serversTabPage.PerformLayout(); - this.notificationsTabPage.ResumeLayout(false); - this.generalTabPage.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); - this.groupControl1.ResumeLayout(false); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel5.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.checkForUpdatesCheckEdit.Properties)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.refreshSpinEdit.Properties)).EndInit(); - this.tableLayoutPanel3.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.updateMainWindowIconCheckEdit.Properties)).EndInit(); - this.tableLayoutPanel4.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.integrateWithClaimPluginCheckEdit.Properties)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraTab.XtraTabControl tabControl; - private DevExpress.XtraTab.XtraTabPage serversTabPage; - private DevExpress.XtraTab.XtraTabPage notificationsTabPage; - private Hudson.TrayTracker.UI.Controls.ServersSettingsControl serversSettingsControl; - private Hudson.TrayTracker.UI.Controls.NotificationsSettingsControl notificationsSettingsControl; - private DevExpress.XtraTab.XtraTabPage generalTabPage; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private DevExpress.XtraEditors.SpinEdit refreshSpinEdit; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private DevExpress.XtraEditors.LabelControl refreshLabel; - private DevExpress.XtraEditors.GroupControl groupControl1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private DevExpress.XtraEditors.CheckEdit updateMainWindowIconCheckEdit; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private DevExpress.XtraEditors.CheckEdit integrateWithClaimPluginCheckEdit; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; - private DevExpress.XtraEditors.CheckEdit checkForUpdatesCheckEdit; - - } +namespace Jenkins.Tray.UI +{ + partial class SettingsForm + { + /// + /// 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(SettingsForm)); + this.tabControl = new DevExpress.XtraTab.XtraTabControl(); + this.serversTabPage = new DevExpress.XtraTab.XtraTabPage(); + this.serversSettingsControl = new Jenkins.Tray.UI.Controls.ServersSettingsControl(); + this.notificationsTabPage = new DevExpress.XtraTab.XtraTabPage(); + this.notificationsSettingsControl = new Jenkins.Tray.UI.Controls.NotificationsSettingsControl(); + this.generalTabPage = new DevExpress.XtraTab.XtraTabPage(); + this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.checkForUpdatesCheckEdit = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.refreshLabel = new DevExpress.XtraEditors.LabelControl(); + this.refreshSpinEdit = new DevExpress.XtraEditors.SpinEdit(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.updateMainWindowIconCheckEdit = new DevExpress.XtraEditors.CheckEdit(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.integrateWithClaimPluginCheckEdit = new DevExpress.XtraEditors.CheckEdit(); + ((System.ComponentModel.ISupportInitialize)(this.tabControl)).BeginInit(); + this.tabControl.SuspendLayout(); + this.serversTabPage.SuspendLayout(); + this.notificationsTabPage.SuspendLayout(); + this.generalTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); + this.groupControl1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.checkForUpdatesCheckEdit.Properties)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.refreshSpinEdit.Properties)).BeginInit(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.updateMainWindowIconCheckEdit.Properties)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.integrateWithClaimPluginCheckEdit.Properties)).BeginInit(); + this.SuspendLayout(); + // + // tabControl + // + this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl.HeaderLocation = DevExpress.XtraTab.TabHeaderLocation.Left; + this.tabControl.Location = new System.Drawing.Point(0, 0); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedTabPage = this.serversTabPage; + this.tabControl.Size = new System.Drawing.Size(746, 411); + this.tabControl.TabIndex = 0; + this.tabControl.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { + this.serversTabPage, + this.notificationsTabPage, + this.generalTabPage}); + // + // serversTabPage + // + this.serversTabPage.Controls.Add(this.serversSettingsControl); + this.serversTabPage.Name = "serversTabPage"; + this.serversTabPage.Size = new System.Drawing.Size(717, 404); + this.serversTabPage.Text = "Servers and projects"; + // + // serversSettingsControl + // + this.serversSettingsControl.AutoSize = true; + this.serversSettingsControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.serversSettingsControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.serversSettingsControl.Location = new System.Drawing.Point(0, 0); + this.serversSettingsControl.LookAndFeel.UseDefaultLookAndFeel = false; + this.serversSettingsControl.LookAndFeel.UseWindowsXPTheme = true; + this.serversSettingsControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.serversSettingsControl.Name = "serversSettingsControl"; + this.serversSettingsControl.Size = new System.Drawing.Size(717, 404); + this.serversSettingsControl.TabIndex = 0; + // + // notificationsTabPage + // + this.notificationsTabPage.Controls.Add(this.notificationsSettingsControl); + this.notificationsTabPage.Name = "notificationsTabPage"; + this.notificationsTabPage.Size = new System.Drawing.Size(717, 404); + this.notificationsTabPage.Text = "Sound notifications"; + // + // notificationsSettingsControl + // + this.notificationsSettingsControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.notificationsSettingsControl.Location = new System.Drawing.Point(0, 0); + this.notificationsSettingsControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.notificationsSettingsControl.Name = "notificationsSettingsControl"; + this.notificationsSettingsControl.Size = new System.Drawing.Size(717, 404); + this.notificationsSettingsControl.TabIndex = 0; + // + // generalTabPage + // + this.generalTabPage.Controls.Add(this.groupControl1); + this.generalTabPage.Name = "generalTabPage"; + this.generalTabPage.Size = new System.Drawing.Size(717, 404); + this.generalTabPage.Text = "General"; + // + // groupControl1 + // + this.groupControl1.AppearanceCaption.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.groupControl1.AppearanceCaption.Options.UseFont = true; + this.groupControl1.Controls.Add(this.tableLayoutPanel2); + this.groupControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupControl1.Location = new System.Drawing.Point(0, 0); + this.groupControl1.Name = "groupControl1"; + this.groupControl1.Size = new System.Drawing.Size(717, 404); + this.groupControl1.TabIndex = 1; + this.groupControl1.Text = "General options"; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel5, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel4, 0, 2); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(2, 22); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 5; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 16F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(713, 380); + this.tableLayoutPanel2.TabIndex = 4; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.AutoSize = true; + this.tableLayoutPanel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel5.ColumnCount = 1; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel5.Controls.Add(this.checkForUpdatesCheckEdit, 0, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 97); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 1; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel5.Size = new System.Drawing.Size(707, 25); + this.tableLayoutPanel5.TabIndex = 6; + // + // checkForUpdatesCheckEdit + // + this.checkForUpdatesCheckEdit.Location = new System.Drawing.Point(3, 3); + this.checkForUpdatesCheckEdit.Name = "checkForUpdatesCheckEdit"; + this.checkForUpdatesCheckEdit.Properties.AutoWidth = true; + this.checkForUpdatesCheckEdit.Properties.Caption = "&Check for updates periodically"; + this.checkForUpdatesCheckEdit.Size = new System.Drawing.Size(167, 19); + this.checkForUpdatesCheckEdit.TabIndex = 0; + this.checkForUpdatesCheckEdit.CheckedChanged += new System.EventHandler(this.checkForUpdatesCheckEdit_CheckedChanged); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.refreshLabel, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.refreshSpinEdit, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(707, 26); + this.tableLayoutPanel1.TabIndex = 3; + // + // refreshLabel + // + this.refreshLabel.Location = new System.Drawing.Point(3, 6); + this.refreshLabel.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); + this.refreshLabel.Name = "refreshLabel"; + this.refreshLabel.Size = new System.Drawing.Size(97, 13); + this.refreshLabel.TabIndex = 4; + this.refreshLabel.Text = "&Refresh interval (s):"; + // + // refreshSpinEdit + // + this.refreshSpinEdit.EditValue = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.refreshSpinEdit.Location = new System.Drawing.Point(106, 3); + this.refreshSpinEdit.Name = "refreshSpinEdit"; + this.refreshSpinEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton()}); + this.refreshSpinEdit.Properties.Mask.EditMask = "N0"; + this.refreshSpinEdit.Properties.MaxValue = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.refreshSpinEdit.Size = new System.Drawing.Size(100, 20); + this.refreshSpinEdit.TabIndex = 1; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.AutoSize = true; + this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.Controls.Add(this.updateMainWindowIconCheckEdit, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 35); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(707, 25); + this.tableLayoutPanel3.TabIndex = 4; + // + // updateMainWindowIconCheckEdit + // + this.updateMainWindowIconCheckEdit.Location = new System.Drawing.Point(3, 3); + this.updateMainWindowIconCheckEdit.Name = "updateMainWindowIconCheckEdit"; + this.updateMainWindowIconCheckEdit.Properties.AutoWidth = true; + this.updateMainWindowIconCheckEdit.Properties.Caption = "&Update the main window\'s icon"; + this.updateMainWindowIconCheckEdit.Size = new System.Drawing.Size(170, 19); + this.updateMainWindowIconCheckEdit.TabIndex = 5; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.AutoSize = true; + this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.integrateWithClaimPluginCheckEdit, 0, 0); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 66); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 1; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(707, 25); + this.tableLayoutPanel4.TabIndex = 5; + // + // integrateWithClaimPluginCheckEdit + // + this.integrateWithClaimPluginCheckEdit.Location = new System.Drawing.Point(3, 3); + this.integrateWithClaimPluginCheckEdit.Name = "integrateWithClaimPluginCheckEdit"; + this.integrateWithClaimPluginCheckEdit.Properties.AutoWidth = true; + this.integrateWithClaimPluginCheckEdit.Properties.Caption = "Integrate with Clai&m plugin (experimental)"; + this.integrateWithClaimPluginCheckEdit.Size = new System.Drawing.Size(224, 19); + this.integrateWithClaimPluginCheckEdit.TabIndex = 0; + // + // SettingsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(746, 411); + this.Controls.Add(this.tabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SettingsForm"; + this.Text = "Jenkins Tray - Settings"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SettingsForm_FormClosing); + this.Load += new System.EventHandler(this.SettingsForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.tabControl)).EndInit(); + this.tabControl.ResumeLayout(false); + this.serversTabPage.ResumeLayout(false); + this.serversTabPage.PerformLayout(); + this.notificationsTabPage.ResumeLayout(false); + this.generalTabPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); + this.groupControl1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.checkForUpdatesCheckEdit.Properties)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.refreshSpinEdit.Properties)).EndInit(); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.updateMainWindowIconCheckEdit.Properties)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.integrateWithClaimPluginCheckEdit.Properties)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraTab.XtraTabControl tabControl; + private DevExpress.XtraTab.XtraTabPage serversTabPage; + private DevExpress.XtraTab.XtraTabPage notificationsTabPage; + private Jenkins.Tray.UI.Controls.ServersSettingsControl serversSettingsControl; + private Jenkins.Tray.UI.Controls.NotificationsSettingsControl notificationsSettingsControl; + private DevExpress.XtraTab.XtraTabPage generalTabPage; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private DevExpress.XtraEditors.SpinEdit refreshSpinEdit; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private DevExpress.XtraEditors.LabelControl refreshLabel; + private DevExpress.XtraEditors.GroupControl groupControl1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private DevExpress.XtraEditors.CheckEdit updateMainWindowIconCheckEdit; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private DevExpress.XtraEditors.CheckEdit integrateWithClaimPluginCheckEdit; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private DevExpress.XtraEditors.CheckEdit checkForUpdatesCheckEdit; + + } } \ No newline at end of file diff --git a/HudsonTrayTracker/UI/SettingsForm.cs b/JenkinsTray/UI/SettingsForm.cs similarity index 90% rename from HudsonTrayTracker/UI/SettingsForm.cs rename to JenkinsTray/UI/SettingsForm.cs index e45ba18..7300a7c 100644 --- a/HudsonTrayTracker/UI/SettingsForm.cs +++ b/JenkinsTray/UI/SettingsForm.cs @@ -1,81 +1,81 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.BusinessComponents; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Utils.BackgroundProcessing; -using DevExpress.XtraBars; -using Spring.Context.Support; - -namespace Hudson.TrayTracker.UI -{ - public partial class SettingsForm : DevExpress.XtraEditors.XtraForm - { - public static SettingsForm Instance - { - get - { - SettingsForm instance = (SettingsForm)ContextRegistry.GetContext().GetObject("SettingsForm"); - return instance; - } - } - - public ConfigurationService ConfigurationService { get; set; } - public HudsonService HudsonService { get; set; } - private ApplicationUpdateService applicationUpdateService; - - public SettingsForm() - { - InitializeComponent(); - } - - public static void ShowDialogOrFocus() - { - if (Instance.Visible) - Instance.Focus(); - else - Instance.ShowDialog(); - } - - protected override void OnShown(EventArgs e) - { - base.OnShown(e); - tabControl.SelectedTabPageIndex = 0; - } - - private void SettingsForm_Load(object sender, EventArgs e) - { - refreshSpinEdit.Value = ConfigurationService.GeneralSettings.RefreshIntervalInSeconds; - updateMainWindowIconCheckEdit.Checked = ConfigurationService.GeneralSettings.UpdateMainWindowIcon; - integrateWithClaimPluginCheckEdit.Checked = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; - checkForUpdatesCheckEdit.Checked = ConfigurationService.GeneralSettings.CheckForUpdates; - notificationsSettingsControl.InitializeValues(); - } - - private void SettingsForm_FormClosing(object sender, FormClosingEventArgs e) - { - int refreshInterval = (int)refreshSpinEdit.Value; - ConfigurationService.SetRefreshIntervalInSeconds(refreshInterval); - ConfigurationService.SetUpdateMainWindowIcon(updateMainWindowIconCheckEdit.Checked); - ConfigurationService.SetIntegrateWithClaimPlugin(integrateWithClaimPluginCheckEdit.Checked); - ConfigurationService.SetCheckForUpdates(checkForUpdatesCheckEdit.Checked); - ConfigurationService.SetTreadUnstableAsFailed(notificationsSettingsControl.TreadUnstableAsFailed()); - ConfigurationService.SetSoundNotifications(notificationsSettingsControl.SoundNotificationsEnabled()); - notificationsSettingsControl.InvalidateData(); - } - - private void checkForUpdatesCheckEdit_CheckedChanged(object sender, EventArgs e) - { - if (applicationUpdateService == null) - { - applicationUpdateService = (ApplicationUpdateService)ContextRegistry.GetContext().GetObject("ApplicationUpdateService"); - } - applicationUpdateService.EnableTimer(checkForUpdatesCheckEdit.Checked); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Jenkins.Tray.BusinessComponents; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Utils.BackgroundProcessing; +using DevExpress.XtraBars; +using Spring.Context.Support; + +namespace Jenkins.Tray.UI +{ + public partial class SettingsForm : DevExpress.XtraEditors.XtraForm + { + public static SettingsForm Instance + { + get + { + SettingsForm instance = (SettingsForm)ContextRegistry.GetContext().GetObject("SettingsForm"); + return instance; + } + } + + public ConfigurationService ConfigurationService { get; set; } + public JenkinsService JenkinsService { get; set; } + private ApplicationUpdateService applicationUpdateService; + + public SettingsForm() + { + InitializeComponent(); + } + + public static void ShowDialogOrFocus() + { + if (Instance.Visible) + Instance.Focus(); + else + Instance.ShowDialog(); + } + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + tabControl.SelectedTabPageIndex = 0; + } + + private void SettingsForm_Load(object sender, EventArgs e) + { + refreshSpinEdit.Value = ConfigurationService.GeneralSettings.RefreshIntervalInSeconds; + updateMainWindowIconCheckEdit.Checked = ConfigurationService.GeneralSettings.UpdateMainWindowIcon; + integrateWithClaimPluginCheckEdit.Checked = ConfigurationService.GeneralSettings.IntegrateWithClaimPlugin; + checkForUpdatesCheckEdit.Checked = ConfigurationService.GeneralSettings.CheckForUpdates; + notificationsSettingsControl.InitializeValues(); + } + + private void SettingsForm_FormClosing(object sender, FormClosingEventArgs e) + { + int refreshInterval = (int)refreshSpinEdit.Value; + ConfigurationService.SetRefreshIntervalInSeconds(refreshInterval); + ConfigurationService.SetUpdateMainWindowIcon(updateMainWindowIconCheckEdit.Checked); + ConfigurationService.SetIntegrateWithClaimPlugin(integrateWithClaimPluginCheckEdit.Checked); + ConfigurationService.SetCheckForUpdates(checkForUpdatesCheckEdit.Checked); + ConfigurationService.SetTreadUnstableAsFailed(notificationsSettingsControl.TreadUnstableAsFailed()); + ConfigurationService.SetSoundNotifications(notificationsSettingsControl.SoundNotificationsEnabled()); + notificationsSettingsControl.InvalidateData(); + } + + private void checkForUpdatesCheckEdit_CheckedChanged(object sender, EventArgs e) + { + if (applicationUpdateService == null) + { + applicationUpdateService = (ApplicationUpdateService)ContextRegistry.GetContext().GetObject("ApplicationUpdateService"); + } + applicationUpdateService.EnableTimer(checkForUpdatesCheckEdit.Checked); + } + } +} diff --git a/HudsonTrayTracker/UI/SettingsForm.resx b/JenkinsTray/UI/SettingsForm.resx similarity index 98% rename from HudsonTrayTracker/UI/SettingsForm.resx rename to JenkinsTray/UI/SettingsForm.resx index 15783ff..5fd21f4 100644 --- a/HudsonTrayTracker/UI/SettingsForm.resx +++ b/JenkinsTray/UI/SettingsForm.resx @@ -1,654 +1,654 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA - CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA - AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA - g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA - if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA - qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA - nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA - o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA - vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac - 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA - if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA - f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA - lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// - ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// - /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A - t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA - pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A - kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA - f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA - l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 - wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// - /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// - //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA - qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA - l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA - g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA - nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA - y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 - z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// - //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA - 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// - //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa - 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA - sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// - /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA - iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A - kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD - 7P////////////////////////////////////////////////////////////////////////////// - /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA - iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz - tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA - xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// - ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// - /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA - 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA - y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A - t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA - pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A - kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA - qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA - xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA - sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 - zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// - /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// - //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA - vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA - q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA - l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA - 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 - 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// - //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA - 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD - 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu - 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA - 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA - nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA - 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A - 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA - nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA - pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA - sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A - uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA - pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA - sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA - 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA - y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA - +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA - q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA - xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA - zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A - //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA - 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A - sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A - uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA - 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A - sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA - 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A - 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A - uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA - +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA - v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA - 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA - 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA - zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A - //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA - +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA - 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA - 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA - v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A - //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA - 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A - 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA - xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA - AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA - iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA - n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A - t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA - wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A - 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA - 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 - wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL - 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta - 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - 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 - MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 - NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 - OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ - Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC - QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI - RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL - SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O - TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS - UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW - VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e - HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh - ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn - JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx - MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 - NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 - OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ - Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND - QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG - RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL - S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P - TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS - UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX - VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY - WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY - WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA - nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA - f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA - pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA - f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA - rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA - hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A - tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A - jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA - vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb - oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA - xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// - ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA - zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA - pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA - f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA - rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA - hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A - tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// - //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA - vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt - w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA - xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ - 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA - zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// - //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA - 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// - ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A - 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji - 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A - jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA - vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA - lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA - xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 - tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA - zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// - ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA - 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA - rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A - 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A - tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA - 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA - vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA - 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA - xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA - 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA - zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA - pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA - 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA - rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A - 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A - tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA - 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA - vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA - 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA - xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA - 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA - zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA - /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA - 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A - //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A - 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A - tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA - 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA - vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA - 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA - xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA - 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA - zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA - AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb - jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA - q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 - pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA - xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA - 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA - 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i - y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ - 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY - FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi - IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 - NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB - AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 - fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz - cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 - fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 - JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 - PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH - R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT - UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY - GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi - ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 - ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE - QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP - TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW - VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA - AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA - f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA - iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A - k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee - 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew - 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A - sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA - vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA - x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA - 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A - 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA - 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA - 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA - /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA - rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A - uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA - w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA - zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA - f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A - sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A - 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 - zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 - 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz - BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY - FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk - IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW - EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAQEAAAAEAIAAoQgAAZgAAAEBAAAABAAgAKBYAAI5CAAAgIAAAAQAgAKgQAAC2WAAAICAAAAEA + CACoCAAAXmkAABAQAAABACAAaAQAAAZyAAAQEAAAAQAIAGgFAABudgAAKAAAAEAAAACAAAAAAQAgAAAA + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAFEAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJf/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/OwCK/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SACo/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAm/9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI7/PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9IAKj/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCb/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Ajv89AI3/PACM/zwAi/87AIn/OgCI/zoAh/85AIX/OQCE/zgA + g/84AIH/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC1/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0gAqP9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJv/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCO/z0Ajf88AIz/PACL/zsA + if86AIj/OgCH/zkAhf85AIT/OACD/zgAgf83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALn/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zoAiP86AIf/OQCF/zkAhP84AIP/OACB/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAKz/SgCr/0kA + qv9JAKn/SACn/0cApv9HAKX/RgCj/0YAov9FAKH/RQCf/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Akv8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/85AIX/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArP9KAKv/SQCq/0kAqf9IAKf/RwCm/0cApf9GAKP/RgCi/0UAof9FAJ//RACe/0MA + nf9DAJz/QgCa/0IAmf9BAJj/QQCW/0AAlf9AAJT/PwCS/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if87AIj/OgCH/zkAhf85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/0oAq/9JAKr/SQCp/0gAp/9HAKb/RwCl/0YA + o/9GAKL/RQCh/0UAn/9EAJ7/QwCd/0MAnP9CAJr/QgCZ/0EAmP9BAJb/QACV/0AAlP8/AJL/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/OwCJ/zsAiP86AIf/OQCF/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1EA + vf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALD/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCj/0YAov9FAKH/RQCg/0QAnv9DAJ3/QwCc/0IAmv9CAJn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/zwAi/87AIn/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sP9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKP/RgCi/0UAof9FAKD/RACe/7ac + 2P/Sw+f/0sPn/9LD5//Sw+b/kGvC/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf88AIz/PACL/zsA + if/Artn/0MPi/9DD4v/Qw+L/0MPh/4trtv83AID/NwB//zcAf/83AH//NwB//zcAf/83AH//NwB//zcA + f/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9RAL3/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + o/9GAKL/RQCh/0UAoP/Tw+j//////////////////////5t6yf9BAJb/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//PQCN/zwAjP88AIv/4trt//////////////////////+Xer7/OACC/zcAgP83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwf9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/RgCk/0YAov9FAKH/08Po//////////////////////+cesn/QQCY/0EA + lv9AAJX/QACU/z8Ak/8+AJH/PgCQ/z0Aj/89AI3/PACM/+La7v//////////////////////l3q+/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/UAC6/08AuP9PALf/TgC2/04AtP9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKf/SACm/0cApf9GAKT/RgCi/9PD6P////////////// + ////////nHrK/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf8+AJD/PQCP/z0Ajf/i2u7///////// + /////////////5h6v/85AIT/OACD/zgAgv83AID/NwB//zcAf/83AH//NwB//zcAf/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IAv/9SAL7/UQC8/1AAu/9QALr/TwC4/08A + t/9OALb/TgC0/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAp/9IAKb/RwCl/0YA + pP/Tw+n//////////////////////5x6y/9CAJr/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/PgCR/z4A + kP89AI//4tru//////////////////////+YesD/OgCG/zkAhP84AIP/OACC/zcAgP83AH//NwB//zcA + f/83AH//WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9OALT/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/SACn/0gApv9HAKX/08Pp//////////////////////+desv/QwCc/0IAmv9CAJn/QQCY/0EA + l/9AAJX/QACU/z8Ak/8+AJH/PgCQ/+La7v//////////////////////mHrA/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCA/zcAf/83AH//NwB//1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/08AuP9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/0kAqf9IAKj/SACm/9PD6f//////////////////////nXrM/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf9AAJT/PwCT/z4Akf/i2u7//////////////////////5h6 + wf87AIj/OgCH/zoAhv85AIT/OACD/zgAgv83AID/NwB//zcAf/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/TwC4/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oAq/9JAKr/SQCp/0gAqP/Tw+r///////// + /////////////516zf9EAJ7/RACd/0MAnP9DAJv/QgCZ/0EAmP9BAJf/QACV/0AAlP8/AJP/4trv//// + //////////////////+ZesL/OwCK/zsAiP86AIf/OgCG/zkAhP84AIP/OACC/zcAgf83AH//WwDS/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxf9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9PALj/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/SgCr/0kA + qv9JAKn/08Pq//////////////////////+des3/RQCg/0QAnv9EAJ3/QwCc/0MAm/9CAJn/QQCY/0EA + l/9AAJX/QACU/+Pa7///////////////////////mXrD/zwAi/87AIr/OwCI/zoAh/86AIb/OQCE/zgA + g/84AIL/NwCB/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/0oArf9KAKv/SQCq/9TD6v//////////////////////nnrO/0UAof9FAKD/RACe/0QA + nf9DAJz/QwCb/0IAmf9BAJj/QQCX/0AAlf/j2u///////////////////////5l6xP88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv85AIT/OACD/zgAgv9cANX/WwDU/1sA0/9aANH/WQDQ/1kAz/9YAM3/WADM/1cA + y/9XAMn/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC8/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0sAr/9LAK7/SgCt/0oArP/Uw+v//////////////////////556 + z/9GAKL/RQCh/0UAoP9EAJ//RACd/0MAnP9DAJv/QgCZ/0IAmP9BAJf/49rv//////////////////// + //+ZesT/PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/OgCG/zkAhf84AIP/XADW/1wA1f9bANT/WwDT/1oA + 0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RALz/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/SwCv/0sArv9KAK3/1MPr//// + //////////////////+ri9b/azO2/2sztP9qM7P/ajOz/2kzsv9pM7D/aDOv/2gzr/9nM63/ZzOs/+Pa + 7///////////////////////mnrF/z0Aj/89AI7/PACM/zwAi/87AIr/OwCI/zoAh/86AIb/OQCF/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1kA0P9ZAM//WADN/1gAzP9XAMv/VwDJ/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvP9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/0wA + sf9LAK//SwCu/9TD6/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5p6xv8+AJD/PQCP/z0Ajv88AIz/PACL/zsA + iv87AIj/OgCH/zoAhv9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9YAM3/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As/9NALL/TACx/0wAsP/Uw+v///////////////////////////////////////// + //////////////////////////////////////////////////////////////////+aesb/PwCS/z4A + kP89AI//PQCO/zwAjP88AIv/OwCK/zsAiP86AIf/XgDa/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1gAzf9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMD/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/TQCz/00Asv9MALH/1MPs//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////m3rH/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/zwAi/87AIr/OwCJ/18A3P9eANr/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WADN/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwP9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/04Atf9NALP/TQCy/9TD + 7P////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5t6yP9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv88AIz/PACL/zsA + iv9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDA/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t/9OALb/TgC1/00As//Vw+z//////////////////////6yL2f9tM7v/bTO6/2wzuf9sM7f/azO3/2sz + tv9rM7X/ajOz/2ozs/9pM7L/49rw//////////////////////+besj/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//PQCO/zwAjP88AIv/YADe/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0f9aAND/WQDP/1kAzv9YAMz/VwDL/1cAyv9WAMj/VgDH/1UAxv9UAMT/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/TwC3/04Atv9OALX/1cPt//////////////////////+hetT/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/0YAo/9FAKH/RQCg/+Pa8f//////////////////////nHrJ/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/z4Aj/89AI7/PACM/2AA4P9gAN7/XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDR/1oA0P9ZAM//WQDO/1gAzP9XAMv/VwDK/1YAyP9WAMf/VQDG/1QA + xP9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/1AAuf9PALf/TgC2/9XD7f////////////// + ////////oXrU/0sArf9KAKz/SQCq/0kAqf9IAKj/SACn/0cApf9GAKT/RgCj/0UAof/k2vH///////// + /////////////5x6yv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv8+AJD/PgCP/z0Ajv9hAOH/YADg/2AA + 3v9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANH/WgDQ/1kAz/9ZAM7/WADM/1cA + y/9XAMr/VgDI/1YAx/9VAMb/VADE/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu/9QALr/UAC5/08A + t//Vw+3//////////////////////6F61f9LAK7/SwCt/0oArP9JAKr/SQCp/0gAqP9IAKf/RwCl/0YA + pP9GAKP/5Nrx//////////////////////+cesr/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/PwCS/z4A + kP8+AI//YQDi/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/UQC7/1AAuv9QALn/1cPu//////////////////////+hetb/TACw/0sArv9LAK3/SgCs/0kA + qv9JAKn/SACo/0gAp/9HAKX/RgCk/+Ta8f//////////////////////nHrL/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/z8Ak/8/AJL/PgCQ/2IA5P9hAOL/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADV/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyP9WAMf/VQDG/1UA + xf9UAMP/UwDC/1MAwf9SAL//UgC+/1EAvf9RALv/UAC6/9XD7v//////////////////////onrW/0wA + sf9MALD/SwCu/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf/k2vH//////////////////////516 + zP9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9AAJT/PwCT/z8Akv9jAOX/YgDk/2EA4v9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANX/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDI/1YAx/9VAMb/VQDF/1QAw/9TAML/UwDB/1IAv/9SAL7/UQC9/1EAu//Vw+7///////// + /////////////6J61/9NALL/TACx/0wAsP9LAK7/SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/5Nrx//// + //////////////////+desz/RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/QACW/0AAlP8/AJP/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1f9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMj/VgDH/1UAxv9VAMX/VADD/1MAwv9TAMH/UgC//1IA + vv9RAL3/1sPv//////////////////////+ietj/TQC0/00Asv9MALH/TACw/0sArv9LAK3/SgCs/0kA + q/9JAKn/SACo/+Ta8v//////////////////////nXrN/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/0EA + l/9AAJb/QACU/2QA6P9jAOb/YwDl/2IA5P9iAOP/YQDh/2AA4P9gAN//XwDd/18A3P9eANv/XgDZ/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzP9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/9bD7///////////////////////onrY/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf/k2vL//////////////////////516zf9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9CAJj/QQCX/0AAlv9kAOn/ZADo/2MA5v9jAOX/YgDk/2IA4/9hAOH/YADg/2AA + 3/9fAN3/XwDc/14A2/9eANn/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADM/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1IAv//Ww+///////////////////////6N6 + 2f9OALb/TgC1/00AtP9NALL/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/5Nry//////////////////// + //+ees//RgCi/0UAoP9EAJ//RACe/0MAnP9DAJv/QgCa/0IAmP9BAJf/ZQDq/2QA6f9kAOj/YwDm/2MA + 5f9iAOT/YgDj/2EA4f9gAOD/YADf/18A3f9fANz/XgDb/14A2f9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAMz/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/u5zm/9bD + 7//Ww+//1sPv/9XD7v+Za9b/TwC4/04Atv9OALX/TQC0/00Asv9MALH/TACw/0sAr/9LAK3/SgCs/8Wu + 5P/Uw+r/08Pq/9PD6v/Tw+n/lGvK/0YAo/9GAKL/RQCg/0QAn/9EAJ7/QwCc/0MAm/9CAJr/QgCY/2YA + 7P9lAOr/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9SAL//UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCy/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApf9HAKT/RgCj/0YAov9FAKD/RACf/0QA + nv9DAJz/QwCb/0IAmv9mAO3/ZgDs/2UA6v9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN3/XwDc/14A2/9eANr/XQDY/1wA1/9cANb/WwDU/1sA0/9aANL/WgDQ/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAw/9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//RACe/0MAnP9DAJv/ZwDu/2YA7f9mAOz/ZQDq/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3f9fANz/XgDb/14A2v9dANj/XADX/1wA1v9bANT/WwDT/1oA + 0v9aAND/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADD/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/04Atv9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKn/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/0UAn/9EAJ7/QwCc/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDd/18A3P9eANv/XgDa/10A + 2P9cANf/XADW/1sA1P9bANP/WgDS/1oA0P9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMP/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TgC2/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqf9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9FAKD/RQCf/0QA + nv9oAPH/ZwDw/2cA7v9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOH/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9OALb/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCp/0gAqP9IAKf/RwCm/0cA + pP9GAKP/RgCi/0UAoP9FAJ//aADy/2gA8f9nAPD/ZwDu/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4f9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9bANT/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDH/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAuv9QALn/TwC4/08At/9OALX/TQC0/00As/9MALH/TACw/0sAr/9LAK3/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/0YAo/9GAKL/RQCg/2kA9P9oAPL/aADx/2cA8P9nAO7/ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDh/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1sA1P9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMf/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC6/1AAuf9PALj/TwC3/04Atf9NALT/TQCz/0wA + sf9MALD/SwCv/0sArf9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9HAKT/RgCj/0YAov9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/WwDU/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAx/9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALr/UAC5/08A + uP9PALf/TgC1/00AtP9NALP/TACx/0wAsP9LAK//SwCt/0oArP9JAKv/SQCq/0gAqP9IAKf/RwCm/0cA + pP9GAKP/agD2/2oA9f9pAPT/aADy/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5f9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANj/XQDX/1wA1v9cANX/WwDT/1oA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/0gAp/9HAKb/RwCk/2sA+P9qAPb/agD1/2kA9P9oAPL/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDl/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2P9dANf/XADW/1wA1f9bANP/WgDS/1oA0f9ZAM//WQDO/1gAzf9YAMv/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC+/1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/0wA + sf9MALD/SwCv/0sArv9KAKz/SQCr/0kAqv9IAKj/SACn/0cApv9rAPn/awD4/2oA9v9qAPX/aQD0/2gA + 8v9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOX/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDY/10A1/9cANb/XADV/1sA0/9aANL/WgDR/1kAz/9ZAM7/WADN/1gA + y/9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL7/UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TACx/0wAsP9LAK//SwCu/0oArP9JAKv/SQCq/0gAqP9IAKf/bAD6/2sA + +f9rAPj/agD2/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADL/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + vv9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9MALH/TACw/0sAr/9LAK7/SgCs/0kA + q/9JAKr/SACo/2wA/P9sAPr/awD5/2sA+P9qAPb/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZADp/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3P9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAM//WQDO/1gAzf9YAMz/VwDK/1YAyf9WAMj/VQDG/1UA + xf9UAMT/VADC/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9KAKz/SgCr/0kAqv9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9v9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9kAOn/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDc/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kAz/9ZAM7/WADN/1gA + zP9XAMr/VgDJ/1YAyP9VAMb/VQDF/1QAxP9UAML/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC1/04AtP9NALP/TQCy/0wAsP9LAK//SwCu/0oArP9KAKv/bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2QA6f9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fANz/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDP/1kAzv9YAM3/WADM/1cAyv9WAMn/VgDI/1UAxv9VAMX/VADE/1QAwv9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALX/TgC0/00As/9NALL/TACw/0sAr/9LAK7/SgCs/24A + //9uAP//bQD9/2wA/P9sAPr/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDt/2YA + 7P9lAOv/ZQDq/2QA6P9jAOf/YwDm/2IA5P9iAOP/YQDi/2EA4P9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atf9OALT/TQCz/00A + sv9MALD/SwCv/0sArv9uAP//bgD//24A//9tAP3/bAD8/2wA+v9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO3/ZgDs/2UA6/9lAOr/ZADo/2MA5/9jAOb/YgDk/2IA4/9hAOL/YQDg/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA0/9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9VAMb/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC5/08A + uP9PALf/TgC2/04AtP9NALP/TQCy/0wAsP9LAK//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD6/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7f9mAOz/ZQDr/2UA6v9kAOj/YwDn/2MA + 5v9iAOT/YgDj/2EA4v9hAOD/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDT/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1UAxv9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALn/TwC4/08At/9OALb/TgC0/00As/9NALL/TACw/24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANP/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VQDG/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuf9PALj/TwC3/04Atv9OALT/TQCz/00A + sv9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPH/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YgDk/2IA4/9hAOL/YQDh/2AA + 3/9fAN7/XwDd/14A2/9eANr/XQDZ/10A1/9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/TgC2/04AtP9NALP/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8f9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9iAOT/YgDj/2EA4v9hAOH/YADf/18A3v9fAN3/XgDb/14A2v9dANn/XQDX/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAyv9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9RAL3/UQC8/1AAu/9QALr/TwC4/08At/9OALb/TgC0/24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADx/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2IA5P9iAOP/YQDi/2EA4f9gAN//XwDe/18A3f9eANv/XgDa/10A + 2f9dANf/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDK/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1EAvf9RALz/UAC7/1AAuv9PALj/TwC3/04Atv9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bAD8/2wA+/9rAPn/awD4/2oA9/9qAPX/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMr/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UQC9/1EAvP9QALv/UAC6/08A + uP9PALf/bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9sAPz/bAD7/2sA + +f9rAPj/agD3/2oA9f9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOj/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XgDb/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAzv9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAMH/UwDA/1IA + v/9SAL7/UQC8/1AAu/9QALr/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/2wA/P9sAPv/awD5/2sA+P9qAPf/agD1/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6P9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9eANv/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDO/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwf9TAMD/UgC//1IAvv9RALz/UAC7/1AAuv9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9tAP3/bQD8/2wA+/9rAPn/awD4/2oA9/9qAPb/aQD0/2kA + 8/9oAPL/ZwDw/2cA7/9mAO7/ZgDs/2UA6/9lAOr/ZADo/2QA5/9jAOb/YwDl/2IA4/9hAOL/YQDh/2AA + 3/9gAN7/XwDd/14A2/9eANr/XQDZ/10A2P9cANb/XADV/1sA1P9bANL/WgDR/1kA0P9ZAM7/WADN/1gA + zP9XAMv/VwDJ/1YAyP9WAMf/VQDF/1QAxP9UAMP/UwDB/1MAwP9SAL//UgC+/1EAvP9QALv/bgD//24A + //9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/f9tAPz/bAD7/2sA + +f9rAPj/agD3/2oA9v9pAPT/aQDz/2gA8v9nAPD/ZwDv/2YA7v9mAOz/ZQDr/2UA6v9kAOn/ZADn/2MA + 5v9jAOX/YgDj/2EA4v9hAOH/YADf/2AA3v9fAN3/XwDc/14A2v9dANn/XQDY/1wA1v9cANX/WwDU/1sA + 0v9aANH/WQDQ/1kAz/9YAM3/WADM/1cAy/9XAMn/VgDI/1YAx/9VAMX/VADE/1QAw/9TAML/UwDA/1IA + v/9SAL7/UQC8/24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A//9uAP//bgD//24A + //9uAP//bQD9/20A/P9sAPv/awD5/2sA+P9qAPf/agD2/2kA9P9pAPP/aADy/2cA8P9nAO//ZgDu/2YA + 7P9lAOv/ZQDq/2QA6f9kAOf/YwDm/2MA5f9iAOP/YQDi/2EA4f9gAN//YADe/18A3f9fANz/XgDa/10A + 2f9dANj/XADW/1wA1f9bANT/WwDS/1oA0f9ZAND/WQDP/1gAzf9YAMz/VwDL/1cAyf9WAMj/VgDH/1UA + xf9UAMT/VADD/1MAwv9TAMD/UgC//1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA + AABAAAAAgAAAAAEACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAgv85AIT/OgCG/zoA + iP87AIj/PACL/zwAjP89AI7/PgCP/z4AkP8/AJL/QACU/0EAlv9BAJj/QgCZ/0MAm/9DAJz/RACe/0UA + n/9FAKD/RgCi/0YApP9HAKX/SACm/0gAqP9JAKn/SgCr/0oArP9LAK7/TACw/00Asv9NALT/TgC1/08A + t/9PALj/UAC5/1EAu/9RALz/UgC+/2czrP9oM6//aTOx/2ozs/9rM7X/bDO3/2wzuf9tM7r/UwDA/1QA + wv9UAMT/VQDF/1YAx/9WAMj/VwDJ/1gAy/9YAMz/WQDO/1kA0P9aANH/WwDS/1sA1P9cANX/XQDX/10A + 2P9eANr/XwDc/2AA3v9gAOD/YQDh/2IA4/9iAOT/YwDl/2QA5/9kAOj/ZQDq/2YA7P9nAO7/ZwDw/2gA + 8f9pAPP/aQD0/2oA9f9rAPj/bAD6/2wA/P9tAPz/bgD//4trtv+Xer7/mHq//5Brwv+Ua8r/mHrA/5l6 + wv+ZesT/mnrF/5t6x/+besj/nHrK/516y/+desz/nnrO/5lr1v+hetT/onrW/6J62P+jetn/q4vW/6yL + 2f+2nNj/u5zm/8Cu2f/FruT/0MPh/9LD5v/Tw+n/1MPq/9TD7P/Vw+3/1sPv/+La7v/j2u//49rw/+Ta + 8f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + 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 + MTEoJyQkJCQhISEfHx8dHR0aGhoYFxcWFRRQUE9PTU1NTEtJSUhIRUVFRUNDQUFBPz4+PDw7Ojk5NzY2 + NDMzMjExMScnJyQkJCEhIR8fHx0dHRoaGhgYFxYVUlBQT09NTU1MS0lJSEhFRkVDQ0NCQUE/Pj48PDs6 + OTk3NjY2MzMzMTEoJycnJSQkISEhHx8fHR0eGhoaGBgWFlJSUFBPT01NTUxLSUlISEVFRENDQkJBQT4+ + Pjw8Ozo5OTc2NjYzMzExMTEnJyQkJCQhISEfHx8dHR0aGxoYFxdUUlJQUE9PTU1NTEtJSUhIRkVFQ0NC + QUFBPz8+PDw7Ojk5NzY2NjMzMzExKCcnJyQkJCEhIB8fHx0dHRoaGhoYVFRSUlBQT05NTU1MS0lJSEhI + RkVFRENBQUE/Pz48Ozs6OTk3NjY2MzMzMTEoJycnJCQkISIgHx8fHR0eGhoaGFRUVFJSUFBPTk1NTUxL + SUhISEVGRUNDQ0JBQT8/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCQhIiEfHx8dHR0aGhpVVFRUUlJSUE9O + TU1NTEtLSUhIRUZEQ0NEQUFBPz4+Ozw7Ojk5NzY2MzMzMzExMScnJyQkJCEhIR8fHx0dHRsaVlVUVFRS + UlJQT05NTU1MS0tISEhGRUVDQ0NDQUE+Pz49PDs6OTk3NjY2MzMzMTExJycnJSQkISEhIB8fHh0dG1dW + VVRUVFJSUlBPTk1NTUtLS0hISEhGRENDQ0FBQT8/Pj08Ojo5OTk2NjY0MzIxMTEnJyUkJCQhIiEfHx4e + HR1YV1ZVVFRUUlJSUE9OTU1NS0tLSEhIRUVFQ0NDQkFBPz8+PTw7Ojk5OTY2NDQzMjExMScnJyQkJCEh + ISAfHh0dWFhXVlVUVFRSUlJQT05NTU1LS0tISEhIRURDQ0RCQUE/Pj49PDs6OTk3NzY0MzMzMTExKCcn + JCQkISEgIB8fHVhYWFdWVVRUVFJSUlBPTk1NTU1LTEhIRkhFRUNDQ0FBQT4+Pj08Ozo5OTc2NjYzMzMx + MTEnJyclJCQiISEgHx9YWFhYV1ZVVFRUUlJSUE9PTU1LTEtLSEhGSEVFQ0VDQkFBQT4+PTw7Ojk5OTY2 + NjMzMzExMScnJSQkJCQiISAfWFhYWFhXVlZUVFRSUlJQT09NTU1LS0tLSEZIRkVDQ0NBQz5BPj4+PDs6 + OTk5NzY2NDMzMTExJycnJSUhIiIgIFhYWFhYWFdWVlRUVFJSUlBPT09NTUtLSEtIRkZGRUNFQ0FDQT4+ + Pj08Ozo5OTc3NjY0MzIxMTEoJyUkJCQiISBYWFhYWFhYV1ZWVFRUUlJSUE9NT01NTEtLS0hIRkZFQ0ND + QUFBQT4+Pjw7Ojk5Nzc2NjQzMzExMScnJyckJCQhWFhYWFhYWFhXVlZUVFRSUlJQT01NTU5MS0hLSEhG + RkVDQ0NBQUE+Pj4+PDs6OTk3NzY2NDMzMTExKCclJCQkJFhYWFhYWFhYWFdWVlRUVFJSUlJPT01NTktL + S0lJSEZGRURDQ0NBQUE/Pj48Ozo5OTc2NjY0MzIxMTEnJyckJCJYWFhYWFhYWFhYV1ZWVFRUUlJQUk9P + TU1NTEtLSUlIRkZFRENDQUNBPz8+PTw7Ojk5OTY2NjQzMjExMSgnJyQkWFhYWFhYWFhYWFhXVlZUVFRS + UlBQT09NTU5LS0tJSUhGRkVEQ0NBQUE/Pz49PDs6OTk5NjY2NDMyMTEyJycnJ1hYWFhYWFhYWFhYWFdX + VlRUVFRSUlBPT01NTUxLS0lJSEZGRURDQ0JBQT8/Pj08Ozo5OTk3NjU0MzIxMTEoJyVYWFhYWFhYWFhY + WFhYV1dVVFRTVFJRUE9PTU1MTEtLSUlHRkZERENDQkFBPz8+PTw7Ojk5Nzc2NTQzMzExKCgnWFhYWFhY + WFhYWFhYWFhXV1VUVFNTUlFQT05NTUxMS0pJSUdGRkREQ0NCQUE/Pz49PDs6OTk3NzY1NDMyMTEoKAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MA + nf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcA + f/83AH//NwB//zcAf/83AH//UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oArP9JAKr/SACn/0cA + pf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OgCI/zkAhf84AIP/NwCA/zcA + f/83AH//NwB//zcAf/83AH//NwB//zcAf/9TAMH/UgC//1EAvP9QALn/TwC3/04AtP9NALL/SwCv/0oA + rP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0Ajf88AIv/OwCI/zkA + hf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//NwB//1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04A + tP9NALL/SwCv/0oArP9JAKr/SACn/0cApf9GAKL/RQCf/0MAnf9CAJr/QQCY/0AAlf8/AJL/PgCQ/z0A + jf88AIv/OwCI/zkAhf84AIP/NwCA/zcAf/83AH//NwB//zcAf/83AH//VgDH/1QAxP9TAMH/UgC//1EA + vP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/RQCg/2AnrP+KYsD/imK//1Qb + oP8/AJP/PgCQ/z0Ajf88AIv/XCyc/4VitP+EYrL/TBuN/zcAf/83AH//NwB//zcAf/9XAMn/VgDH/1QA + xP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cApf9GAKL/jGLE//// + ////////bj2w/0AAlf8/AJP/PgCQ/z0Ajf+Pbb3///////////9oPaD/NwCA/zcAf/83AH//NwB//1gA + zP9XAMn/VgDH/1QAxP9TAMH/UgC//1EAvP9QALr/TwC3/04AtP9NALL/SwCv/0oArf9JAKr/SACn/0cA + pf+NYsb///////////9vPbL/QQCY/0AAlf8/AJP/PgCQ/5Btvv///////////2k9ov84AIP/NwCA/zcA + f/83AH//WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/0oA + rf9JAKr/SACo/41ix////////////3A9tP9DAJv/QQCY/0AAlf8/AJP/kG2/////////////aT2k/zoA + hv84AIP/NwCA/zcAf/9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EAvP9QALr/TwC3/04A + tf9NALL/SwCv/0oArf9JAKr/jmLJ////////////cT22/0QAnf9DAJv/QQCY/0AAlf+RbcH///////// + //9qPaf/OwCI/zoAhv84AIP/NwCB/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QAxP9TAML/UgC//1EA + vP9QALr/TwC3/04Atf9NALL/SwCv/0oArf+PYsv///////////9yPbj/RQCg/0QAnf9DAJv/QgCY/5Jt + w////////////2s9qf88AIv/OwCI/zoAhv84AIP/XADX/1sA1P9aANH/WQDP/1gAzP9XAMn/VgDH/1QA + xP9TAML/UgC//1EAvP9QALr/TwC3/04Atf9NALL/SwCv/49izP///////////8Wv4/+1mdn/tJnZ/7SZ + 1/+zmdf/0sPm////////////bD2r/z0Ajv88AIv/OwCI/zoAhv9eANn/XADX/1sA1P9aANH/WQDP/1gA + zP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf9NALL/kGLO//////////////////// + //////////////////////////////////9tPa3/PgCQ/z0Ajv88AIv/OwCJ/18A3P9eANn/XADX/1sA + 1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/04Atf+RYs////////// + ///Gr+X/tpnc/7WZ2/+1mdr/tZnZ/9PD6P///////////249r/8/AJP/PgCQ/z0Ajv88AIv/YADe/18A + 3P9eANn/XADX/1sA1P9aANH/WQDP/1gAzP9XAMr/VgDH/1QAxP9TAML/UgC//1EAvf9QALr/TwC3/5Ji + 0f///////////3Y9wP9JAKr/SACo/0cApf9GAKP/lG3J////////////bz2x/0AAlv8/AJP/PgCQ/z0A + jv9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9TAML/UgC//1EA + vf9QALr/kmLT////////////dj3C/0sArf9JAKr/SACo/0cApf+Vbcr///////////9vPbP/QgCY/0AA + lv8/AJP/PgCQ/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UA + xf9TAML/UgC//1EAvf+TYtT///////////93PcT/TACw/0sArf9JAKv/SACo/5ZtzP///////////3A9 + tf9DAJv/QgCY/0AAlv8/AJP/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA1P9aANL/WQDP/1gA + zP9XAMr/VgDH/1UAxf9UAML/UgC//5Ri1v///////////3g9xv9NALL/TACw/0sArf9JAKv/lm3N//// + ////////cT22/0QAnv9DAJv/QgCY/0AAlv9kAOn/YwDm/2IA5P9hAOH/YADf/18A3P9eANn/XADX/1sA + 1P9aANL/WQDP/1gAzP9XAMr/VgDH/1UAxf9UAML/jljV/+vh9//q4ff/djnH/04Atf9NALL/TACw/0sA + rf+PYsv/6eH1/+nh9P9wObj/RQCg/0QAnv9DAJv/QgCY/2YA7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A + 3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04A + tf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9DAJv/ZwDu/2YA7P9kAOn/YwDn/2IA + 5P9hAOH/YADf/18A3P9eANr/XADX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UAxf9UAML/UwDA/1EA + vf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/0QAnv9oAPH/ZwDu/2YA + 7P9kAOn/YwDn/2IA5P9hAOH/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gAzf9XAMr/VgDH/1UA + xf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cApv9GAKP/RQCg/2kA + 9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1sA1P9aANL/WQDP/1gA + zf9XAMr/VgDH/1UAxf9UAML/UwDA/1EAvf9QALr/TwC4/04Atf9NALP/TACw/0sArf9JAKv/SACo/0cA + pv9GAKP/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A3P9eANr/XQDX/1wA + 1f9aANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sA + rv9JAKv/SACo/0cApv9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA5P9hAOL/YADf/18A + 3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EAvf9QALv/TwC4/04A + tf9NALP/TACw/0sArv9JAKv/SACo/2wA/P9rAPn/agD2/2kA9P9oAPH/ZwDv/2YA7P9kAOn/YwDn/2IA + 5P9hAOL/YADf/18A3P9eANr/XQDX/1wA1f9bANL/WQDP/1gAzf9XAMr/VgDI/1UAxf9UAML/UwDA/1EA + vf9QALv/TwC4/04Atf9NALP/TACw/0sArv9KAKv/bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA + 7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UA + xf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atf9NALP/TACw/0sArv9uAP//bgD//2wA/P9rAPn/agD3/2kA + 9P9oAPH/ZwDv/2YA7P9lAOr/YwDn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gA + zf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/TACw/24A//9uAP//bgD//2wA + /P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A3f9eANr/XQDX/1wA + 1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04Atv9NALP/bgD//24A + //9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPH/ZwDv/2YA7P9lAOr/ZADn/2IA5P9hAOL/YADf/18A + 3f9eANr/XQDX/1wA1f9bANL/WQDQ/1gAzf9XAMr/VgDI/1UAxf9UAMP/UwDA/1EAvf9QALv/TwC4/04A + tv9uAP//bgD//24A//9uAP//bgD//2wA/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA + 5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IA + vv9QALv/TwC4/24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA9P9oAPL/ZwDv/2YA + 7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gAzf9XAMv/VgDI/1UA + xf9UAMP/UwDA/1IAvv9QALv/bgD//24A//9uAP//bgD//24A//9uAP//bgD//20A/P9rAPn/agD3/2kA + 9P9oAPL/ZwDv/2YA7P9lAOr/ZADn/2MA5f9hAOL/YADf/18A3f9eANr/XQDY/1wA1f9bANL/WQDQ/1gA + zf9XAMv/VgDI/1UAxf9UAMP/UwDA/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAA + AAAAAAAAAAAAAAAAAAA3AH//NwCA/zgAg/85AIX/OgCG/zoAiP87AIj/PACL/z0Ajf8+AJD/PwCS/0wb + jf9AAJX/QQCY/0IAmP9DAJv/QwCd/0QAnf9FAJ//XCyc/0UAoP9GAKL/RwCl/0gAp/9IAKj/SQCq/0oA + q/9KAKz/SwCu/1QboP9MALD/TQCy/04AtP9PALf/TwC4/1AAuv9RALz/UgC+/2AnrP9oPaD/aT2i/2k9 + pP9qPaf/az2p/2w9q/9tPa3/bj2v/249sP9vPbL/cD20/3E9tv9wObj/cj24/1MAwP9UAML/VADE/1UA + xf9WAMf/VgDI/1cAyf9YAMz/WQDP/1kA0P9aANH/WwDS/1sA1P9cANb/XQDX/10A2P9eANn/XwDc/2AA + 3v92PcH/djnH/3c9xP94Pcb/YQDh/2IA5P9jAOb/ZADn/2QA6f9lAOr/ZgDs/2cA7v9oAPH/aQD0/2oA + 9v9rAPn/bAD8/20A/P9uAP//hGKy/4VitP+KYr//j229/5Btvv+OWNX/imLA/4xixP+NYsb/jmLJ/49i + y/+PYsz/kW3B/5Jtw/+QYs7/kWLP/5Rtyf+Vbcr/lm3M/5Ji0v+TYtT/lGLW/7OZ1/+0mdf/tJnZ/7WZ + 2f+2mdz/xa/j/8av5f/Sw+b/08Po/+nh9P/q4ff/6+H3//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAAJCIiIB8cGxkYFhUUEA0NDAwJCAcFAwIBAQAAAAAAAAA1JCIiICAcGxkY + FhUUEA0NDAoJCAcFAwIBAAAAAAAAADU1JCIiIB8eGxkYFhUUEA8NDAoJCAcGAwIBAAAAAAAANzU1JCIi + IB8cGxkYFhUUEA0NDAoJCAcGAwIBAAAAAAA5NzU1JCIiHx8eHBkYFhUUJmFdHQoJCAcTXFsLAAAAADs5 + NzU1JCMiIB8cGxkYFhVifX0vDAoJCF59fScBAAAAPDs6NzU1JCMiHx8eGxkYFmN9fTANDAoJX319KAMB + AQA+PDo6NzUlJCMiIB8cGxkYY319MQ8NDApffX0pAwMBAT8+PDo6NzYlJCMiICAeGxlkfX0yEQ8NDGd9 + fSoFAwIBQT4+PDo6NzclJCMiIB8eHGV9fTQUEA8NaH19KwcFAwJCQT4+PDo6NzYlJCMgIB8bZn19dnRz + cnF4fX0sCAcFBUVEQT4+PDo6Nzc1JCQiICBpfX19fX19fX19fS0KCAgGRkVEQT4+PDs6NzU1JCMiIGl9 + fXZ1dXNzeX19LwoKCAZHRkREQT4+PDs6NzckJSMibn19SBkYFhVrfX0wDAoJCUxHR0REQT4+PDo6ODc1 + JSJvfX1KGxkYFmt9fTANDAwJTUxHR0REQT8+PDo6ODU1JG99fUoeGxsYbX19MhANDAlOTUxHR0REQT89 + PDs4ODY1cH19SiAeGxltfX0yEBANDVBOTUxHR0REQUE+PDw6ODZgfHtJICAeHGZ7ejMUEBAOUlBPTUxH + R0REQT4+PDs6ODY1JCQiICAeGxkYFhUUEA5TUlBPTUxHRkREQT8+PDs6ODY1JCMiICAeGxsYGBUVFFRT + UlBPTUxMRkREQT8+PDs6ODc1JCMiICAeGxkYGBQUVVRTUVBPTUxMRkREQT8+PDs6ODY1JCMiICAeHBkY + GBRWVVRUUVBPTUxMRkVEQj89PDs6Nzc1JCQiICAeHBkYGFdWVVRUUVBPTUxMRkVEQkA9PDs6ODc1JCQi + ICAeHBgYWFdWVVRUUVBPTUxHRkRCQkA9PDw6ODc1JCQiICAeHhtaWFdWVVRUUVFPTUxHRkZCQkA+PDs6 + ODc1JCQiIB8eG1paWFdWVVRUUVBPTUxMRkZCQkA+PDs6ODc1JCQiIR4eWlpaWFdWVVRUUlFQTUxHRkZE + QkA+PDs6Nzc1JCQiIiBaWlpaWFdWVVRUUVFQTUxHRkRCQkA9PDs6Nzc1JCQiIFpaWlpaWFdWVVRUUVFP + TkxHRkZEQkA9PDw6ODY1JSMiWlpaWlpaWVdWVVRUUlFPTkxMRkVEQkA+PDw6ODY1JSNaWlpaWlpaWVdW + VVRTUlFPTkxHRkVEQkA+PDs6ODY1JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAFEAvP9PALf/TQCy/0oArP9IAKf/RgCi/0MAnf9BAJj/PwCS/z0Ajf86AIj/OACD/zcA + f/83AH//NwB//zcAf/9TAMH/UQC8/08At/9NALL/SgCs/0gAp/9GAKL/QwCd/0EAmP8/AJL/PQCN/zsA + iP84AIP/NwB//zcAf/83AH//VgDH/1MAwf9RALz/TwC3/00Asv9KAK3/SACn/0YAov+desz/k27D/z8A + k/89AI3/nH7D/45uuP83AH//NwB//1gAzP9WAMf/UwDC/1EAvP9PALf/TQCy/0oArf9IAKf/xrDj/7ee + 2f9BAJj/PwCT/8e23/+0ntH/OACD/zcAf/9aANH/WADM/1YAx/9TAML/UQC8/08At/9NALL/SgCt/8ew + 5f+4ntv/RACd/0EAmP/ItuD/tZ7T/zsAiP84AIP/XADX/1oA0f9YAMz/VgDH/1MAwv9RAL3/TwC3/00A + sv/HsOb/8ev4/9rM7P/ZzOv/9PD5/7ae1f89AI7/OwCI/18A3P9cANf/WgDR/1gAzP9WAMf/UwDC/1EA + vf9PALf/yLDo/8676f9/TcL/fk2//9nL7P+3ntf/PwCT/z0Ajv9hAOH/XwDc/1wA1/9aANL/WADM/1YA + x/9TAML/UQC9/8mw6f+7nuH/SwCt/0gAqP/KtuX/t57Z/0IAmP8/AJP/YwDm/2EA4f9fANz/XADX/1oA + 0v9YAMz/VgDH/1QAwv/Dpuj/tpbh/00Asv9LAK3/w6zj/7KW2P9EAJ7/QgCY/2YA7P9jAOf/YQDh/18A + 3P9cANf/WgDS/1gAzf9WAMf/VADC/1EAvf9PALj/TQCz/0sArf9IAKj/RgCj/0QAnv9oAPH/ZgDs/2MA + 5/9hAOH/XwDc/10A1/9aANL/WADN/1YAx/9UAML/UQC9/08AuP9NALP/SwCt/0gAqP9GAKP/agD2/2gA + 8f9mAOz/YwDn/2EA4v9fANz/XQDX/1oA0v9YAM3/VgDI/1QAwv9RAL3/TwC4/00As/9LAK7/SACo/2wA + /P9qAPf/aADx/2YA7P9jAOf/YQDi/18A3P9dANf/WwDS/1gAzf9WAMj/VADC/1EAvf9PALj/TQCz/0sA + rv9uAP//bAD8/2oA9/9oAPH/ZgDs/2QA5/9hAOL/XwDd/10A1/9bANL/WADN/1YAyP9UAMP/UQC9/08A + uP9NALP/bgD//24A//9sAPz/agD3/2gA8v9mAOz/ZADn/2EA4v9fAN3/XQDY/1sA0v9YAM3/VgDI/1QA + w/9RAL3/TwC4/24A//9uAP//bgD//20A/P9qAPf/aADy/2YA7P9kAOf/YQDi/18A3f9dANj/WwDS/1gA + zf9WAMj/VADD/1IAvv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAADcA + f/84AIP/OgCI/zsAiP89AI3/PwCS/0EAmP9CAJj/QwCd/0QAnf9GAKL/SACn/0gAqP9KAKz/SwCt/00A + sv9PALf/TwC4/1EAvP9SAL7/fk2//1MAwf9UAML/VgDH/1YAyP9YAMz/WgDR/1sA0v9cANf/XQDX/10A + 2P9fANz/YQDh/2MA5v9kAOf/ZgDs/2gA8f9qAPb/bAD8/20A/P9uAP//f03C/45uuP+TbsP/nH7D/516 + zP+0ntH/tZ7T/7ae1f+3ntf/spbY/7ee2f+4ntv/tpbh/7ue4f/Htt//w6zj/8Om6P/GsOP/x7Dl/8i2 + 4P/KtuX/yLDo/8mw6f/Ou+n/2czr/9nL7P/azOz/8ev4//Tw+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAASEA8NDAoIBgUEAgEAAAAAFRIRDw0MCggGBQQCAQAAABcVEhAPDQwKLSsFBCwqAAAZGBUTEQ8NDDoz + BgU3LgAAGhkYFRIRDw07NAkGNy8CARwaGRgVEhEPPkRDQUUwBQMfHBoZGBUTET5AKRRBMQUEIB8cGhkY + FRI/Ng4MPTMHBSEgHxwbGRgWOTUPDTgyCAYjIiAfHBoZGBYSERANDAoIJCMiIB8eGxkYFhIREA0MCyUk + IyIgHx4aGRgWEhEQDQwmJSQjIiAfHhsZGBYSERAOKCYlJCMiIB8eGxkYFhIRDygoJiUkIyIgHx4bGRgW + EhEoKCgnJSQjIiAfHhsZGBYTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + \ No newline at end of file diff --git a/HudsonTrayTracker/UI/TrayNotifier.Designer.cs b/JenkinsTray/UI/TrayNotifier.Designer.cs similarity index 97% rename from HudsonTrayTracker/UI/TrayNotifier.Designer.cs rename to JenkinsTray/UI/TrayNotifier.Designer.cs index ce7665d..fe2f51b 100644 --- a/HudsonTrayTracker/UI/TrayNotifier.Designer.cs +++ b/JenkinsTray/UI/TrayNotifier.Designer.cs @@ -1,114 +1,114 @@ -namespace Hudson.TrayTracker.UI -{ - partial class TrayNotifier - { - /// - /// 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 Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrayNotifier)); - this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components); - this.notifyContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.openMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.settingsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.notifyContextMenuStrip.SuspendLayout(); - // - // notifyIcon - // - this.notifyIcon.ContextMenuStrip = this.notifyContextMenuStrip; - this.notifyIcon.Text = "Jenkins Tray"; - this.notifyIcon.Visible = true; - this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon_MouseDoubleClick); - // - // notifyContextMenuStrip - // - this.notifyContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openMenuItem, - this.settingsMenuItem, - this.refreshMenuItem, - this.aboutMenuItem, - this.exitMenuItem}); - this.notifyContextMenuStrip.Name = "notifyContextMenuStrip"; - this.notifyContextMenuStrip.Size = new System.Drawing.Size(117, 114); - // - // openMenuItem - // - this.openMenuItem.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); - this.openMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openMenuItem.Image"))); - this.openMenuItem.Name = "openMenuItem"; - this.openMenuItem.Size = new System.Drawing.Size(116, 22); - this.openMenuItem.Text = "Open"; - this.openMenuItem.Click += new System.EventHandler(this.openMenuItem_Click); - // - // settingsMenuItem - // - this.settingsMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("settingsMenuItem.Image"))); - this.settingsMenuItem.Name = "settingsMenuItem"; - this.settingsMenuItem.Size = new System.Drawing.Size(116, 22); - this.settingsMenuItem.Text = "Settings"; - this.settingsMenuItem.Click += new System.EventHandler(this.settingsMenuItem_Click); - // - // refreshMenuItem - // - this.refreshMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("refreshMenuItem.Image"))); - this.refreshMenuItem.Name = "refreshMenuItem"; - this.refreshMenuItem.Size = new System.Drawing.Size(116, 22); - this.refreshMenuItem.Text = "Refresh"; - this.refreshMenuItem.Click += new System.EventHandler(this.refreshMenuItem_Click); - // - // aboutMenuItem - // - this.aboutMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("aboutMenuItem.Image"))); - this.aboutMenuItem.Name = "aboutMenuItem"; - this.aboutMenuItem.Size = new System.Drawing.Size(116, 22); - this.aboutMenuItem.Text = "About"; - this.aboutMenuItem.Click += new System.EventHandler(this.aboutMenuItem_Click); - // - // exitMenuItem - // - this.exitMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("exitMenuItem.Image"))); - this.exitMenuItem.Name = "exitMenuItem"; - this.exitMenuItem.Size = new System.Drawing.Size(116, 22); - this.exitMenuItem.Text = "Exit"; - this.exitMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - this.notifyContextMenuStrip.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.NotifyIcon notifyIcon; - private System.Windows.Forms.ContextMenuStrip notifyContextMenuStrip; - private System.Windows.Forms.ToolStripMenuItem openMenuItem; - private System.Windows.Forms.ToolStripMenuItem refreshMenuItem; - private System.Windows.Forms.ToolStripMenuItem exitMenuItem; - private System.Windows.Forms.ToolStripMenuItem settingsMenuItem; - private System.Windows.Forms.ToolStripMenuItem aboutMenuItem; - } -} +namespace Jenkins.Tray.UI +{ + partial class TrayNotifier + { + /// + /// 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 Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrayNotifier)); + this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.notifyContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.openMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.refreshMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.notifyContextMenuStrip.SuspendLayout(); + // + // notifyIcon + // + this.notifyIcon.ContextMenuStrip = this.notifyContextMenuStrip; + this.notifyIcon.Text = "Jenkins Tray"; + this.notifyIcon.Visible = true; + this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon_MouseDoubleClick); + // + // notifyContextMenuStrip + // + this.notifyContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openMenuItem, + this.settingsMenuItem, + this.refreshMenuItem, + this.aboutMenuItem, + this.exitMenuItem}); + this.notifyContextMenuStrip.Name = "notifyContextMenuStrip"; + this.notifyContextMenuStrip.Size = new System.Drawing.Size(117, 114); + // + // openMenuItem + // + this.openMenuItem.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold); + this.openMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openMenuItem.Image"))); + this.openMenuItem.Name = "openMenuItem"; + this.openMenuItem.Size = new System.Drawing.Size(116, 22); + this.openMenuItem.Text = "Open"; + this.openMenuItem.Click += new System.EventHandler(this.openMenuItem_Click); + // + // settingsMenuItem + // + this.settingsMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("settingsMenuItem.Image"))); + this.settingsMenuItem.Name = "settingsMenuItem"; + this.settingsMenuItem.Size = new System.Drawing.Size(116, 22); + this.settingsMenuItem.Text = "Settings"; + this.settingsMenuItem.Click += new System.EventHandler(this.settingsMenuItem_Click); + // + // refreshMenuItem + // + this.refreshMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("refreshMenuItem.Image"))); + this.refreshMenuItem.Name = "refreshMenuItem"; + this.refreshMenuItem.Size = new System.Drawing.Size(116, 22); + this.refreshMenuItem.Text = "Refresh"; + this.refreshMenuItem.Click += new System.EventHandler(this.refreshMenuItem_Click); + // + // aboutMenuItem + // + this.aboutMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("aboutMenuItem.Image"))); + this.aboutMenuItem.Name = "aboutMenuItem"; + this.aboutMenuItem.Size = new System.Drawing.Size(116, 22); + this.aboutMenuItem.Text = "About"; + this.aboutMenuItem.Click += new System.EventHandler(this.aboutMenuItem_Click); + // + // exitMenuItem + // + this.exitMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("exitMenuItem.Image"))); + this.exitMenuItem.Name = "exitMenuItem"; + this.exitMenuItem.Size = new System.Drawing.Size(116, 22); + this.exitMenuItem.Text = "Exit"; + this.exitMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + this.notifyContextMenuStrip.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.NotifyIcon notifyIcon; + private System.Windows.Forms.ContextMenuStrip notifyContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem openMenuItem; + private System.Windows.Forms.ToolStripMenuItem refreshMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitMenuItem; + private System.Windows.Forms.ToolStripMenuItem settingsMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutMenuItem; + } +} diff --git a/HudsonTrayTracker/UI/TrayNotifier.cs b/JenkinsTray/UI/TrayNotifier.cs similarity index 90% rename from HudsonTrayTracker/UI/TrayNotifier.cs rename to JenkinsTray/UI/TrayNotifier.cs index c0cc720..8d00352 100644 --- a/HudsonTrayTracker/UI/TrayNotifier.cs +++ b/JenkinsTray/UI/TrayNotifier.cs @@ -1,520 +1,520 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using Hudson.TrayTracker.BusinessComponents; -using Common.Logging; -using System.Reflection; -using Hudson.TrayTracker.Entities; -using Hudson.TrayTracker.Utils.Logging; -using Iesi.Collections.Generic; -using DevExpress.XtraEditors; -using Hudson.TrayTracker.Utils; -using Spring.Context.Support; -using DevExpress.Utils; - -namespace Hudson.TrayTracker.UI -{ - public partial class TrayNotifier : Component - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public static readonly int MAX_TOOLTIP_LENGTH = 127; - public static readonly int BALLOON_TOOLTIP_TIMEOUT = 5000; - - public static TrayNotifier Instance - { - get - { - TrayNotifier instance = (TrayNotifier)ContextRegistry.GetContext().GetObject("TrayNotifier"); - return instance; - } - } - - BuildStatus lastBuildStatus; - IDictionary lastProjectsBuildDetails = new Dictionary(); - IDictionary acknowledgedStatusByProject = new Dictionary(); - IDictionary iconsByKey; - - public ConfigurationService ConfigurationService { get; set; } - public HudsonService HudsonService { get; set; } - public ProjectsUpdateService UpdateService { get; set; } - public NotificationService NotificationService { get; set; } - - public TrayNotifier() - { - InitializeComponent(); - LoadIcons(); - } - - public void Initialize() - { - ConfigurationService.ConfigurationUpdated += configurationService_ConfigurationUpdated; - UpdateService.ProjectsUpdated += updateService_ProjectsUpdated; - - Disposed += delegate - { - ConfigurationService.ConfigurationUpdated -= configurationService_ConfigurationUpdated; - UpdateService.ProjectsUpdated -= updateService_ProjectsUpdated; - }; - } - - void configurationService_ConfigurationUpdated() - { - UpdateNotifier(); - } - -#if false - private delegate void ProjectsUpdatedDelegate(); - private void updateService_ProjectsUpdated() - { - Delegate del = new ProjectsUpdatedDelegate(OnProjectsUpdated); - MainForm.Instance.BeginInvoke(del); - } - private void OnProjectsUpdated() - { - UpdateGlobalStatus(); - } -#else - private void updateService_ProjectsUpdated() - { - UpdateNotifier(); - } -#endif - - // FIXME: the framework doesn't fire correctly MouseClick and MouseDoubleClick, - // so this is deactivated - private void notifyIcon_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) - return; - - try - { - // order the projects by build status - var projectsByStatus = new Dictionary>(); - foreach (KeyValuePair pair in lastProjectsBuildDetails) - { - BuildStatusEnum status = BuildStatusEnum.Unknown; - if (pair.Value != null) - status = BuildStatusUtils.DegradeStatus(pair.Value.Status).Value; - SortedSet projects = new SortedSet(); - if (projectsByStatus.TryGetValue(status, out projects) == false) - { - projects = new SortedSet(); - projectsByStatus.Add(status, projects); - } - projects.Add(pair.Key); - } - - StringBuilder text = new StringBuilder(); - string prefix = null; - foreach (KeyValuePair> pair in projectsByStatus) - { - // don't display successful projects unless this is the only status - if (pair.Key == BuildStatusEnum.Successful || projectsByStatus.Count == 1) - continue; - - if (prefix != null) - text.Append(prefix); - string statusText = HudsonTrayTrackerResources.ResourceManager - .GetString("BuildStatus_" + pair.Key.ToString()); - text.Append(statusText); - foreach (Project project in pair.Value) - { - text.Append("\n - ").Append(project.Name); - - BuildDetails lastFailedBuild = project.LastFailedBuild; - if (lastFailedBuild != null && lastFailedBuild.Users != null && lastFailedBuild.Users.Count > 0) - { - string users = StringUtils.Join(lastFailedBuild.Users, ", "); - text.Append(" (").Append(users).Append(")"); - } - } - prefix = "\n"; - } - - string textToDisplay = text.ToString(); - if (string.IsNullOrEmpty(textToDisplay)) - textToDisplay = HudsonTrayTrackerResources.DisplayBuildStatus_NoProjects; - notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, HudsonTrayTrackerResources.DisplayBuildStatus_Caption, - textToDisplay, ToolTipIcon.Info); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - } - } - - private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) - return; - - MainForm.ShowOrFocus(); - } - - private void openMenuItem_Click(object sender, EventArgs e) - { - MainForm.ShowOrFocus(); - } - - private void refreshMenuItem_Click(object sender, EventArgs e) - { - UpdateService.UpdateProjects(); - } - - private void settingsMenuItem_Click(object sender, EventArgs e) - { - MainForm.Instance.Show(); - SettingsForm.ShowDialogOrFocus(); - } - - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - MainForm.Instance.Exit(); - } - - private void aboutMenuItem_Click(object sender, EventArgs e) - { - MainForm.Instance.Show(); - AboutForm.ShowDialogOrFocus(); - } - - public void UpdateNotifier() - { - try - { - DoUpdateNotifier(); - } - catch (Exception ex) - { - LoggingHelper.LogError(logger, ex); - UpdateIcon(BuildStatus.UNKNOWN_BUILD_STATUS); - } - } - - public void UpdateNotifierStartup() - { - UpdateIcon(BuildStatus.UNKNOWN_BUILD_STATUS); - notifyIcon.Text = Assembly.GetExecutingAssembly().GetName().Name + " " + - FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion; - } - - private void DoUpdateNotifier() - { - BuildStatusEnum? worstBuildStatus = null; - bool buildInProgress = false; - bool buildIsStuck = false; - var errorProjects = new HashedSet(); - var regressingProjects = new HashedSet(); - var progressingAndErrorProjects = new HashedSet(); - var interestingProjects = new HashedSet(); - - foreach (Server server in ConfigurationService.Servers) - { - foreach (Project project in server.Projects) - { - BuildStatus status = GetProjectStatus(project); - if (worstBuildStatus == null || status.Value > worstBuildStatus) - worstBuildStatus = status.Value; - if (status.Value >= BuildStatusEnum.Failed) - errorProjects.Add(project); - if (status.Value > BuildStatusEnum.Successful) - progressingAndErrorProjects.Add(project); - if (status.IsInProgress) - { - buildInProgress = true; - progressingAndErrorProjects.Add(project); - } - if (status.IsStuck) - buildIsStuck = true; - if (IsRegressing(project)) - regressingProjects.Add(project); - lastProjectsBuildDetails[project] = project.AllBuildDetails; - - if (project.Activity.HasBuildActivity) - { - interestingProjects.Add(project); - } - } - } - - if (worstBuildStatus == null) - worstBuildStatus = BuildStatusEnum.Unknown; - -#if false // tests - lastBuildStatus++; - if (lastBuildStatus > BuildStatus.Failed_BuildInProgress) - lastBuildStatus = 0; - worstBuildStatus = lastBuildStatus; - Console.WriteLine("tray:"+lastBuildStatus); -#endif - - BuildStatus buildStatus = new BuildStatus(worstBuildStatus.Value, buildInProgress, buildIsStuck); - - UpdateIcon(buildStatus); - UpdateBalloonTip(errorProjects, regressingProjects); - UpdateTrayTooltip(progressingAndErrorProjects); - ShowBallowTip(interestingProjects); - - lastBuildStatus = buildStatus; - } - - private BuildStatus GetProjectStatus(Project project) - { - BuildStatus status = project.Status; - BuildStatus acknowledgedStatus = GetAcknowledgedStatus(project); - if (project.IsAcknowledged || (acknowledgedStatus != null)) - { - if (project.IsAcknowledged || (status.Value == acknowledgedStatus.Value)) - return new BuildStatus(BuildStatusEnum.Successful, false, false); - else if (status.Value != BuildStatusEnum.Unknown && BuildStatusUtils.IsWorse(acknowledgedStatus, status)) - ClearAcknowledgedStatus(project); - } - return status; - } - - private bool IsRegressing(Project project) - { - AllBuildDetails lastBuildDetails; - if (lastProjectsBuildDetails.TryGetValue(project, out lastBuildDetails) == false - || lastBuildDetails == null) - return false; - AllBuildDetails newBuildDetails = project.AllBuildDetails; - if (newBuildDetails == null) - return false; - - // moving from unknown/aborted to successful should not be considered as a regression - if (newBuildDetails.Status.Value <= BuildStatusEnum.Successful) - return false; - - bool res = BuildStatusUtils.IsWorse(newBuildDetails.Status, lastBuildDetails.Status); - return res; - } - - private void UpdateTrayTooltip(ICollection progressingAndErrorProjects) - { - StringBuilder tooltipText = new StringBuilder(); - string prefix = null; - - if (progressingAndErrorProjects != null && progressingAndErrorProjects.Count > 0) - { - foreach (Project project in progressingAndErrorProjects) - { - if (project.IsAcknowledged) - continue; - lock (acknowledgedStatusByProject) - { - if (acknowledgedStatusByProject.ContainsKey(project)) - continue; - } - if (prefix != null) - tooltipText.Append(prefix); - BuildStatus status = GetProjectStatus(project); - BuildDetails buildDetails = project.LastBuild; - if ((status.IsInProgress) && (status.Value == BuildStatusEnum.Failed)) - { - tooltipText.Append(string.Format(HudsonTrayTrackerResources.Tooltip_Failed_And_InProgress, project.Name)); - } - else if (status.IsInProgress) - { - tooltipText.Append(string.Format(HudsonTrayTrackerResources.Tooltip_InProgress, project.Name)); - } - else - { - tooltipText.Append(string.Format(HudsonTrayTrackerResources.Tooltip_BuildStatus, project.Name, status.Value.ToString())); - } - prefix = "\n"; - if (tooltipText.ToString().Length > MAX_TOOLTIP_LENGTH) - break; - } - } - else - { - tooltipText.Append(HudsonTrayTrackerResources.Tooltip_AllGood); - } - prefix = tooltipText.ToString(); - SetNotifyIconText(notifyIcon, prefix); - } - - public void ShowBallowTip(ICollection interestingProjects) - { - foreach (Project project in interestingProjects) - { - try - { - CaptionAndMessage info = project.Activity.ActivityDetails; - - // Need a queue so no events are skipped - notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, info.Caption, info.Message, info.Icon); - } - catch(Exception ex) - { - LoggingHelper.LogError(logger, ex); - } - } - } - - private void UpdateBalloonTip(ICollection errorProjects, ICollection regressingProjects) - { - if (lastBuildStatus != null && lastBuildStatus.Value < BuildStatusEnum.Failed - && errorProjects != null && errorProjects.Count > 0) - { - StringBuilder errorProjectsText = new StringBuilder(); - string prefix = null; - foreach (Project project in errorProjects) - { - if (prefix != null) - errorProjectsText.Append(prefix); - BuildDetails buildDetails = project.LastFailedBuild; - if (buildDetails == null) - logger.Warn("No details for the last failed build of project in error: " + project.Url); - ISet users = buildDetails != null ? buildDetails.Users : null; - FormatProjectDetails(project.Name, users, errorProjectsText); - prefix = "\n"; - } - - notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, HudsonTrayTrackerResources.BuildFailed_Caption, - errorProjectsText.ToString(), ToolTipIcon.Error); - } - else if (regressingProjects != null && regressingProjects.Count > 0) - { - StringBuilder regressingProjectsText = new StringBuilder(); - string prefix = null; - foreach (Project project in regressingProjects) - { - if (prefix != null) - regressingProjectsText.Append(prefix); - BuildDetails buildDetails = project.AllBuildDetails.LastCompletedBuild; - if (buildDetails == null) - logger.Warn("No details for the last failed build of project in error: " + project.Url); - ISet users = buildDetails != null ? buildDetails.Users : null; - FormatProjectDetails(project.Name, users, regressingProjectsText); - prefix = "\n"; - } - - notifyIcon.ShowBalloonTip(10000, HudsonTrayTrackerResources.BuildRegressions_Caption, - regressingProjectsText.ToString(), ToolTipIcon.Warning); - } - } - - private void FormatProjectDetails(string projectName, ISet users, StringBuilder builder) - { - builder.Append(projectName); - - if (users != null && users.Count > 0) - { - string userString = StringUtils.Join(users, ", "); - builder.Append(" (").Append(userString).Append(")"); - } - } - - private void UpdateIcon(BuildStatus buildStatus) - { - Icon icon = iconsByKey[buildStatus.Key]; - notifyIcon.Icon = icon; - - // update the main window's icon - if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon) - MainForm.Instance.UpdateIcon(icon); - } - - private void LoadIcons() - { - iconsByKey = new Dictionary(); - - foreach (BuildStatusEnum statusValue in Enum.GetValues(typeof(BuildStatusEnum))) - { - LoadIcon(statusValue, false, false); - LoadIcon(statusValue, false, true); - LoadIcon(statusValue, true, false); - LoadIcon(statusValue, true, true); - } - } - - private void LoadIcon(BuildStatusEnum statusValue, bool isInProgress, bool isStuck) - { - BuildStatus status = new BuildStatus(statusValue, isInProgress, isStuck); - if (iconsByKey.ContainsKey(status.Key)) - return; - - try - { - string resourceName = string.Format("Hudson.TrayTracker.Resources.TrayIcons.{0}.ico", status.Key); - Icon icon = ResourceImageHelper.CreateIconFromResources(resourceName, GetType().Assembly); - iconsByKey.Add(status.Key, icon); - } - catch (Exception ex) - { - XtraMessageBox.Show(HudsonTrayTrackerResources.FailedLoadingIcons_Text, - HudsonTrayTrackerResources.FailedLoadingIcons_Caption, - MessageBoxButtons.OK, MessageBoxIcon.Error); - LoggingHelper.LogError(logger, ex); - throw new Exception("Failed loading icon: " + statusValue, ex); - } - } - - private void notifyIcon_MouseUp(object sender, MouseEventArgs e) - { - Console.WriteLine(e.Clicks); - } - - public void AcknowledgedProject() - { - UpdateNotifier(); - } - - public void AcknowledgeStatus(Project project, BuildStatus currentStatus) - { - lock (acknowledgedStatusByProject) - { - acknowledgedStatusByProject[project] = currentStatus; - } - UpdateNotifier(); - } - - public void ClearAcknowledgedStatus(Project project) - { - lock (acknowledgedStatusByProject) - { - acknowledgedStatusByProject.Remove(project); - } - UpdateNotifier(); - } - - private BuildStatus GetAcknowledgedStatus(Project project) - { - BuildStatus status; - lock (acknowledgedStatusByProject) - { - if (acknowledgedStatusByProject.TryGetValue(project, out status) == false) - return null; - } - return status; - } - - public bool IsStatusAcknowledged(Project project) - { - lock (acknowledgedStatusByProject) - { - return acknowledgedStatusByProject.ContainsKey(project); - } - } - - public static void SetNotifyIconText(NotifyIcon notifyIcon, string text) - { - if (text.Length > MAX_TOOLTIP_LENGTH) - { - text = text.Remove(MAX_TOOLTIP_LENGTH - 4) + " ..."; - } - Type t = typeof(NotifyIcon); - BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance; - t.GetField("text", hidden).SetValue(notifyIcon, text); - if ((bool)t.GetField("added", hidden).GetValue(notifyIcon)) - t.GetMethod("UpdateIcon", hidden).Invoke(notifyIcon, new object[] { true }); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Jenkins.Tray.BusinessComponents; +using Common.Logging; +using System.Reflection; +using Jenkins.Tray.Entities; +using Jenkins.Tray.Utils.Logging; +using Iesi.Collections.Generic; +using DevExpress.XtraEditors; +using Jenkins.Tray.Utils; +using Spring.Context.Support; +using DevExpress.Utils; + +namespace Jenkins.Tray.UI +{ + public partial class TrayNotifier : Component + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + public static readonly int MAX_TOOLTIP_LENGTH = 127; + public static readonly int BALLOON_TOOLTIP_TIMEOUT = 5000; + + public static TrayNotifier Instance + { + get + { + TrayNotifier instance = (TrayNotifier)ContextRegistry.GetContext().GetObject("TrayNotifier"); + return instance; + } + } + + BuildStatus lastBuildStatus; + IDictionary lastProjectsBuildDetails = new Dictionary(); + IDictionary acknowledgedStatusByProject = new Dictionary(); + IDictionary iconsByKey; + + public ConfigurationService ConfigurationService { get; set; } + public JenkinsService JenkinsService { get; set; } + public ProjectsUpdateService UpdateService { get; set; } + public NotificationService NotificationService { get; set; } + + public TrayNotifier() + { + InitializeComponent(); + LoadIcons(); + } + + public void Initialize() + { + ConfigurationService.ConfigurationUpdated += configurationService_ConfigurationUpdated; + UpdateService.ProjectsUpdated += updateService_ProjectsUpdated; + + Disposed += delegate + { + ConfigurationService.ConfigurationUpdated -= configurationService_ConfigurationUpdated; + UpdateService.ProjectsUpdated -= updateService_ProjectsUpdated; + }; + } + + void configurationService_ConfigurationUpdated() + { + UpdateNotifier(); + } + +#if false + private delegate void ProjectsUpdatedDelegate(); + private void updateService_ProjectsUpdated() + { + Delegate del = new ProjectsUpdatedDelegate(OnProjectsUpdated); + MainForm.Instance.BeginInvoke(del); + } + private void OnProjectsUpdated() + { + UpdateGlobalStatus(); + } +#else + private void updateService_ProjectsUpdated() + { + UpdateNotifier(); + } +#endif + + // FIXME: the framework doesn't fire correctly MouseClick and MouseDoubleClick, + // so this is deactivated + private void notifyIcon_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) + return; + + try + { + // order the projects by build status + var projectsByStatus = new Dictionary>(); + foreach (KeyValuePair pair in lastProjectsBuildDetails) + { + BuildStatusEnum status = BuildStatusEnum.Unknown; + if (pair.Value != null) + status = BuildStatusUtils.DegradeStatus(pair.Value.Status).Value; + SortedSet projects = new SortedSet(); + if (projectsByStatus.TryGetValue(status, out projects) == false) + { + projects = new SortedSet(); + projectsByStatus.Add(status, projects); + } + projects.Add(pair.Key); + } + + StringBuilder text = new StringBuilder(); + string prefix = null; + foreach (KeyValuePair> pair in projectsByStatus) + { + // don't display successful projects unless this is the only status + if (pair.Key == BuildStatusEnum.Successful || projectsByStatus.Count == 1) + continue; + + if (prefix != null) + text.Append(prefix); + string statusText = JenkinsTrayResources.ResourceManager + .GetString("BuildStatus_" + pair.Key.ToString()); + text.Append(statusText); + foreach (Project project in pair.Value) + { + text.Append("\n - ").Append(project.Name); + + BuildDetails lastFailedBuild = project.LastFailedBuild; + if (lastFailedBuild != null && lastFailedBuild.Users != null && lastFailedBuild.Users.Count > 0) + { + string users = StringUtils.Join(lastFailedBuild.Users, ", "); + text.Append(" (").Append(users).Append(")"); + } + } + prefix = "\n"; + } + + string textToDisplay = text.ToString(); + if (string.IsNullOrEmpty(textToDisplay)) + textToDisplay = JenkinsTrayResources.DisplayBuildStatus_NoProjects; + notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, JenkinsTrayResources.DisplayBuildStatus_Caption, + textToDisplay, ToolTipIcon.Info); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + } + } + + private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) + return; + + MainForm.ShowOrFocus(); + } + + private void openMenuItem_Click(object sender, EventArgs e) + { + MainForm.ShowOrFocus(); + } + + private void refreshMenuItem_Click(object sender, EventArgs e) + { + UpdateService.UpdateProjects(); + } + + private void settingsMenuItem_Click(object sender, EventArgs e) + { + MainForm.Instance.Show(); + SettingsForm.ShowDialogOrFocus(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + MainForm.Instance.Exit(); + } + + private void aboutMenuItem_Click(object sender, EventArgs e) + { + MainForm.Instance.Show(); + AboutForm.ShowDialogOrFocus(); + } + + public void UpdateNotifier() + { + try + { + DoUpdateNotifier(); + } + catch (Exception ex) + { + LoggingHelper.LogError(logger, ex); + UpdateIcon(BuildStatus.UNKNOWN_BUILD_STATUS); + } + } + + public void UpdateNotifierStartup() + { + UpdateIcon(BuildStatus.UNKNOWN_BUILD_STATUS); + notifyIcon.Text = Assembly.GetExecutingAssembly().GetName().Name + " " + + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion; + } + + private void DoUpdateNotifier() + { + BuildStatusEnum? worstBuildStatus = null; + bool buildInProgress = false; + bool buildIsStuck = false; + var errorProjects = new HashedSet(); + var regressingProjects = new HashedSet(); + var progressingAndErrorProjects = new HashedSet(); + var interestingProjects = new HashedSet(); + + foreach (Server server in ConfigurationService.Servers) + { + foreach (Project project in server.Projects) + { + BuildStatus status = GetProjectStatus(project); + if (worstBuildStatus == null || status.Value > worstBuildStatus) + worstBuildStatus = status.Value; + if (status.Value >= BuildStatusEnum.Failed) + errorProjects.Add(project); + if (status.Value > BuildStatusEnum.Successful) + progressingAndErrorProjects.Add(project); + if (status.IsInProgress) + { + buildInProgress = true; + progressingAndErrorProjects.Add(project); + } + if (status.IsStuck) + buildIsStuck = true; + if (IsRegressing(project)) + regressingProjects.Add(project); + lastProjectsBuildDetails[project] = project.AllBuildDetails; + + if (project.Activity.HasBuildActivity) + { + interestingProjects.Add(project); + } + } + } + + if (worstBuildStatus == null) + worstBuildStatus = BuildStatusEnum.Unknown; + +#if false // tests + lastBuildStatus++; + if (lastBuildStatus > BuildStatus.Failed_BuildInProgress) + lastBuildStatus = 0; + worstBuildStatus = lastBuildStatus; + Console.WriteLine("tray:"+lastBuildStatus); +#endif + + BuildStatus buildStatus = new BuildStatus(worstBuildStatus.Value, buildInProgress, buildIsStuck); + + UpdateIcon(buildStatus); + UpdateBalloonTip(errorProjects, regressingProjects); + UpdateTrayTooltip(progressingAndErrorProjects); + ShowBallowTip(interestingProjects); + + lastBuildStatus = buildStatus; + } + + private BuildStatus GetProjectStatus(Project project) + { + BuildStatus status = project.Status; + BuildStatus acknowledgedStatus = GetAcknowledgedStatus(project); + if (project.IsAcknowledged || (acknowledgedStatus != null)) + { + if (project.IsAcknowledged || (status.Value == acknowledgedStatus.Value)) + return new BuildStatus(BuildStatusEnum.Successful, false, false); + else if (status.Value != BuildStatusEnum.Unknown && BuildStatusUtils.IsWorse(acknowledgedStatus, status)) + ClearAcknowledgedStatus(project); + } + return status; + } + + private bool IsRegressing(Project project) + { + AllBuildDetails lastBuildDetails; + if (lastProjectsBuildDetails.TryGetValue(project, out lastBuildDetails) == false + || lastBuildDetails == null) + return false; + AllBuildDetails newBuildDetails = project.AllBuildDetails; + if (newBuildDetails == null) + return false; + + // moving from unknown/aborted to successful should not be considered as a regression + if (newBuildDetails.Status.Value <= BuildStatusEnum.Successful) + return false; + + bool res = BuildStatusUtils.IsWorse(newBuildDetails.Status, lastBuildDetails.Status); + return res; + } + + private void UpdateTrayTooltip(ICollection progressingAndErrorProjects) + { + StringBuilder tooltipText = new StringBuilder(); + string prefix = null; + + if (progressingAndErrorProjects != null && progressingAndErrorProjects.Count > 0) + { + foreach (Project project in progressingAndErrorProjects) + { + if (project.IsAcknowledged) + continue; + lock (acknowledgedStatusByProject) + { + if (acknowledgedStatusByProject.ContainsKey(project)) + continue; + } + if (prefix != null) + tooltipText.Append(prefix); + BuildStatus status = GetProjectStatus(project); + BuildDetails buildDetails = project.LastBuild; + if ((status.IsInProgress) && (status.Value == BuildStatusEnum.Failed)) + { + tooltipText.Append(string.Format(JenkinsTrayResources.Tooltip_Failed_And_InProgress, project.Name)); + } + else if (status.IsInProgress) + { + tooltipText.Append(string.Format(JenkinsTrayResources.Tooltip_InProgress, project.Name)); + } + else + { + tooltipText.Append(string.Format(JenkinsTrayResources.Tooltip_BuildStatus, project.Name, status.Value.ToString())); + } + prefix = "\n"; + if (tooltipText.ToString().Length > MAX_TOOLTIP_LENGTH) + break; + } + } + else + { + tooltipText.Append(JenkinsTrayResources.Tooltip_AllGood); + } + prefix = tooltipText.ToString(); + SetNotifyIconText(notifyIcon, prefix); + } + + public void ShowBallowTip(ICollection interestingProjects) + { + foreach (Project project in interestingProjects) + { + try + { + CaptionAndMessage info = project.Activity.ActivityDetails; + + // Need a queue so no events are skipped + notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, info.Caption, info.Message, info.Icon); + } + catch(Exception ex) + { + LoggingHelper.LogError(logger, ex); + } + } + } + + private void UpdateBalloonTip(ICollection errorProjects, ICollection regressingProjects) + { + if (lastBuildStatus != null && lastBuildStatus.Value < BuildStatusEnum.Failed + && errorProjects != null && errorProjects.Count > 0) + { + StringBuilder errorProjectsText = new StringBuilder(); + string prefix = null; + foreach (Project project in errorProjects) + { + if (prefix != null) + errorProjectsText.Append(prefix); + BuildDetails buildDetails = project.LastFailedBuild; + if (buildDetails == null) + logger.Warn("No details for the last failed build of project in error: " + project.Url); + ISet users = buildDetails != null ? buildDetails.Users : null; + FormatProjectDetails(project.Name, users, errorProjectsText); + prefix = "\n"; + } + + notifyIcon.ShowBalloonTip(BALLOON_TOOLTIP_TIMEOUT, JenkinsTrayResources.BuildFailed_Caption, + errorProjectsText.ToString(), ToolTipIcon.Error); + } + else if (regressingProjects != null && regressingProjects.Count > 0) + { + StringBuilder regressingProjectsText = new StringBuilder(); + string prefix = null; + foreach (Project project in regressingProjects) + { + if (prefix != null) + regressingProjectsText.Append(prefix); + BuildDetails buildDetails = project.AllBuildDetails.LastCompletedBuild; + if (buildDetails == null) + logger.Warn("No details for the last failed build of project in error: " + project.Url); + ISet users = buildDetails != null ? buildDetails.Users : null; + FormatProjectDetails(project.Name, users, regressingProjectsText); + prefix = "\n"; + } + + notifyIcon.ShowBalloonTip(10000, JenkinsTrayResources.BuildRegressions_Caption, + regressingProjectsText.ToString(), ToolTipIcon.Warning); + } + } + + private void FormatProjectDetails(string projectName, ISet users, StringBuilder builder) + { + builder.Append(projectName); + + if (users != null && users.Count > 0) + { + string userString = StringUtils.Join(users, ", "); + builder.Append(" (").Append(userString).Append(")"); + } + } + + private void UpdateIcon(BuildStatus buildStatus) + { + Icon icon = iconsByKey[buildStatus.Key]; + notifyIcon.Icon = icon; + + // update the main window's icon + if (ConfigurationService.GeneralSettings.UpdateMainWindowIcon) + MainForm.Instance.UpdateIcon(icon); + } + + private void LoadIcons() + { + iconsByKey = new Dictionary(); + + foreach (BuildStatusEnum statusValue in Enum.GetValues(typeof(BuildStatusEnum))) + { + LoadIcon(statusValue, false, false); + LoadIcon(statusValue, false, true); + LoadIcon(statusValue, true, false); + LoadIcon(statusValue, true, true); + } + } + + private void LoadIcon(BuildStatusEnum statusValue, bool isInProgress, bool isStuck) + { + BuildStatus status = new BuildStatus(statusValue, isInProgress, isStuck); + if (iconsByKey.ContainsKey(status.Key)) + return; + + try + { + string resourceName = string.Format("Jenkins.Tray.Resources.TrayIcons.{0}.ico", status.Key); + Icon icon = ResourceImageHelper.CreateIconFromResources(resourceName, GetType().Assembly); + iconsByKey.Add(status.Key, icon); + } + catch (Exception ex) + { + XtraMessageBox.Show(JenkinsTrayResources.FailedLoadingIcons_Text, + JenkinsTrayResources.FailedLoadingIcons_Caption, + MessageBoxButtons.OK, MessageBoxIcon.Error); + LoggingHelper.LogError(logger, ex); + throw new Exception("Failed loading icon: " + statusValue, ex); + } + } + + private void notifyIcon_MouseUp(object sender, MouseEventArgs e) + { + Console.WriteLine(e.Clicks); + } + + public void AcknowledgedProject() + { + UpdateNotifier(); + } + + public void AcknowledgeStatus(Project project, BuildStatus currentStatus) + { + lock (acknowledgedStatusByProject) + { + acknowledgedStatusByProject[project] = currentStatus; + } + UpdateNotifier(); + } + + public void ClearAcknowledgedStatus(Project project) + { + lock (acknowledgedStatusByProject) + { + acknowledgedStatusByProject.Remove(project); + } + UpdateNotifier(); + } + + private BuildStatus GetAcknowledgedStatus(Project project) + { + BuildStatus status; + lock (acknowledgedStatusByProject) + { + if (acknowledgedStatusByProject.TryGetValue(project, out status) == false) + return null; + } + return status; + } + + public bool IsStatusAcknowledged(Project project) + { + lock (acknowledgedStatusByProject) + { + return acknowledgedStatusByProject.ContainsKey(project); + } + } + + public static void SetNotifyIconText(NotifyIcon notifyIcon, string text) + { + if (text.Length > MAX_TOOLTIP_LENGTH) + { + text = text.Remove(MAX_TOOLTIP_LENGTH - 4) + " ..."; + } + Type t = typeof(NotifyIcon); + BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance; + t.GetField("text", hidden).SetValue(notifyIcon, text); + if ((bool)t.GetField("added", hidden).GetValue(notifyIcon)) + t.GetMethod("UpdateIcon", hidden).Invoke(notifyIcon, new object[] { true }); + } + } +} diff --git a/HudsonTrayTracker/UI/TrayNotifier.resx b/JenkinsTray/UI/TrayNotifier.resx similarity index 98% rename from HudsonTrayTracker/UI/TrayNotifier.resx rename to JenkinsTray/UI/TrayNotifier.resx index c6f6475..f90387b 100644 --- a/HudsonTrayTracker/UI/TrayNotifier.resx +++ b/JenkinsTray/UI/TrayNotifier.resx @@ -1,205 +1,205 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 56 - - - 17, 17 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA - CwcBtnMLwAAAAOxJREFUOE9j+P//PwMyFijg+w/EvujiuPgomkGKoAYQbQhWAwqv24EMIMoQnAYQawhW - A/Ku2v7Pumj1P/WsOUGXYDUg7ZzF/8STpv+jjxr+D9mvj9cQrAbEHDP+H3pA/7//bu3/7lvV/zusV8Zp - CFYDAvfo/vfcpvnfaYPqf+uVCv9NFsv815krCTYEPTqxGuCyUe2/zWrF/6ZL5f7rzZf8rz5LjDQXmC+X - /6+/QPq/5izx/0pThUkPA+054v9Vp4v8l5skSF4syE8W+i/Vz09QMyg8sIaBeDcvUZpxGkBsMsZnAPm5 - kdhsDFMHAH2OluuICWfKAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA - CwwBP0AiyAAAAeJJREFUOE+lk9tL02Ech5Xuu+iiv6GbSIJdWPfCLhSExK5qKAshCQ/ZATwU1iqcGGqw - hcdFa7OJU5vbUFGn5ZimZWUHhWS632xBXkg5trmnva+YyaYpvfC5et/P8z2+6UDafx0BOIw81UXq7uIL - CA3d1GYc2Fxv+36ku70mSxi/NpTw5toWJC1xQV1XSOqBJcRt0zeut6xyuTmIRq+QpwtwsV6hxuhj0F6F - zeXj7d1yaX6oUm0BTOPQOhLHMBijcSBKnT3CnedhKs1hbpnXabPP4baV82NJz+eJYnS6KmmuzTyVIwF6 - Ed0aojoRvdS4SmGDwvl7AbSNCo+sr3GatdL8caSAvsdqjh87yqW8ExlyAM8GponFY0laD0fxznzA0ZGf - ZK4oOHl2u/F/AKO+BbYlgC/cY/S3ZO9r3jcDQ+sTJp338c9c3Um7rJKp+UD632PflcGw9wvuiU9sRKII - QDy+ibUpV9Zs6XWRrbmR8O7em6QeCPPazyhXSivIPZcv1hSHZ47OvinO5BQlAzrtr2QDRWTH6Dw9Q+9Q - 1iI87Z+lvWdayrvwC0PXZGqA0TIsAStKkEV/kPeLiqiTsdkVXL5lel8uY/P49wY0mZycztKgUhf+UylL - OMxHSvX2wJ9pr0C/Aa3dwrU8i4oXAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA - CwcBtnMLwAAAAg9JREFUOE9j/P//PwNFAGQAJZig5uk7//wH4f5N3/43L3/7v2zW4/9Z/beAdkIsRjGg - buWf4PIFH1f7Nl2VgikAae7Y8P9/2aJf/xP7nv33KDs3FdnFcAMqFv/WaVn991Rq/5P/Vqlb7sAU9az/ - 8r9g3rf/MX0f/7tV3P5vm3v8iHnqIU0MF1Qu/TahYvG3/875p//rBC14B1NQu/DF/7DWe/+dS29+ssi+ - 8N84ad9/vejNPRgG1Cz9fCFn+vv/psn7/+tGrp8LU5A76c5/h4LTOS6ll6fZ5p37rxez7b9u2NLzGAY0 - Lv/0OX3q2//GCXv/68ftsAIpyMu7zZrUcQUcYGGtd6yDm+6BDdAKmP0Zw4D6pZ8+p019998sdT/cAOTA - ypn13iZtypv/hnG7sBtQsfDjhdQpb//b557+b515dCZ62qhd/mdexrQP//VjdvzXCV1yAcMF2VNf9sX3 - Pv3vVXXjf2D9zbdpE1/MyZ/5zqZ8wTebhtV/59ev+P0+uPn+f93wVf91wlZMxDAgrOm2dmD99aMeZVf+ - +9be+R/X+/x/5rR3//NmfvyfM+vTf5BmYOiDbD+tHbZWB2tCci0+72uXc+yocfzu/7oxW8EYFGh6MVuA - Ib8cqHnRab3QZcFYExJM0DB+r6ZuxJo+neAFF7X8pnwBYe3AuZd0w5ZM0gpdqYseNgTzAqGMRrEBAHaR - kJU9BcdNAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmBJREFUOE+dk01M - E1EQx/fk0ZNevXjBg3qrFz2QYDz4dTKQgBygTVRiavw2JiaaaIUgmLRIxBiNSjGY0kixbUgaPmvZVltK - 7LZgoabfpaUrtLVFqH/nbQ3SGoxxksm+mTfzm5n33nJchfhDixAz37BZsoU1TDh8qIwts6PJZeSyKxt5 - vNOLmuom6N9ZN3w/aOVZiP8JCsZSEJeWyqqeqO2gwNOoOtxT5meGzuIuh0QiYSnoO2lmrRTP1tqpVaRZ - WZJ4DhCZ85eouvUlyNSnAMRsHqu0kaLR2ZefjeKO2oCe3mG8HBhHgXyhLOBPA0mCrJM9ZA/i4q1ucBbb - NBK5IpIUFaUjEIvAXFTErkPtVEGB3QfbwZqY/woISWCWIBGC8AsrJYBp3IUvlMUqLIhUhQKZ9I8JBLgG - WZ1W6sBDRzSdAGZSBKFCo94UGs7dAzcw4oInVkCAAAJtMs1Qgkb/kQCXIavtxTLZrjhgj9B3EXBTJ3p7 - mAD3wT0ftML2OQ4vVWZ0Zwxg99E16CKAEgfqXoE1xZP/PQF4AlhD62hp0+H81YfgXpgdEmDMl4abRnDR - jEFKaLo9RIAb2LavE5ORPBxEnSCIyZvDE8scduyt/32VfUZegphp0A/Unkko4OSFUTR3JdDwYB43tQEp - +a2QhcboxZ4jl6BQtpa/had9w2D62DiD1/YYRsJF2OjQ3HSCBiEHtdkHeasOO/c3ovHs3a2fteKKGsfk - bRLE4KdkUrlKj+1VpyCrOfP35M0/x9GWR1D12zGZB6qbNf+eWAlRPnPi+PU3/wdgMDZvvbJzy5l/Am7V - YvnqVXhIAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA - CwcBtnMLwAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7 - f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt - nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae - CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO - m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd - S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ - PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE - BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo - r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK - xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII= - - - - False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 56 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA + CwcBtnMLwAAAAOxJREFUOE9j+P//PwMyFijg+w/EvujiuPgomkGKoAYQbQhWAwqv24EMIMoQnAYQawhW + A/Ku2v7Pumj1P/WsOUGXYDUg7ZzF/8STpv+jjxr+D9mvj9cQrAbEHDP+H3pA/7//bu3/7lvV/zusV8Zp + CFYDAvfo/vfcpvnfaYPqf+uVCv9NFsv815krCTYEPTqxGuCyUe2/zWrF/6ZL5f7rzZf8rz5LjDQXmC+X + /6+/QPq/5izx/0pThUkPA+054v9Vp4v8l5skSF4syE8W+i/Vz09QMyg8sIaBeDcvUZpxGkBsMsZnAPm5 + kdhsDFMHAH2OluuICWfKAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA + CwwBP0AiyAAAAeJJREFUOE+lk9tL02Ech5Xuu+iiv6GbSIJdWPfCLhSExK5qKAshCQ/ZATwU1iqcGGqw + hcdFa7OJU5vbUFGn5ZimZWUHhWS632xBXkg5trmnva+YyaYpvfC5et/P8z2+6UDafx0BOIw81UXq7uIL + CA3d1GYc2Fxv+36ku70mSxi/NpTw5toWJC1xQV1XSOqBJcRt0zeut6xyuTmIRq+QpwtwsV6hxuhj0F6F + zeXj7d1yaX6oUm0BTOPQOhLHMBijcSBKnT3CnedhKs1hbpnXabPP4baV82NJz+eJYnS6KmmuzTyVIwF6 + Ed0aojoRvdS4SmGDwvl7AbSNCo+sr3GatdL8caSAvsdqjh87yqW8ExlyAM8GponFY0laD0fxznzA0ZGf + ZK4oOHl2u/F/AKO+BbYlgC/cY/S3ZO9r3jcDQ+sTJp338c9c3Um7rJKp+UD632PflcGw9wvuiU9sRKII + QDy+ibUpV9Zs6XWRrbmR8O7em6QeCPPazyhXSivIPZcv1hSHZ47OvinO5BQlAzrtr2QDRWTH6Dw9Q+9Q + 1iI87Z+lvWdayrvwC0PXZGqA0TIsAStKkEV/kPeLiqiTsdkVXL5lel8uY/P49wY0mZycztKgUhf+UylL + OMxHSvX2wJ9pr0C/Aa3dwrU8i4oXAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA + CwcBtnMLwAAAAg9JREFUOE9j/P//PwNFAGQAJZig5uk7//wH4f5N3/43L3/7v2zW4/9Z/beAdkIsRjGg + buWf4PIFH1f7Nl2VgikAae7Y8P9/2aJf/xP7nv33KDs3FdnFcAMqFv/WaVn991Rq/5P/Vqlb7sAU9az/ + 8r9g3rf/MX0f/7tV3P5vm3v8iHnqIU0MF1Qu/TahYvG3/875p//rBC14B1NQu/DF/7DWe/+dS29+ssi+ + 8N84ad9/vejNPRgG1Cz9fCFn+vv/psn7/+tGrp8LU5A76c5/h4LTOS6ll6fZ5p37rxez7b9u2NLzGAY0 + Lv/0OX3q2//GCXv/68ftsAIpyMu7zZrUcQUcYGGtd6yDm+6BDdAKmP0Zw4D6pZ8+p019998sdT/cAOTA + ypn13iZtypv/hnG7sBtQsfDjhdQpb//b557+b515dCZ62qhd/mdexrQP//VjdvzXCV1yAcMF2VNf9sX3 + Pv3vVXXjf2D9zbdpE1/MyZ/5zqZ8wTebhtV/59ev+P0+uPn+f93wVf91wlZMxDAgrOm2dmD99aMeZVf+ + +9be+R/X+/x/5rR3//NmfvyfM+vTf5BmYOiDbD+tHbZWB2tCci0+72uXc+yocfzu/7oxW8EYFGh6MVuA + Ib8cqHnRab3QZcFYExJM0DB+r6ZuxJo+neAFF7X8pnwBYe3AuZd0w5ZM0gpdqYseNgTzAqGMRrEBAHaR + kJU9BcdNAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmBJREFUOE+dk01M + E1EQx/fk0ZNevXjBg3qrFz2QYDz4dTKQgBygTVRiavw2JiaaaIUgmLRIxBiNSjGY0kixbUgaPmvZVltK + 7LZgoabfpaUrtLVFqH/nbQ3SGoxxksm+mTfzm5n33nJchfhDixAz37BZsoU1TDh8qIwts6PJZeSyKxt5 + vNOLmuom6N9ZN3w/aOVZiP8JCsZSEJeWyqqeqO2gwNOoOtxT5meGzuIuh0QiYSnoO2lmrRTP1tqpVaRZ + WZJ4DhCZ85eouvUlyNSnAMRsHqu0kaLR2ZefjeKO2oCe3mG8HBhHgXyhLOBPA0mCrJM9ZA/i4q1ucBbb + NBK5IpIUFaUjEIvAXFTErkPtVEGB3QfbwZqY/woISWCWIBGC8AsrJYBp3IUvlMUqLIhUhQKZ9I8JBLgG + WZ1W6sBDRzSdAGZSBKFCo94UGs7dAzcw4oInVkCAAAJtMs1Qgkb/kQCXIavtxTLZrjhgj9B3EXBTJ3p7 + mAD3wT0ftML2OQ4vVWZ0Zwxg99E16CKAEgfqXoE1xZP/PQF4AlhD62hp0+H81YfgXpgdEmDMl4abRnDR + jEFKaLo9RIAb2LavE5ORPBxEnSCIyZvDE8scduyt/32VfUZegphp0A/Unkko4OSFUTR3JdDwYB43tQEp + +a2QhcboxZ4jl6BQtpa/had9w2D62DiD1/YYRsJF2OjQ3HSCBiEHtdkHeasOO/c3ovHs3a2fteKKGsfk + bRLE4KdkUrlKj+1VpyCrOfP35M0/x9GWR1D12zGZB6qbNf+eWAlRPnPi+PU3/wdgMDZvvbJzy5l/Am7V + YvnqVXhIAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBwAA + CwcBtnMLwAAAAjVJREFUOE9j/P//P4O3l5fBP0aGHob/DG1MjAwHtm7d9o+BWODo6MLs7OKaDqT/Ozk7 + f/P28g709vFmBhmMjq1sHViCAgOU3N3d8mByDECNLECcZGfvtM3c0va/vYPLHw8Pzypfb1RDVDQNOazt + nZyArv3u4OA0B24AiAE0QBKILRwcXbZZ2dj/t7N3+O/v673R19eHGyRvamHL6e7pucLW3um3qal5t5ae + CQ+KATAO0BA2IC6wd3D+bWfn9N/H13eZpZW9npWV3WRbG5v/eoYmk9W0DPiRvYbhT2tbW0Z7eydNoJfO + m5lb/zcyNvtuaGz0Xk1Ld52yui4nerhgGABToG9g4qCnb/LT0sr2v56+0T0FZU0hbAGL1QBjExMFNXWd + S7p6hv+ABv03MbX4r6Wte4soAwyNTOXVNLSvAg34o6GpvUZETNJETl5lm4Gh8X9Vde1MvF7Q0NaVkFVQ + PiWnqPofaPshSQkpIR4+Pm5+IRFueSW16QYGxl9UtQxksQaihoEFh5yi2iIJacWPOrqGT7R19bVgCnkE + BDg4Obn5dPUNz0rKKEySUVSDJzR4GEjJKniLSSj8V1XT/q+iptHKyc0LTgMwzMLCzAQUV1FRUb3PKyAo + r65rwgSSAysQEBBiExERaxUSFv8vr6C8i4OLR42HTwCsABkLCAgym5lZTubm5TJV1zNHGABSJCOvasTK + xj6RgZHJjpmFhRdbiINtZGBgYWJi4sKaEnFpwieOMyERaxgAd/H0VrlTD2AAAAAASUVORK5CYII= + + + + False + \ No newline at end of file diff --git a/HudsonTrayTracker/Utils/ApplicationUpdateHandler.cs b/JenkinsTray/Utils/ApplicationUpdateHandler.cs similarity index 77% rename from HudsonTrayTracker/Utils/ApplicationUpdateHandler.cs rename to JenkinsTray/Utils/ApplicationUpdateHandler.cs index 40eb367..bb20c16 100644 --- a/HudsonTrayTracker/Utils/ApplicationUpdateHandler.cs +++ b/JenkinsTray/Utils/ApplicationUpdateHandler.cs @@ -1,45 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Windows.Forms; -using DevExpress.XtraEditors; -using Common.Logging; -using System.Reflection; -using System.Diagnostics; -using Hudson.TrayTracker.BusinessComponents; - -namespace Hudson.TrayTracker.Utils -{ - class ApplicationUpdateHandler - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - ApplicationUpdateService applicationUpdateService; - - public ApplicationUpdateService ApplicationUpdateService - { - get { return applicationUpdateService; } - set { applicationUpdateService = value; } - } - - public void Initialize() - { - applicationUpdateService.NewVersionAvailable += applicationUpdateService_NewVersionAvailable; - } - - private void applicationUpdateService_NewVersionAvailable(Version version, string installerUrl) - { - string message = string.Format(HudsonTrayTrackerResources.ApplicationUpdates_NewVersion_Text, version); - DialogResult res = XtraMessageBox.Show(message, HudsonTrayTrackerResources.ApplicationUpdates_Caption, - MessageBoxButtons.YesNo); - if (res != DialogResult.Yes) - { - logger.Info("Update refused by user"); - return; - } - logger.Info("Update accepted by user"); - UIUtils.OpenWebPage(installerUrl, logger); - Application.Exit(); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using Common.Logging; +using System.Reflection; +using System.Diagnostics; +using Jenkins.Tray.BusinessComponents; + +namespace Jenkins.Tray.Utils +{ + class ApplicationUpdateHandler + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + ApplicationUpdateService applicationUpdateService; + + public ApplicationUpdateService ApplicationUpdateService + { + get { return applicationUpdateService; } + set { applicationUpdateService = value; } + } + + public void Initialize() + { + applicationUpdateService.NewVersionAvailable += applicationUpdateService_NewVersionAvailable; + } + + private void applicationUpdateService_NewVersionAvailable(Version version, string installerUrl) + { + string message = string.Format(JenkinsTrayResources.ApplicationUpdates_NewVersion_Text, version); + DialogResult res = XtraMessageBox.Show(message, JenkinsTrayResources.ApplicationUpdates_Caption, + MessageBoxButtons.YesNo); + if (res != DialogResult.Yes) + { + logger.Info("Update refused by user"); + return; + } + logger.Info("Update accepted by user"); + UIUtils.OpenWebPage(installerUrl, logger); + Application.Exit(); + } + } +} diff --git a/HudsonTrayTracker/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs b/JenkinsTray/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs similarity index 93% rename from HudsonTrayTracker/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs rename to JenkinsTray/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs index 76eab3d..1c9b34a 100644 --- a/HudsonTrayTracker/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs +++ b/JenkinsTray/Utils/BackgroundProcessing/BackgroundProcessExecutor.cs @@ -1,81 +1,81 @@ -#if DEBUG -// only define this if needed in debug -//#define DONT_CATCH_EXCEPTION -#endif - -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel; -using System.Reflection; - -using Common.Logging; - -using Hudson.TrayTracker.Utils.Logging; -using System.Threading; - -namespace Hudson.TrayTracker.Utils.BackgroundProcessing -{ - public static class BackgroundProcessExecutor - { - static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public static void Execute(Process process) - { -#if false - if (Thread.CurrentThread.IsBackground) - throw new Exception("Should not run in background!"); - int fgThreadId = Thread.CurrentThread.ManagedThreadId; -#endif - - if (logger.IsDebugEnabled) - logger.Debug("Running process: " + process.Description); - - // run that process - BackgroundWorker bgWorker = new BackgroundWorker(); - ErrorHolder errorHolder = new ErrorHolder(); - bgWorker.DoWork += delegate(object sender, DoWorkEventArgs e) - { -#if DEBUG - if (Thread.CurrentThread.IsBackground == false) - throw new Exception("Should run in background!"); -#endif - -#if DONT_CATCH_EXCEPTION - process.Run(sender, e); -#else - // here we catch exceptions because otherwise, Visual Studio breaks, - // even though the BackgroundWorker itself catches the exceptions! - try - { - process.Run(sender, e); - } - catch (Exception error) - { - errorHolder.Error = error; - } -#endif - }; - bgWorker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) - { -#if false - if (Thread.CurrentThread.IsBackground) - throw new Exception("Should not run in background!"); - if (Thread.CurrentThread.ManagedThreadId != fgThreadId) - throw new Exception("RunWorkerCompleted called in another thread"); -#endif - - // replace the args with one containing the caught error (if any) - e = new RunWorkerCompletedEventArgs(e.Result, errorHolder.Error, e.Cancelled); - - if (logger.IsDebugEnabled) - logger.Debug("Done running process: " + process.Description); - if (e.Error != null) - LoggingHelper.LogError(logger, e.Error); - - process.OnCompleted(sender, e); - }; - bgWorker.RunWorkerAsync(); - } - } -} +#if DEBUG +// only define this if needed in debug +//#define DONT_CATCH_EXCEPTION +#endif + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Reflection; + +using Common.Logging; + +using Jenkins.Tray.Utils.Logging; +using System.Threading; + +namespace Jenkins.Tray.Utils.BackgroundProcessing +{ + public static class BackgroundProcessExecutor + { + static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public static void Execute(Process process) + { +#if false + if (Thread.CurrentThread.IsBackground) + throw new Exception("Should not run in background!"); + int fgThreadId = Thread.CurrentThread.ManagedThreadId; +#endif + + if (logger.IsDebugEnabled) + logger.Debug("Running process: " + process.Description); + + // run that process + BackgroundWorker bgWorker = new BackgroundWorker(); + ErrorHolder errorHolder = new ErrorHolder(); + bgWorker.DoWork += delegate(object sender, DoWorkEventArgs e) + { +#if DEBUG + if (Thread.CurrentThread.IsBackground == false) + throw new Exception("Should run in background!"); +#endif + +#if DONT_CATCH_EXCEPTION + process.Run(sender, e); +#else + // here we catch exceptions because otherwise, Visual Studio breaks, + // even though the BackgroundWorker itself catches the exceptions! + try + { + process.Run(sender, e); + } + catch (Exception error) + { + errorHolder.Error = error; + } +#endif + }; + bgWorker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) + { +#if false + if (Thread.CurrentThread.IsBackground) + throw new Exception("Should not run in background!"); + if (Thread.CurrentThread.ManagedThreadId != fgThreadId) + throw new Exception("RunWorkerCompleted called in another thread"); +#endif + + // replace the args with one containing the caught error (if any) + e = new RunWorkerCompletedEventArgs(e.Result, errorHolder.Error, e.Cancelled); + + if (logger.IsDebugEnabled) + logger.Debug("Done running process: " + process.Description); + if (e.Error != null) + LoggingHelper.LogError(logger, e.Error); + + process.OnCompleted(sender, e); + }; + bgWorker.RunWorkerAsync(); + } + } +} diff --git a/HudsonTrayTracker/Utils/BackgroundProcessing/ErrorHolder.cs b/JenkinsTray/Utils/BackgroundProcessing/ErrorHolder.cs similarity index 78% rename from HudsonTrayTracker/Utils/BackgroundProcessing/ErrorHolder.cs rename to JenkinsTray/Utils/BackgroundProcessing/ErrorHolder.cs index 56ff4ff..2fabd9f 100644 --- a/HudsonTrayTracker/Utils/BackgroundProcessing/ErrorHolder.cs +++ b/JenkinsTray/Utils/BackgroundProcessing/ErrorHolder.cs @@ -1,17 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Hudson.TrayTracker.Utils.BackgroundProcessing -{ - class ErrorHolder - { - private Exception error; - - public Exception Error - { - get { return error; } - set { error = value; } - } - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace Jenkins.Tray.Utils.BackgroundProcessing +{ + class ErrorHolder + { + private Exception error; + + public Exception Error + { + get { return error; } + set { error = value; } + } + } +} diff --git a/HudsonTrayTracker/Utils/BackgroundProcessing/Process.cs b/JenkinsTray/Utils/BackgroundProcessing/Process.cs similarity index 91% rename from HudsonTrayTracker/Utils/BackgroundProcessing/Process.cs rename to JenkinsTray/Utils/BackgroundProcessing/Process.cs index 7b87701..5973753 100644 --- a/HudsonTrayTracker/Utils/BackgroundProcessing/Process.cs +++ b/JenkinsTray/Utils/BackgroundProcessing/Process.cs @@ -1,43 +1,43 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.ComponentModel; - -namespace Hudson.TrayTracker.Utils.BackgroundProcessing -{ - public class Process - { - // Summary: - // Occurs when System.ComponentModel.BackgroundWorker.RunWorkerAsync() is called. - public event DoWorkEventHandler DoWork; - // - // Summary: - // Occurs when the background operation has completed, has been canceled, or - // has raised an exception. - public event RunWorkerCompletedEventHandler RunWorkerCompleted; - - string description; - - public string Description - { - get { return description; } - } - - public Process(string description) - { - this.description = description; - } - - internal void Run(object sender, DoWorkEventArgs e) - { - if (DoWork != null) - DoWork(this, e); - } - - internal void OnCompleted(object sender, RunWorkerCompletedEventArgs e) - { - if (RunWorkerCompleted != null) - RunWorkerCompleted(this, e); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; + +namespace Jenkins.Tray.Utils.BackgroundProcessing +{ + public class Process + { + // Summary: + // Occurs when System.ComponentModel.BackgroundWorker.RunWorkerAsync() is called. + public event DoWorkEventHandler DoWork; + // + // Summary: + // Occurs when the background operation has completed, has been canceled, or + // has raised an exception. + public event RunWorkerCompletedEventHandler RunWorkerCompleted; + + string description; + + public string Description + { + get { return description; } + } + + public Process(string description) + { + this.description = description; + } + + internal void Run(object sender, DoWorkEventArgs e) + { + if (DoWork != null) + DoWork(this, e); + } + + internal void OnCompleted(object sender, RunWorkerCompletedEventArgs e) + { + if (RunWorkerCompleted != null) + RunWorkerCompleted(this, e); + } + } +} diff --git a/HudsonTrayTracker/Utils/Collections/ThreadSafeDictionary.cs b/JenkinsTray/Utils/Collections/ThreadSafeDictionary.cs similarity index 92% rename from HudsonTrayTracker/Utils/Collections/ThreadSafeDictionary.cs rename to JenkinsTray/Utils/Collections/ThreadSafeDictionary.cs index d5b3994..a4752e3 100644 --- a/HudsonTrayTracker/Utils/Collections/ThreadSafeDictionary.cs +++ b/JenkinsTray/Utils/Collections/ThreadSafeDictionary.cs @@ -1,60 +1,60 @@ -using System; -using System.Collections.Generic; -using System.Threading; - -namespace Hudson.TrayTracker.Utils.Collections -{ - public class ThreadSafeDictionary : Dictionary - { - private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(); - - public TValue GetOrAdd(TKey key, Func defaultValueDelegate) - { - cacheLock.EnterReadLock(); - try - { - if (ContainsKey(key)) - { - return this[key]; - } - } - finally - { - cacheLock.ExitReadLock(); - } - cacheLock.EnterWriteLock(); - try - { - if (!ContainsKey(key)) - { - Add(key, defaultValueDelegate()); - } - return this[key]; - } - finally - { - cacheLock.ExitWriteLock(); - } - } - - public void SetOrAdd(TKey key, TValue value) - { - cacheLock.EnterWriteLock(); - try - { - if (ContainsKey(key)) - { - this[key] = value; - } - else - { - Add(key, value); - } - } - finally - { - cacheLock.ExitWriteLock(); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Threading; + +namespace Jenkins.Tray.Utils.Collections +{ + public class ThreadSafeDictionary : Dictionary + { + private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(); + + public TValue GetOrAdd(TKey key, Func defaultValueDelegate) + { + cacheLock.EnterReadLock(); + try + { + if (ContainsKey(key)) + { + return this[key]; + } + } + finally + { + cacheLock.ExitReadLock(); + } + cacheLock.EnterWriteLock(); + try + { + if (!ContainsKey(key)) + { + Add(key, defaultValueDelegate()); + } + return this[key]; + } + finally + { + cacheLock.ExitWriteLock(); + } + } + + public void SetOrAdd(TKey key, TValue value) + { + cacheLock.EnterWriteLock(); + try + { + if (ContainsKey(key)) + { + this[key] = value; + } + else + { + Add(key, value); + } + } + finally + { + cacheLock.ExitWriteLock(); + } + } + } +} diff --git a/HudsonTrayTracker/Utils/IO/PathHelper.cs b/JenkinsTray/Utils/IO/PathHelper.cs similarity index 94% rename from HudsonTrayTracker/Utils/IO/PathHelper.cs rename to JenkinsTray/Utils/IO/PathHelper.cs index fe1839e..0b51765 100644 --- a/HudsonTrayTracker/Utils/IO/PathHelper.cs +++ b/JenkinsTray/Utils/IO/PathHelper.cs @@ -1,42 +1,42 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; - -namespace Hudson.TrayTracker.Utils.IO -{ - public static class PathHelper - { - // returns - // - 'absoluteOrRelativePath' if 'absoluteOrRelativePath' is absolute - // - 'pathRoot\absoluteOrRelativePath' otherwise - public static string GetPath(string absoluteOrRelativePath, string pathRoot) - { - if (absoluteOrRelativePath == null) - return null; - if (Path.IsPathRooted(absoluteOrRelativePath)) - return absoluteOrRelativePath; - return Path.Combine(pathRoot, absoluteOrRelativePath); - } - - public static string Combine(params string[] paths) - { - string res = null; - foreach (string path in paths) - { - if (res == null) - res = path; - else - res = Path.Combine(res, path); - } - return res; - } - - public static string GetAbsolutePath(Assembly assembly) - { - string startupPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); - Uri uri = new Uri(startupPath); - return uri.LocalPath; - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace Jenkins.Tray.Utils.IO +{ + public static class PathHelper + { + // returns + // - 'absoluteOrRelativePath' if 'absoluteOrRelativePath' is absolute + // - 'pathRoot\absoluteOrRelativePath' otherwise + public static string GetPath(string absoluteOrRelativePath, string pathRoot) + { + if (absoluteOrRelativePath == null) + return null; + if (Path.IsPathRooted(absoluteOrRelativePath)) + return absoluteOrRelativePath; + return Path.Combine(pathRoot, absoluteOrRelativePath); + } + + public static string Combine(params string[] paths) + { + string res = null; + foreach (string path in paths) + { + if (res == null) + res = path; + else + res = Path.Combine(res, path); + } + return res; + } + + public static string GetAbsolutePath(Assembly assembly) + { + string startupPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); + Uri uri = new Uri(startupPath); + return uri.LocalPath; + } + } +} diff --git a/HudsonTrayTracker/Utils/Logging/LoggingHelper.cs b/JenkinsTray/Utils/Logging/LoggingHelper.cs similarity index 94% rename from HudsonTrayTracker/Utils/Logging/LoggingHelper.cs rename to JenkinsTray/Utils/Logging/LoggingHelper.cs index 75ffac3..0717e86 100644 --- a/HudsonTrayTracker/Utils/Logging/LoggingHelper.cs +++ b/JenkinsTray/Utils/Logging/LoggingHelper.cs @@ -1,74 +1,74 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; - -using Common.Logging; - -namespace Hudson.TrayTracker.Utils.Logging -{ - public static class LoggingHelper - { - public static void LogError(ILog logger, Exception ex) - { - if (logger == null) - throw new ArgumentNullException("logger"); - if (ex == null) - throw new ArgumentNullException("ex"); - - logger.Error(ex.GetType().Name + " - " + ex.Message); - String prefix = " "; - while (ex.InnerException != null) - { - prefix += " "; - logger.Error(prefix + ex.Message); - ex = ex.InnerException; - } - logger.Error(ex.StackTrace); - } - - // fail-safe - public static void LogDirectoryContent(ILog logger, string directory) - { - try - { - DoLogDirectoryContent(logger, directory); - } - catch - { - if (logger != null) - logger.Error("Failed to log directory content"); - } - } - - public static void DoLogDirectoryContent(ILog logger, string directory) - { - if (logger == null) - throw new ArgumentNullException("logger"); - - bool exists = Directory.Exists(directory); - - logger.Info("-- Logging directory content:"); - logger.Info("Directory: '" + directory + "'"); - logger.Info("Directory exists: " + exists); - - if (exists) - { - string[] files = Directory.GetFiles(directory); - foreach (string file in files) - { - FileInfo fileInfo = new FileInfo(file); - logger.Info("File: '" + file + "' (size=" + fileInfo.Length + ")"); - } - - string[] directories = Directory.GetDirectories(directory); - foreach (string subDirectory in directories) - { - logger.Info("Directory: '" + subDirectory + "'"); - } - } - - logger.Info("--"); - } - } +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +using Common.Logging; + +namespace Jenkins.Tray.Utils.Logging +{ + public static class LoggingHelper + { + public static void LogError(ILog logger, Exception ex) + { + if (logger == null) + throw new ArgumentNullException("logger"); + if (ex == null) + throw new ArgumentNullException("ex"); + + logger.Error(ex.GetType().Name + " - " + ex.Message); + String prefix = " "; + while (ex.InnerException != null) + { + prefix += " "; + logger.Error(prefix + ex.Message); + ex = ex.InnerException; + } + logger.Error(ex.StackTrace); + } + + // fail-safe + public static void LogDirectoryContent(ILog logger, string directory) + { + try + { + DoLogDirectoryContent(logger, directory); + } + catch + { + if (logger != null) + logger.Error("Failed to log directory content"); + } + } + + public static void DoLogDirectoryContent(ILog logger, string directory) + { + if (logger == null) + throw new ArgumentNullException("logger"); + + bool exists = Directory.Exists(directory); + + logger.Info("-- Logging directory content:"); + logger.Info("Directory: '" + directory + "'"); + logger.Info("Directory exists: " + exists); + + if (exists) + { + string[] files = Directory.GetFiles(directory); + foreach (string file in files) + { + FileInfo fileInfo = new FileInfo(file); + logger.Info("File: '" + file + "' (size=" + fileInfo.Length + ")"); + } + + string[] directories = Directory.GetDirectories(directory); + foreach (string subDirectory in directories) + { + logger.Info("Directory: '" + subDirectory + "'"); + } + } + + logger.Info("--"); + } + } } \ No newline at end of file diff --git a/HudsonTrayTracker/Utils/NetUtils.cs b/JenkinsTray/Utils/NetUtils.cs similarity index 92% rename from HudsonTrayTracker/Utils/NetUtils.cs rename to JenkinsTray/Utils/NetUtils.cs index ab75bb7..9c34de7 100644 --- a/HudsonTrayTracker/Utils/NetUtils.cs +++ b/JenkinsTray/Utils/NetUtils.cs @@ -1,26 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Hudson.TrayTracker.Utils -{ - public static class NetUtils - { - public static string ConcatUrls(string fragment1, params string[] fragments) - { - string res = fragment1.TrimEnd('/'); - foreach (string fragment in fragments) - res += "/" + fragment.TrimStart('/'); - return res; - } - - public static string ConcatUrlsWithoutTrailingSlash(string fragment1, params string[] fragments) - { - string res = fragment1.TrimEnd('/'); - foreach (string fragment in fragments) - res += fragment.TrimStart('/'); - return res; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Jenkins.Tray.Utils +{ + public static class NetUtils + { + public static string ConcatUrls(string fragment1, params string[] fragments) + { + string res = fragment1.TrimEnd('/'); + foreach (string fragment in fragments) + res += "/" + fragment.TrimStart('/'); + return res; + } + + public static string ConcatUrlsWithoutTrailingSlash(string fragment1, params string[] fragments) + { + string res = fragment1.TrimEnd('/'); + foreach (string fragment in fragments) + res += fragment.TrimStart('/'); + return res; + } + } +} diff --git a/HudsonTrayTracker/Utils/PInvokeUtils.cs b/JenkinsTray/Utils/PInvokeUtils.cs similarity index 90% rename from HudsonTrayTracker/Utils/PInvokeUtils.cs rename to JenkinsTray/Utils/PInvokeUtils.cs index 0eea508..b2995e7 100644 --- a/HudsonTrayTracker/Utils/PInvokeUtils.cs +++ b/JenkinsTray/Utils/PInvokeUtils.cs @@ -1,22 +1,22 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace Hudson.TrayTracker.Utils -{ - static class PInvokeUtils - { - [DllImport("user32.dll", CharSet = CharSet.Auto)] - static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam); - - const Int32 SC_RESTORE = 0xF120; - const Int32 WM_SYSCOMMAND = 0x112; - - public static void RestoreForm(Form form) - { - SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Jenkins.Tray.Utils +{ + static class PInvokeUtils + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam); + + const Int32 SC_RESTORE = 0xF120; + const Int32 WM_SYSCOMMAND = 0x112; + + public static void RestoreForm(Form form) + { + SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); + } + } +} diff --git a/HudsonTrayTracker/Utils/Serialization/CredentialsJsonConverter.cs b/JenkinsTray/Utils/Serialization/CredentialsJsonConverter.cs similarity index 92% rename from HudsonTrayTracker/Utils/Serialization/CredentialsJsonConverter.cs rename to JenkinsTray/Utils/Serialization/CredentialsJsonConverter.cs index cebf5b3..1bbdfde 100644 --- a/HudsonTrayTracker/Utils/Serialization/CredentialsJsonConverter.cs +++ b/JenkinsTray/Utils/Serialization/CredentialsJsonConverter.cs @@ -1,46 +1,46 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Newtonsoft.Json; -using Hudson.TrayTracker.Entities; - -namespace Hudson.TrayTracker.Utils.Serialization -{ - class CredentialsJsonConverter : JsonConverter - { - public override bool CanConvert(Type objectType) - { - return objectType == typeof(Credentials); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (reader.TokenType == JsonToken.Null) - return null; - - if (reader.TokenType != JsonToken.StartArray) - throw new Exception("Expecting StartArray, received " + reader.TokenType); - - reader.Read(); - string username = (string)reader.Value; - reader.Read(); - string passwordBase64 = (string)reader.Value; - reader.Read(); - - string password = Encoding.UTF8.GetString(Convert.FromBase64String(passwordBase64)); - Credentials res = new Credentials(username, password); - return res; - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - Credentials credentials = (Credentials)value; - string passwordBase64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials.Password)); - writer.WriteStartArray(); - writer.WriteValue(credentials.Username); - writer.WriteValue(passwordBase64); - writer.WriteEndArray(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using Jenkins.Tray.Entities; + +namespace Jenkins.Tray.Utils.Serialization +{ + class CredentialsJsonConverter : JsonConverter + { + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Credentials); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) + return null; + + if (reader.TokenType != JsonToken.StartArray) + throw new Exception("Expecting StartArray, received " + reader.TokenType); + + reader.Read(); + string username = (string)reader.Value; + reader.Read(); + string passwordBase64 = (string)reader.Value; + reader.Read(); + + string password = Encoding.UTF8.GetString(Convert.FromBase64String(passwordBase64)); + Credentials res = new Credentials(username, password); + return res; + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + Credentials credentials = (Credentials)value; + string passwordBase64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials.Password)); + writer.WriteStartArray(); + writer.WriteValue(credentials.Username); + writer.WriteValue(passwordBase64); + writer.WriteEndArray(); + } + } +} diff --git a/HudsonTrayTracker/Utils/StringUtils.cs b/JenkinsTray/Utils/StringUtils.cs similarity index 93% rename from HudsonTrayTracker/Utils/StringUtils.cs rename to JenkinsTray/Utils/StringUtils.cs index 6758494..3d392f7 100644 --- a/HudsonTrayTracker/Utils/StringUtils.cs +++ b/JenkinsTray/Utils/StringUtils.cs @@ -1,42 +1,42 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Hudson.TrayTracker.Utils -{ - public static class StringUtils - { - public static string Join(IEnumerable objects, string separator) - where T : class - { - string sep = ""; - StringBuilder res = new StringBuilder(); - foreach (object o in objects) - { - res.Append(sep).Append(o); - sep = separator; - } - return res.ToString(); - } - - // Extracts the user name from a string: - // - "User Name" -> "User Name" - // - "User Name " -> "User Name" - // - "User Name (user@example.com)" -> "User Name" - public static string ExtractUserName(string fullName) - { - string res = fullName; - - int index = res.IndexOf(" <"); - if (index > 0) - res = res.Substring(0, index); - - index = res.IndexOf(" ("); - if (index > 0) - res = res.Substring(0, index); - - res = res.Trim(); - return res; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; + +namespace Jenkins.Tray.Utils +{ + public static class StringUtils + { + public static string Join(IEnumerable objects, string separator) + where T : class + { + string sep = ""; + StringBuilder res = new StringBuilder(); + foreach (object o in objects) + { + res.Append(sep).Append(o); + sep = separator; + } + return res.ToString(); + } + + // Extracts the user name from a string: + // - "User Name" -> "User Name" + // - "User Name " -> "User Name" + // - "User Name (user@example.com)" -> "User Name" + public static string ExtractUserName(string fullName) + { + string res = fullName; + + int index = res.IndexOf(" <"); + if (index > 0) + res = res.Substring(0, index); + + index = res.IndexOf(" ("); + if (index > 0) + res = res.Substring(0, index); + + res = res.Trim(); + return res; + } + } +} diff --git a/HudsonTrayTracker/Utils/ThreadExceptionHandler.cs b/JenkinsTray/Utils/ThreadExceptionHandler.cs similarity index 77% rename from HudsonTrayTracker/Utils/ThreadExceptionHandler.cs rename to JenkinsTray/Utils/ThreadExceptionHandler.cs index a0c0e19..3f71bb0 100644 --- a/HudsonTrayTracker/Utils/ThreadExceptionHandler.cs +++ b/JenkinsTray/Utils/ThreadExceptionHandler.cs @@ -1,68 +1,68 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -using Common.Logging; - -using Hudson.TrayTracker.Utils.Logging; -using DevExpress.XtraEditors; - -namespace Hudson.TrayTracker.Utils -{ - static class ThreadExceptionHandler - { - private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - /// - /// Handles the thread exception. - /// - public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) - { - HandleException(e.Exception); - } - - public static void HandleException(Exception ex) - { - try - { - LoggingHelper.LogError(logger, ex); - - // Exit the program after having warned the user - ShowThreadExceptionDialog(ex); - Application.Exit(); - } - catch - { - // Fatal error, terminate program - try - { - XtraMessageBox.Show(HudsonTrayTrackerResources.FatalError_Message, - HudsonTrayTrackerResources.FatalError_Caption, - MessageBoxButtons.OK, - MessageBoxIcon.Stop); - } - finally - { - Application.Exit(); - } - } - } - - /// - /// Creates and displays the error message. - /// - private static DialogResult ShowThreadExceptionDialog(Exception ex) - { - string errorMessage = String.Format(HudsonTrayTrackerResources.SeriousErrorBoxMessage, - ex.GetType(), ex.Message); - - return XtraMessageBox.Show(errorMessage, - HudsonTrayTrackerResources.ErrorBoxCaption, - MessageBoxButtons.OK, - MessageBoxIcon.Stop); - } - } -} +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +using Common.Logging; + +using Jenkins.Tray.Utils.Logging; +using DevExpress.XtraEditors; + +namespace Jenkins.Tray.Utils +{ + static class ThreadExceptionHandler + { + private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + /// + /// Handles the thread exception. + /// + public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + HandleException(e.Exception); + } + + public static void HandleException(Exception ex) + { + try + { + LoggingHelper.LogError(logger, ex); + + // Exit the program after having warned the user + ShowThreadExceptionDialog(ex); + Application.Exit(); + } + catch + { + // Fatal error, terminate program + try + { + XtraMessageBox.Show(JenkinsTrayResources.FatalError_Message, + JenkinsTrayResources.FatalError_Caption, + MessageBoxButtons.OK, + MessageBoxIcon.Stop); + } + finally + { + Application.Exit(); + } + } + } + + /// + /// Creates and displays the error message. + /// + private static DialogResult ShowThreadExceptionDialog(Exception ex) + { + string errorMessage = String.Format(JenkinsTrayResources.SeriousErrorBoxMessage, + ex.GetType(), ex.Message); + + return XtraMessageBox.Show(errorMessage, + JenkinsTrayResources.ErrorBoxCaption, + MessageBoxButtons.OK, + MessageBoxIcon.Stop); + } + } +} diff --git a/HudsonTrayTracker/Utils/UIUtils.cs b/JenkinsTray/Utils/UIUtils.cs similarity index 69% rename from HudsonTrayTracker/Utils/UIUtils.cs rename to JenkinsTray/Utils/UIUtils.cs index b935053..0d58afb 100644 --- a/HudsonTrayTracker/Utils/UIUtils.cs +++ b/JenkinsTray/Utils/UIUtils.cs @@ -1,30 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Diagnostics; -using Common.Logging; -using DevExpress.XtraEditors; -using System.Windows.Forms; - -namespace Hudson.TrayTracker.Utils -{ - public static class UIUtils - { - public static void OpenWebPage(string url, ILog logger) - { - try - { - Process.Start(url); - } - catch (Exception ex) - { - logger.Warn("Failed opening page: " + url, ex); - - string errorMessage = String.Format(HudsonTrayTrackerResources.ErrorBoxMessage, ex.Message); - XtraMessageBox.Show(errorMessage, HudsonTrayTrackerResources.ErrorBoxCaption, - MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Diagnostics; +using Common.Logging; +using DevExpress.XtraEditors; +using System.Windows.Forms; + +namespace Jenkins.Tray.Utils +{ + public static class UIUtils + { + public static void OpenWebPage(string url, ILog logger) + { + try + { + Process.Start(url); + } + catch (Exception ex) + { + logger.Warn("Failed opening page: " + url, ex); + + string errorMessage = String.Format(JenkinsTrayResources.ErrorBoxMessage, ex.Message); + XtraMessageBox.Show(errorMessage, JenkinsTrayResources.ErrorBoxCaption, + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + } +} diff --git a/HudsonTrayTracker/Utils/Web/CookieAwareWebClient.cs b/JenkinsTray/Utils/Web/CookieAwareWebClient.cs similarity index 89% rename from HudsonTrayTracker/Utils/Web/CookieAwareWebClient.cs rename to JenkinsTray/Utils/Web/CookieAwareWebClient.cs index ef19a57..e5e0c7c 100644 --- a/HudsonTrayTracker/Utils/Web/CookieAwareWebClient.cs +++ b/JenkinsTray/Utils/Web/CookieAwareWebClient.cs @@ -1,20 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Net; - -namespace Hudson.TrayTracker.Utils.Web -{ - public class CookieAwareWebClient : WebClient - { - private CookieContainer cookieContainer = new CookieContainer(); - - protected override WebRequest GetWebRequest(Uri address) - { - WebRequest request = base.GetWebRequest(address); - if (request is HttpWebRequest) - ((HttpWebRequest)request).CookieContainer = cookieContainer; - return request; - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; + +namespace Jenkins.Tray.Utils.Web +{ + public class CookieAwareWebClient : WebClient + { + private CookieContainer cookieContainer = new CookieContainer(); + + protected override WebRequest GetWebRequest(Uri address) + { + WebRequest request = base.GetWebRequest(address); + if (request is HttpWebRequest) + ((HttpWebRequest)request).CookieContainer = cookieContainer; + return request; + } + } +} diff --git a/HudsonTrayTracker/Utils/XmlUtils.cs b/JenkinsTray/Utils/XmlUtils.cs similarity index 91% rename from HudsonTrayTracker/Utils/XmlUtils.cs rename to JenkinsTray/Utils/XmlUtils.cs index 131ad84..37728f7 100644 --- a/HudsonTrayTracker/Utils/XmlUtils.cs +++ b/JenkinsTray/Utils/XmlUtils.cs @@ -1,26 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Xml; - -namespace Hudson.TrayTracker.Utils -{ - public static class XmlUtils - { - public static string SelectSingleNodeText(XmlNode xml, string xpath) - { - XmlNode node = xml.SelectSingleNode(xpath); - if (node == null) - return null; - return node.InnerText; - } - - public static bool? SelectSingleNodeBoolean(XmlNode xml, string xpath) - { - XmlNode node = xml.SelectSingleNode(xpath); - if (node == null) - return null; - return (node.InnerText == "true"); - } - } -} +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; + +namespace Jenkins.Tray.Utils +{ + public static class XmlUtils + { + public static string SelectSingleNodeText(XmlNode xml, string xpath) + { + XmlNode node = xml.SelectSingleNode(xpath); + if (node == null) + return null; + return node.InnerText; + } + + public static bool? SelectSingleNodeBoolean(XmlNode xml, string xpath) + { + XmlNode node = xml.SelectSingleNode(xpath); + if (node == null) + return null; + return (node.InnerText == "true"); + } + } +} diff --git a/setup/GetVersion.cmd b/setup/GetVersion.cmd index 4556cb4..679adc8 100644 --- a/setup/GetVersion.cmd +++ b/setup/GetVersion.cmd @@ -3,7 +3,7 @@ SetLocal EnableDelayedExpansion PushD "%~dp0" -Set "JenkinsTrayExe=..\HudsonTrayTracker\bin\x86\Release\JenkinsTray.exe" +Set "JenkinsTrayExe=..\JenkinsTray\bin\x86\Release\JenkinsTray.exe" Set "FileVerExe=..\Lib\Tools\filever.exe" for /F "usebackq tokens=4* delims= " %%F in (`%FileVerExe% /B /A /D %JenkinsTrayExe%`) do ( diff --git a/setup/HudsonTrayTracker.Setup.CustomActions/ApplicationInstaller.cs b/setup/JenkinsTray.Setup.CustomActions/ApplicationInstaller.cs similarity index 97% rename from setup/HudsonTrayTracker.Setup.CustomActions/ApplicationInstaller.cs rename to setup/JenkinsTray.Setup.CustomActions/ApplicationInstaller.cs index a20f305..a04b9cd 100644 --- a/setup/HudsonTrayTracker.Setup.CustomActions/ApplicationInstaller.cs +++ b/setup/JenkinsTray.Setup.CustomActions/ApplicationInstaller.cs @@ -1,58 +1,58 @@ -using System; -using System.Collections; -using System.Text; -using System.ComponentModel; -using System.Configuration.Install; -using System.Diagnostics; -using System.Windows.Forms; - -namespace JenkinsTray.Setup.CustomActions -{ - [RunInstaller(true)] - public class ApplicationInstaller : Installer - { - public override void Install(IDictionary stateSaver) - { - base.Install(stateSaver); - Context.LogMessage("ApplicationInstaller[Install]"); - } - - public override void Uninstall(IDictionary savedState) - { - base.Uninstall(savedState); - - Context.LogMessage("ApplicationInstaller[Uninstall]: stopping all instances of the application"); - - Process[] processes = Process.GetProcessesByName("JenkinsTray"); - Context.LogMessage("ApplicationInstaller[Uninstall]: found " + processes.Length + " instances to stop"); - - foreach (Process process in processes) - { - Context.LogMessage("ApplicationInstaller[Uninstall]: Stopping process id: " + process.Id); - try - { - process.Kill(); - } - catch (Exception ex) - { - Context.LogMessage("ApplicationInstaller[Uninstall]: Failed stopping process: " - + ex.Message + "\n" + ex.StackTrace); - } - } - - Context.LogMessage("ApplicationInstaller[Uninstall]: done"); - } - - public override void Commit(IDictionary savedState) - { - base.Commit(savedState); - Context.LogMessage("ApplicationInstaller[Commit]"); - } - - public override void Rollback(IDictionary savedState) - { - base.Rollback(savedState); - Context.LogMessage("ApplicationInstaller[Rollback]"); - } - } -} +using System; +using System.Collections; +using System.Text; +using System.ComponentModel; +using System.Configuration.Install; +using System.Diagnostics; +using System.Windows.Forms; + +namespace JenkinsTray.Setup.CustomActions +{ + [RunInstaller(true)] + public class ApplicationInstaller : Installer + { + public override void Install(IDictionary stateSaver) + { + base.Install(stateSaver); + Context.LogMessage("ApplicationInstaller[Install]"); + } + + public override void Uninstall(IDictionary savedState) + { + base.Uninstall(savedState); + + Context.LogMessage("ApplicationInstaller[Uninstall]: stopping all instances of the application"); + + Process[] processes = Process.GetProcessesByName("JenkinsTray"); + Context.LogMessage("ApplicationInstaller[Uninstall]: found " + processes.Length + " instances to stop"); + + foreach (Process process in processes) + { + Context.LogMessage("ApplicationInstaller[Uninstall]: Stopping process id: " + process.Id); + try + { + process.Kill(); + } + catch (Exception ex) + { + Context.LogMessage("ApplicationInstaller[Uninstall]: Failed stopping process: " + + ex.Message + "\n" + ex.StackTrace); + } + } + + Context.LogMessage("ApplicationInstaller[Uninstall]: done"); + } + + public override void Commit(IDictionary savedState) + { + base.Commit(savedState); + Context.LogMessage("ApplicationInstaller[Commit]"); + } + + public override void Rollback(IDictionary savedState) + { + base.Rollback(savedState); + Context.LogMessage("ApplicationInstaller[Rollback]"); + } + } +} diff --git a/setup/HudsonTrayTracker.Setup.CustomActions/FileVersion.cs b/setup/JenkinsTray.Setup.CustomActions/FileVersion.cs similarity index 100% rename from setup/HudsonTrayTracker.Setup.CustomActions/FileVersion.cs rename to setup/JenkinsTray.Setup.CustomActions/FileVersion.cs diff --git a/setup/HudsonTrayTracker.Setup.CustomActions/HudsonTrayTracker.Setup.CustomActions.csproj b/setup/JenkinsTray.Setup.CustomActions/JenkinsTray.Setup.CustomActions.csproj similarity index 97% rename from setup/HudsonTrayTracker.Setup.CustomActions/HudsonTrayTracker.Setup.CustomActions.csproj rename to setup/JenkinsTray.Setup.CustomActions/JenkinsTray.Setup.CustomActions.csproj index 7d22488..612cdb0 100644 --- a/setup/HudsonTrayTracker.Setup.CustomActions/HudsonTrayTracker.Setup.CustomActions.csproj +++ b/setup/JenkinsTray.Setup.CustomActions/JenkinsTray.Setup.CustomActions.csproj @@ -1,116 +1,116 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {95AA7347-A21A-4F09-80DF-D9797B0FA997} - Library - Properties - JenkinsTray.Setup.CustomActions - JenkinsTray.Setup.CustomActions - v2.0 - 512 - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - AllRules.ruleset - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - AllRules.ruleset - - - - - - - - - - - - Properties\VersionInfo.cs - - - Component - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {95AA7347-A21A-4F09-80DF-D9797B0FA997} + Library + Properties + JenkinsTray.Setup.CustomActions + JenkinsTray.Setup.CustomActions + v2.0 + 512 + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + AllRules.ruleset + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + AllRules.ruleset + + + + + + + + + + + + Properties\VersionInfo.cs + + + Component + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + \ No newline at end of file diff --git a/setup/HudsonTrayTracker.Setup.CustomActions/Properties/AssemblyInfo.cs b/setup/JenkinsTray.Setup.CustomActions/Properties/AssemblyInfo.cs similarity index 97% rename from setup/HudsonTrayTracker.Setup.CustomActions/Properties/AssemblyInfo.cs rename to setup/JenkinsTray.Setup.CustomActions/Properties/AssemblyInfo.cs index c6579d6..3a0d622 100644 --- a/setup/HudsonTrayTracker.Setup.CustomActions/Properties/AssemblyInfo.cs +++ b/setup/JenkinsTray.Setup.CustomActions/Properties/AssemblyInfo.cs @@ -1,31 +1,31 @@ -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("JenkinsTray.Setup.CustomActions")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[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("ac4e74df-2018-4b0e-b22c-9aed1b4f9b98")] - -// 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.*")] +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("JenkinsTray.Setup.CustomActions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[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("ac4e74df-2018-4b0e-b22c-9aed1b4f9b98")] + +// 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.*")] diff --git a/setup/HudsonTrayTracker.WixSetup.sln b/setup/JenkinsTray.WixSetup.sln similarity index 72% rename from setup/HudsonTrayTracker.WixSetup.sln rename to setup/JenkinsTray.WixSetup.sln index 83a15b0..9f7ff6d 100644 --- a/setup/HudsonTrayTracker.WixSetup.sln +++ b/setup/JenkinsTray.WixSetup.sln @@ -1,28 +1,28 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "HudsonTrayTracker.WixSetup", "HudsonTrayTracker.WixSetup\HudsonTrayTracker.WixSetup.wixproj", "{4839B061-A1DF-4F9F-852E-95F534D949BB}" - ProjectSection(ProjectDependencies) = postProject - {95AA7347-A21A-4F09-80DF-D9797B0FA997} = {95AA7347-A21A-4F09-80DF-D9797B0FA997} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HudsonTrayTracker.Setup.CustomActions", "HudsonTrayTracker.Setup.CustomActions\HudsonTrayTracker.Setup.CustomActions.csproj", "{95AA7347-A21A-4F09-80DF-D9797B0FA997}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4839B061-A1DF-4F9F-852E-95F534D949BB}.Debug|x86.ActiveCfg = Debug|x86 - {4839B061-A1DF-4F9F-852E-95F534D949BB}.Debug|x86.Build.0 = Debug|x86 - {4839B061-A1DF-4F9F-852E-95F534D949BB}.Release|x86.ActiveCfg = Release|x86 - {4839B061-A1DF-4F9F-852E-95F534D949BB}.Release|x86.Build.0 = Release|x86 - {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Debug|x86.ActiveCfg = Debug|x86 - {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Debug|x86.Build.0 = Debug|x86 - {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Release|x86.ActiveCfg = Release|x86 - {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "JenkinsTray.WixSetup", "JenkinsTray.WixSetup\JenkinsTray.WixSetup.wixproj", "{4839B061-A1DF-4F9F-852E-95F534D949BB}" + ProjectSection(ProjectDependencies) = postProject + {95AA7347-A21A-4F09-80DF-D9797B0FA997} = {95AA7347-A21A-4F09-80DF-D9797B0FA997} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JenkinsTray.Setup.CustomActions", "JenkinsTray.Setup.CustomActions\JenkinsTray.Setup.CustomActions.csproj", "{95AA7347-A21A-4F09-80DF-D9797B0FA997}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4839B061-A1DF-4F9F-852E-95F534D949BB}.Debug|x86.ActiveCfg = Debug|x86 + {4839B061-A1DF-4F9F-852E-95F534D949BB}.Debug|x86.Build.0 = Debug|x86 + {4839B061-A1DF-4F9F-852E-95F534D949BB}.Release|x86.ActiveCfg = Release|x86 + {4839B061-A1DF-4F9F-852E-95F534D949BB}.Release|x86.Build.0 = Release|x86 + {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Debug|x86.ActiveCfg = Debug|x86 + {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Debug|x86.Build.0 = Debug|x86 + {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Release|x86.ActiveCfg = Release|x86 + {95AA7347-A21A-4F09-80DF-D9797B0FA997}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.WixSetup.wixproj b/setup/JenkinsTray.WixSetup/JenkinsTray.WixSetup.wixproj similarity index 90% rename from setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.WixSetup.wixproj rename to setup/JenkinsTray.WixSetup/JenkinsTray.WixSetup.wixproj index 3d2005e..83e484c 100644 --- a/setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.WixSetup.wixproj +++ b/setup/JenkinsTray.WixSetup/JenkinsTray.WixSetup.wixproj @@ -1,61 +1,61 @@ - - - - Debug - x86 - {4839b061-a1df-4f9f-852e-95f534d949bb} - 2.0 - JenkinsTray - Package - $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets - $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets - - - bin\$(Configuration)\ - obj\$(Configuration)\ - Debug - - - bin\$(Configuration)\ - obj\$(Configuration)\ - - - - - - - - $(WixExtDir)\WixUtilExtension.dll - WixUtilExtension - - - $(WixExtDir)\WixUIExtension.dll - WixUIExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + x86 + {4839b061-a1df-4f9f-852e-95f534d949bb} + 2.0 + JenkinsTray + Package + $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets + $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets + + + bin\$(Configuration)\ + obj\$(Configuration)\ + Debug + + + bin\$(Configuration)\ + obj\$(Configuration)\ + + + + + + + + $(WixExtDir)\WixUtilExtension.dll + WixUtilExtension + + + $(WixExtDir)\WixUIExtension.dll + WixUIExtension + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.wxs b/setup/JenkinsTray.WixSetup/JenkinsTray.wxs similarity index 96% rename from setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.wxs rename to setup/JenkinsTray.WixSetup/JenkinsTray.wxs index d7dd20d..fc4018d 100644 --- a/setup/HudsonTrayTracker.WixSetup/HudsonTrayTracker.wxs +++ b/setup/JenkinsTray.WixSetup/JenkinsTray.wxs @@ -1,240 +1,240 @@ - - - - - - - - NOT NEWERVERSIONDETECTED OR Installed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - "1"]]> - - WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed - 1 - - 1 - - 1 - 1 - NOT WIXUI_DONTVALIDATEPATH - "1"]]> - WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" - 1 - 1 - - NOT Installed - Installed - - 1 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - - $cmp0FAE03C65D96ED1D021C482BB95EC17C=2 - $cmp0FAE03C65D96ED1D021C482BB95EC17C=2 - - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 - - - + + + + + + + + NOT NEWERVERSIONDETECTED OR Installed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + "1"]]> + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + 1 + + 1 + + 1 + 1 + NOT WIXUI_DONTVALIDATEPATH + "1"]]> + WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" + 1 + 1 + + NOT Installed + Installed + + 1 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + + $cmp0FAE03C65D96ED1D021C482BB95EC17C=2 + $cmp0FAE03C65D96ED1D021C482BB95EC17C=2 + + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + $cmp0FAE03C65D96ED1D021C482BB95EC17C>2 + + + diff --git a/setup/HudsonTrayTracker.WixSetup/src/InstallUtilConfig.xml b/setup/JenkinsTray.WixSetup/src/InstallUtilConfig.xml similarity index 95% rename from setup/HudsonTrayTracker.WixSetup/src/InstallUtilConfig.xml rename to setup/JenkinsTray.WixSetup/src/InstallUtilConfig.xml index 1da48bd..cb272b5 100644 --- a/setup/HudsonTrayTracker.WixSetup/src/InstallUtilConfig.xml +++ b/setup/JenkinsTray.WixSetup/src/InstallUtilConfig.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/setup/HudsonTrayTracker.WixSetup/src/InstallUtilLib.dll b/setup/JenkinsTray.WixSetup/src/InstallUtilLib.dll similarity index 100% rename from setup/HudsonTrayTracker.WixSetup/src/InstallUtilLib.dll rename to setup/JenkinsTray.WixSetup/src/InstallUtilLib.dll