Repository: peterhaneve/evemon
Branch: main
Commit: 7a8903818d40
Files: 1881
Total size: 14.0 MB
Directory structure:
gitextract__b3_uj3j/
├── .editorconfig
├── .gitattributes
├── .gitignore
├── EVEMon.sln
├── README.md
├── SharedAssemblyInfo.cs
├── SharedAssemblyInfo.template.cs
├── designs/
│ ├── AutoUpdate-Architecture.bmml
│ ├── AutoUpdate-UI-EVEMonUpdate.bmml
│ ├── AutoUpdate-UI-UpdateDetails.bmml
│ └── PosMonitor.bmml
├── src/
│ ├── EVEMon/
│ │ ├── APIErrorHandling/
│ │ │ ├── APIErrorWindow.Designer.cs
│ │ │ ├── APIErrorWindow.cs
│ │ │ ├── APIErrorWindow.resx
│ │ │ ├── HttpTimeoutTroubleshooter.Designer.cs
│ │ │ ├── HttpTimeoutTroubleshooter.cs
│ │ │ └── HttpTimeoutTroubleshooter.resx
│ │ ├── About/
│ │ │ ├── AboutWindow.Designer.cs
│ │ │ ├── AboutWindow.cs
│ │ │ └── AboutWindow.resx
│ │ ├── ApiCredentialsManagement/
│ │ │ ├── CharacterDeletionWindow.Designer.cs
│ │ │ ├── CharacterDeletionWindow.cs
│ │ │ ├── CharacterDeletionWindow.resx
│ │ │ ├── CharacterImportationWindow.Designer.cs
│ │ │ ├── CharacterImportationWindow.cs
│ │ │ ├── CharacterImportationWindow.resx
│ │ │ ├── EsiKeyDeletionWindow.Designer.cs
│ │ │ ├── EsiKeyDeletionWindow.cs
│ │ │ ├── EsiKeyDeletionWindow.resx
│ │ │ ├── EsiKeyUpdateOrAdditionWindow.Designer.cs
│ │ │ ├── EsiKeyUpdateOrAdditionWindow.cs
│ │ │ ├── EsiKeyUpdateOrAdditionWindow.resx
│ │ │ ├── EsiKeysListBox.cs
│ │ │ ├── EsiKeysManagementWindow.Designer.cs
│ │ │ ├── EsiKeysManagementWindow.cs
│ │ │ └── EsiKeysManagementWindow.resx
│ │ ├── App.config
│ │ ├── BlankCharacter/
│ │ │ ├── BlankCharacterControl.Designer.cs
│ │ │ ├── BlankCharacterControl.cs
│ │ │ ├── BlankCharacterControl.resx
│ │ │ ├── BlankCharacterWindow.Designer.cs
│ │ │ ├── BlankCharacterWindow.cs
│ │ │ └── BlankCharacterWindow.resx
│ │ ├── BlankCharacterControl.Designer.cs
│ │ ├── BlankCharacterControl.cs
│ │ ├── BlankCharacterControl.resx
│ │ ├── BlankCharacterWindow.Designer.cs
│ │ ├── BlankCharacterWindow.cs
│ │ ├── BlankCharacterWindow.resx
│ │ ├── CharacterMonitoring/
│ │ │ ├── AssetsColumnsSelectWindow.cs
│ │ │ ├── CharacterAssetsList.Designer.cs
│ │ │ ├── CharacterAssetsList.cs
│ │ │ ├── CharacterAssetsList.resx
│ │ │ ├── CharacterContactList.Designer.cs
│ │ │ ├── CharacterContactList.cs
│ │ │ ├── CharacterContactList.resx
│ │ │ ├── CharacterContractsList.Designer.cs
│ │ │ ├── CharacterContractsList.cs
│ │ │ ├── CharacterContractsList.resx
│ │ │ ├── CharacterEmploymentHistoryList.Designer.cs
│ │ │ ├── CharacterEmploymentHistoryList.cs
│ │ │ ├── CharacterEmploymentHistoryList.resx
│ │ │ ├── CharacterEveMailMessagesList.Designer.cs
│ │ │ ├── CharacterEveMailMessagesList.cs
│ │ │ ├── CharacterEveMailMessagesList.resx
│ │ │ ├── CharacterEveNotificationsList.Designer.cs
│ │ │ ├── CharacterEveNotificationsList.cs
│ │ │ ├── CharacterEveNotificationsList.resx
│ │ │ ├── CharacterFactionalWarfareStatsList.Designer.cs
│ │ │ ├── CharacterFactionalWarfareStatsList.cs
│ │ │ ├── CharacterFactionalWarfareStatsList.resx
│ │ │ ├── CharacterIndustryJobsList.Designer.cs
│ │ │ ├── CharacterIndustryJobsList.cs
│ │ │ ├── CharacterIndustryJobsList.resx
│ │ │ ├── CharacterKillLogList.Designer.cs
│ │ │ ├── CharacterKillLogList.cs
│ │ │ ├── CharacterKillLogList.resx
│ │ │ ├── CharacterLoyaltyList.Designer.cs
│ │ │ ├── CharacterLoyaltyList.cs
│ │ │ ├── CharacterLoyaltyList.resx
│ │ │ ├── CharacterMarketOrdersList.Designer.cs
│ │ │ ├── CharacterMarketOrdersList.cs
│ │ │ ├── CharacterMarketOrdersList.resx
│ │ │ ├── CharacterMedalsList.Designer.cs
│ │ │ ├── CharacterMedalsList.cs
│ │ │ ├── CharacterMedalsList.resx
│ │ │ ├── CharacterMonitor.Designer.cs
│ │ │ ├── CharacterMonitor.cs
│ │ │ ├── CharacterMonitor.resx
│ │ │ ├── CharacterMonitorBody.Designer.cs
│ │ │ ├── CharacterMonitorBody.cs
│ │ │ ├── CharacterMonitorBody.resx
│ │ │ ├── CharacterMonitorFooter.Designer.cs
│ │ │ ├── CharacterMonitorFooter.cs
│ │ │ ├── CharacterMonitorFooter.resx
│ │ │ ├── CharacterMonitorHeader.Designer.cs
│ │ │ ├── CharacterMonitorHeader.cs
│ │ │ ├── CharacterMonitorHeader.resx
│ │ │ ├── CharacterPlanetaryList.Designer.cs
│ │ │ ├── CharacterPlanetaryList.cs
│ │ │ ├── CharacterPlanetaryList.resx
│ │ │ ├── CharacterResearchPointsList.Designer.cs
│ │ │ ├── CharacterResearchPointsList.cs
│ │ │ ├── CharacterResearchPointsList.resx
│ │ │ ├── CharacterSkillsList.Designer.cs
│ │ │ ├── CharacterSkillsList.cs
│ │ │ ├── CharacterSkillsList.resx
│ │ │ ├── CharacterSkillsQueueList.Designer.cs
│ │ │ ├── CharacterSkillsQueueList.cs
│ │ │ ├── CharacterSkillsQueueList.resx
│ │ │ ├── CharacterStandingsList.Designer.cs
│ │ │ ├── CharacterStandingsList.cs
│ │ │ ├── CharacterStandingsList.resx
│ │ │ ├── CharacterWalletJournalList.Designer.cs
│ │ │ ├── CharacterWalletJournalList.cs
│ │ │ ├── CharacterWalletJournalList.resx
│ │ │ ├── CharacterWalletTransactionsList.Designer.cs
│ │ │ ├── CharacterWalletTransactionsList.cs
│ │ │ ├── CharacterWalletTransactionsList.resx
│ │ │ ├── ContractsColumnsSelectWindow.cs
│ │ │ ├── EveMailMessagesColumnsSelectWindow.cs
│ │ │ ├── EveNotificationsColumnsSelectWindow.cs
│ │ │ ├── IndustryJobsColumnsSelectWindow.cs
│ │ │ ├── MarketOrdersColumnsSelectWindow.cs
│ │ │ ├── PlanetaryColumnsSelectWindow.Designer.cs
│ │ │ ├── PlanetaryColumnsSelectWindow.cs
│ │ │ ├── ResearchColumnsSelectWindow.cs
│ │ │ ├── WalletJournalColumnsSelectWindow.cs
│ │ │ └── WalletTransactionsColumnsSelectWindow.cs
│ │ ├── CharactersComparison/
│ │ │ ├── CharactersComparisonWindow.Designer.cs
│ │ │ ├── CharactersComparisonWindow.cs
│ │ │ └── CharactersComparisonWindow.resx
│ │ ├── Controls/
│ │ │ ├── KillReportAttacker.Designer.cs
│ │ │ ├── KillReportAttacker.cs
│ │ │ ├── KillReportAttacker.resx
│ │ │ ├── KillReportFittingContent.Designer.cs
│ │ │ ├── KillReportFittingContent.cs
│ │ │ ├── KillReportFittingContent.resx
│ │ │ ├── KillReportInvolvedParties.Designer.cs
│ │ │ ├── KillReportInvolvedParties.cs
│ │ │ ├── KillReportInvolvedParties.resx
│ │ │ ├── KillReportVictim.Designer.cs
│ │ │ ├── KillReportVictim.cs
│ │ │ ├── KillReportVictim.resx
│ │ │ ├── NotificationList.Designer.cs
│ │ │ ├── NotificationList.cs
│ │ │ ├── NotificationList.resx
│ │ │ ├── Overview.Designer.cs
│ │ │ ├── Overview.cs
│ │ │ ├── Overview.resx
│ │ │ ├── OverviewItem.Designer.cs
│ │ │ ├── OverviewItem.cs
│ │ │ ├── OverviewItem.resx
│ │ │ ├── OverviewLabel.cs
│ │ │ ├── ReadingPane.Designer.cs
│ │ │ ├── ReadingPane.cs
│ │ │ └── ReadingPane.resx
│ │ ├── DetailsWindow/
│ │ │ ├── ContractDetailsWindow.Designer.cs
│ │ │ ├── ContractDetailsWindow.cs
│ │ │ ├── ContractDetailsWindow.resx
│ │ │ ├── EveMessageWindow.Designer.cs
│ │ │ ├── EveMessageWindow.cs
│ │ │ ├── EveMessageWindow.resx
│ │ │ ├── KillReportWindow.Designer.cs
│ │ │ ├── KillReportWindow.cs
│ │ │ ├── KillReportWindow.resx
│ │ │ ├── WalletJournalChartWindow.Designer.cs
│ │ │ ├── WalletJournalChartWindow.cs
│ │ │ └── WalletJournalChartWindow.resx
│ │ ├── EVEMon.csproj
│ │ ├── ExceptionHandling/
│ │ │ ├── UnhandledExceptionWindow.Designer.cs
│ │ │ ├── UnhandledExceptionWindow.cs
│ │ │ └── UnhandledExceptionWindow.resx
│ │ ├── GlobalSuppressions.cs
│ │ ├── ImplantControls/
│ │ │ ├── ImplantSetsWindow.Designer.cs
│ │ │ ├── ImplantSetsWindow.cs
│ │ │ ├── ImplantSetsWindow.resx
│ │ │ ├── ImplantTooltip.Designer.cs
│ │ │ ├── ImplantTooltip.cs
│ │ │ └── ImplantTooltip.resx
│ │ ├── MainWindow.Designer.cs
│ │ ├── MainWindow.cs
│ │ ├── MainWindow.resx
│ │ ├── NotificationWindow/
│ │ │ ├── ContractsWindow.Designer.cs
│ │ │ ├── ContractsWindow.cs
│ │ │ ├── ContractsWindow.resx
│ │ │ ├── IndustryJobsWindow.Designer.cs
│ │ │ ├── IndustryJobsWindow.cs
│ │ │ ├── IndustryJobsWindow.resx
│ │ │ ├── MarketOrdersWindow.Designer.cs
│ │ │ ├── MarketOrdersWindow.cs
│ │ │ ├── MarketOrdersWindow.resx
│ │ │ ├── OwnedSkillBooksWindow.Designer.cs
│ │ │ ├── OwnedSkillBooksWindow.cs
│ │ │ ├── OwnedSkillBooksWindow.resx
│ │ │ ├── PlanetaryPinsWindow.Designer.cs
│ │ │ ├── PlanetaryPinsWindow.cs
│ │ │ ├── PlanetaryPinsWindow.resx
│ │ │ ├── SkillCompletionWindow.Designer.cs
│ │ │ ├── SkillCompletionWindow.cs
│ │ │ ├── SkillCompletionWindow.resx
│ │ │ ├── TimeCheckNotification.Designer.cs
│ │ │ ├── TimeCheckNotification.cs
│ │ │ └── TimeCheckNotification.resx
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── Schedule/
│ │ │ ├── CalendarControl.Designer.cs
│ │ │ ├── CalendarControl.cs
│ │ │ ├── CalendarControl.resx
│ │ │ ├── DateSelectWindow.Designer.cs
│ │ │ ├── DateSelectWindow.cs
│ │ │ ├── DateSelectWindow.resx
│ │ │ ├── EditScheduleEntryWindow.Designer.cs
│ │ │ ├── EditScheduleEntryWindow.cs
│ │ │ ├── EditScheduleEntryWindow.resx
│ │ │ ├── ScheduleCalendar.cs
│ │ │ ├── ScheduleEditorWindow.Designer.cs
│ │ │ ├── ScheduleEditorWindow.cs
│ │ │ └── ScheduleEditorWindow.resx
│ │ ├── SettingsUI/
│ │ │ ├── CloudStorageServiceControl.Designer.cs
│ │ │ ├── CloudStorageServiceControl.cs
│ │ │ ├── CloudStorageServiceControl.resx
│ │ │ ├── EmailNotificationsControl.Designer.cs
│ │ │ ├── EmailNotificationsControl.cs
│ │ │ ├── EmailNotificationsControl.resx
│ │ │ ├── ExternalCalendarControl.Designer.cs
│ │ │ ├── ExternalCalendarControl.cs
│ │ │ ├── ExternalCalendarControl.resx
│ │ │ ├── NotificationsControl.Designer.cs
│ │ │ ├── NotificationsControl.cs
│ │ │ ├── NotificationsControl.resx
│ │ │ ├── PortableEveClientsControl.Designer.cs
│ │ │ ├── PortableEveClientsControl.cs
│ │ │ ├── PortableEveClientsControl.resx
│ │ │ ├── ProxyAuthenticationWindow.Designer.cs
│ │ │ ├── ProxyAuthenticationWindow.cs
│ │ │ ├── ProxyAuthenticationWindow.resx
│ │ │ ├── SettingsFileStorageControl.Designer.cs
│ │ │ ├── SettingsFileStorageControl.cs
│ │ │ ├── SettingsFileStorageControl.resx
│ │ │ ├── SettingsForm.Designer.cs
│ │ │ ├── SettingsForm.cs
│ │ │ ├── SettingsForm.resx
│ │ │ ├── TrayBaseWindow.Designer.cs
│ │ │ ├── TrayBaseWindow.cs
│ │ │ ├── TrayBaseWindow.resx
│ │ │ ├── TrayPopUpConfigForm.Designer.cs
│ │ │ ├── TrayPopUpConfigForm.cs
│ │ │ ├── TrayPopUpConfigForm.resx
│ │ │ ├── TrayPopUpWindow.cs
│ │ │ ├── TrayTooltipConfigForm.Designer.cs
│ │ │ ├── TrayTooltipConfigForm.cs
│ │ │ ├── TrayTooltipConfigForm.resx
│ │ │ ├── TrayTooltipWindow.cs
│ │ │ ├── UpdateSettingsControl.Designer.cs
│ │ │ ├── UpdateSettingsControl.cs
│ │ │ └── UpdateSettingsControl.resx
│ │ ├── SkillPlanner/
│ │ │ ├── AttributeBarControl.cs
│ │ │ ├── AttributeButtonControl.cs
│ │ │ ├── AttributesOptimizerControl.Designer.cs
│ │ │ ├── AttributesOptimizerControl.cs
│ │ │ ├── AttributesOptimizerControl.resx
│ │ │ ├── AttributesOptimizerOptionsWindow.Designer.cs
│ │ │ ├── AttributesOptimizerOptionsWindow.cs
│ │ │ ├── AttributesOptimizerOptionsWindow.resx
│ │ │ ├── AttributesOptimizerWindow.Designer.cs
│ │ │ ├── AttributesOptimizerWindow.cs
│ │ │ ├── AttributesOptimizerWindow.resx
│ │ │ ├── BlueprintBrowserControl.Designer.cs
│ │ │ ├── BlueprintBrowserControl.cs
│ │ │ ├── BlueprintBrowserControl.resx
│ │ │ ├── BlueprintSelectControl.Designer.cs
│ │ │ ├── BlueprintSelectControl.cs
│ │ │ ├── BlueprintSelectControl.resx
│ │ │ ├── BrowserClasses.cd
│ │ │ ├── CertificateBrowserControl.Designer.cs
│ │ │ ├── CertificateBrowserControl.cs
│ │ │ ├── CertificateBrowserControl.resx
│ │ │ ├── CertificateSelectControl.Designer.cs
│ │ │ ├── CertificateSelectControl.cs
│ │ │ ├── CertificateSelectControl.resx
│ │ │ ├── CertificateTreeDisplayControl.Designer.cs
│ │ │ ├── CertificateTreeDisplayControl.cs
│ │ │ ├── CertificateTreeDisplayControl.resx
│ │ │ ├── EveObjectBrowserControl.Designer.cs
│ │ │ ├── EveObjectBrowserControl.cs
│ │ │ ├── EveObjectBrowserControl.resx
│ │ │ ├── EveObjectBrowserSimple.Designer.cs
│ │ │ ├── EveObjectBrowserSimple.cs
│ │ │ ├── EveObjectBrowserSimple.resx
│ │ │ ├── EveObjectSelectControl.Designer.cs
│ │ │ ├── EveObjectSelectControl.cs
│ │ │ ├── EveObjectSelectControl.resx
│ │ │ ├── ImplantCalculatorWindow.Designer.cs
│ │ │ ├── ImplantCalculatorWindow.cs
│ │ │ ├── ImplantCalculatorWindow.resx
│ │ │ ├── ItemBrowserControl.Designer.cs
│ │ │ ├── ItemBrowserControl.cs
│ │ │ ├── ItemBrowserControl.resx
│ │ │ ├── ItemSelectControl.Designer.cs
│ │ │ ├── ItemSelectControl.cs
│ │ │ ├── ItemSelectControl.resx
│ │ │ ├── LoadoutImportationWindow.Designer.cs
│ │ │ ├── LoadoutImportationWindow.cs
│ │ │ ├── LoadoutImportationWindow.resx
│ │ │ ├── MasteryTreeDisplayControl.Designer.cs
│ │ │ ├── MasteryTreeDisplayControl.cs
│ │ │ ├── MasteryTreeDisplayControl.resx
│ │ │ ├── NewPlanWindow.Designer.cs
│ │ │ ├── NewPlanWindow.cs
│ │ │ ├── NewPlanWindow.resx
│ │ │ ├── ObsoleteEntriesWindow.Designer.cs
│ │ │ ├── ObsoleteEntriesWindow.cs
│ │ │ ├── ObsoleteEntriesWindow.resx
│ │ │ ├── OverridenTreeView.cs
│ │ │ ├── PlanColumnSelectWindow.cs
│ │ │ ├── PlanEditorControl.Designer.cs
│ │ │ ├── PlanEditorControl.cs
│ │ │ ├── PlanEditorControl.resx
│ │ │ ├── PlanImportationFromCharacterWindow.Designer.cs
│ │ │ ├── PlanImportationFromCharacterWindow.cs
│ │ │ ├── PlanImportationFromCharacterWindow.resx
│ │ │ ├── PlanManagementWindow.Designer.cs
│ │ │ ├── PlanManagementWindow.cs
│ │ │ ├── PlanManagementWindow.resx
│ │ │ ├── PlanNotesEditorWindow.Designer.cs
│ │ │ ├── PlanNotesEditorWindow.cs
│ │ │ ├── PlanNotesEditorWindow.resx
│ │ │ ├── PlanPrioritiesEditorWindow.Designer.cs
│ │ │ ├── PlanPrioritiesEditorWindow.cs
│ │ │ ├── PlanPrioritiesEditorWindow.resx
│ │ │ ├── PlanToOperationWindow.Designer.cs
│ │ │ ├── PlanToOperationWindow.cs
│ │ │ ├── PlanToOperationWindow.resx
│ │ │ ├── PlanWindow.Designer.cs
│ │ │ ├── PlanWindow.cs
│ │ │ ├── PlanWindow.resx
│ │ │ ├── RequiredSkillsControl.Designer.cs
│ │ │ ├── RequiredSkillsControl.cs
│ │ │ ├── RequiredSkillsControl.resx
│ │ │ ├── ShipBrowserControl.Designer.cs
│ │ │ ├── ShipBrowserControl.cs
│ │ │ ├── ShipBrowserControl.resx
│ │ │ ├── ShipLoadoutSelectWindow.Designer.cs
│ │ │ ├── ShipLoadoutSelectWindow.cs
│ │ │ ├── ShipLoadoutSelectWindow.resx
│ │ │ ├── ShipSelectControl.Designer.cs
│ │ │ ├── ShipSelectControl.cs
│ │ │ ├── ShipSelectControl.resx
│ │ │ ├── SkillBrowserControl.Designer.cs
│ │ │ ├── SkillBrowserControl.cs
│ │ │ ├── SkillBrowserControl.resx
│ │ │ ├── SkillExplorerWindow.Designer.cs
│ │ │ ├── SkillExplorerWindow.cs
│ │ │ ├── SkillExplorerWindow.resx
│ │ │ ├── SkillSelectControl.Designer.cs
│ │ │ ├── SkillSelectControl.cs
│ │ │ ├── SkillSelectControl.resx
│ │ │ ├── SkillTreeDisplayControl.Designer.cs
│ │ │ ├── SkillTreeDisplayControl.cs
│ │ │ ├── SkillTreeDisplayControl.resx
│ │ │ ├── SuggestionWindow.Designer.cs
│ │ │ ├── SuggestionWindow.cs
│ │ │ └── SuggestionWindow.resx
│ │ ├── Updater/
│ │ │ ├── DataUpdateDownloadForm.Designer.cs
│ │ │ ├── DataUpdateDownloadForm.cs
│ │ │ ├── DataUpdateDownloadForm.resx
│ │ │ ├── DataUpdateNotifyForm.Designer.cs
│ │ │ ├── DataUpdateNotifyForm.cs
│ │ │ ├── DataUpdateNotifyForm.resx
│ │ │ ├── UpdateDownloadForm.Designer.cs
│ │ │ ├── UpdateDownloadForm.cs
│ │ │ ├── UpdateDownloadForm.resx
│ │ │ ├── UpdateNotifyForm.Designer.cs
│ │ │ ├── UpdateNotifyForm.cs
│ │ │ └── UpdateNotifyForm.resx
│ │ └── app.manifest
│ ├── EVEMon.Common/
│ │ ├── App.config
│ │ ├── AsyncPump.cs
│ │ ├── Attributes/
│ │ │ ├── EnforceUIThreadAffinity.cs
│ │ │ ├── ForcedOnStartupAttribute.cs
│ │ │ ├── FullKeyAttribute.cs
│ │ │ ├── HeaderAttribute.cs
│ │ │ ├── Internals/
│ │ │ │ └── NotifyPropertyChanged.Subs.cs
│ │ │ ├── ParentAttribute.cs
│ │ │ └── UpdateAttribute.cs
│ │ ├── CloudStorageServices/
│ │ │ ├── AuthenticationSteps.cs
│ │ │ ├── CloudStorageServiceAPIFile.cs
│ │ │ ├── CloudStorageServiceProvider.cs
│ │ │ ├── CloudStorageServiceResources.Designer.cs
│ │ │ ├── CloudStorageServiceResources.resx
│ │ │ ├── CloudStorageServiceSettings.Designer.cs
│ │ │ ├── CloudStorageServiceSettings.settings
│ │ │ ├── Dropbox/
│ │ │ │ ├── DropboxCloudStorageServiceProvider.cs
│ │ │ │ ├── DropboxCloudStorageServiceSettings.Designer.cs
│ │ │ │ └── DropboxCloudStorageServiceSettings.settings
│ │ │ ├── GoogleDrive/
│ │ │ │ ├── GoogleDriveCloudStorageServiceProvider.cs
│ │ │ │ ├── GoogleDriveCloudStorageServiceSettings.Designer.cs
│ │ │ │ └── GoogleDriveCloudStorageServiceSettings.settings
│ │ │ └── OneDrive/
│ │ │ ├── OneDriveCloudStorageServiceProvider.cs
│ │ │ ├── OneDriveCloudStorageServiceSettings.Designer.cs
│ │ │ └── OneDriveCloudStorageServiceSettings.settings
│ │ ├── Collections/
│ │ │ ├── BaseList.cs
│ │ │ ├── CollectionExtensions.cs
│ │ │ ├── EnumerableExtensions.cs
│ │ │ ├── FastList.cs
│ │ │ ├── Global/
│ │ │ │ ├── GlobalAPIKeyCollection.cs
│ │ │ │ ├── GlobalAPIProviderCollection.cs
│ │ │ │ ├── GlobalCharacterCollection.cs
│ │ │ │ ├── GlobalCharacterIdentityCollection.cs
│ │ │ │ ├── GlobalDatafileCollection.cs
│ │ │ │ ├── GlobalMonitoredCharacterCollection.cs
│ │ │ │ └── GlobalNotificationCollection.cs
│ │ │ ├── IReadonlyCollection.cs
│ │ │ ├── IReadonlyKeyedCollection.cs
│ │ │ ├── ReadonlyCollection.cs
│ │ │ ├── ReadonlyKeyedCollection.cs
│ │ │ └── ReadonlyVirtualCollection.cs
│ │ ├── Constants/
│ │ │ ├── CultureConstants.cs
│ │ │ ├── DBConstants.cs
│ │ │ ├── EveConstants.cs
│ │ │ ├── EveMonConstants.cs
│ │ │ ├── NetworkConstants.resx
│ │ │ └── NetworkConstants1.Designer.cs
│ │ ├── Controls/
│ │ │ ├── ApiErrorTroubleshooter.Designer.cs
│ │ │ ├── ApiErrorTroubleshooter.cs
│ │ │ ├── ApiErrorTroubleshooter.resx
│ │ │ ├── AutoEllipsisToolStripRenderer.cs
│ │ │ ├── BorderPanel.cs
│ │ │ ├── CharacterPortrait.Designer.cs
│ │ │ ├── CharacterPortrait.cs
│ │ │ ├── CharacterPortrait.resx
│ │ │ ├── CheckedComboBox.cs
│ │ │ ├── ColumnSelectWindow.Designer.cs
│ │ │ ├── ColumnSelectWindow.cs
│ │ │ ├── ColumnSelectWindow.resx
│ │ │ ├── ControlExtensions.cs
│ │ │ ├── CopySaveOptionsWindow.Designer.cs
│ │ │ ├── CopySaveOptionsWindow.cs
│ │ │ ├── CopySaveOptionsWindow.resx
│ │ │ ├── CustomComboBox.cs
│ │ │ ├── CustomCursors.cs
│ │ │ ├── DraggableListView.cs
│ │ │ ├── DraggableTabControl.cs
│ │ │ ├── DropDownMouseMoveComboBox.cs
│ │ │ ├── EVEMonForm.Designer.cs
│ │ │ ├── EVEMonForm.cs
│ │ │ ├── EVEMonForm.resx
│ │ │ ├── EveFolderWindow.Designer.cs
│ │ │ ├── EveFolderWindow.cs
│ │ │ ├── EveFolderWindow.resx
│ │ │ ├── EveImage.Designer.cs
│ │ │ ├── EveImage.cs
│ │ │ ├── EveImage.resx
│ │ │ ├── EveImagePopUp.Designer.cs
│ │ │ ├── EveImagePopUp.cs
│ │ │ ├── EveImagePopUp.resx
│ │ │ ├── ExpandablePanelControl.cs
│ │ │ ├── InfiniteDisplayToolTip.cs
│ │ │ ├── IntuitiveDataGridView.cs
│ │ │ ├── ListViewDragEventArgs.cs
│ │ │ ├── ListViewHelper.cs
│ │ │ ├── ListViewItemComparerByTag.cs
│ │ │ ├── MessageBoxCustom.Designer.cs
│ │ │ ├── MessageBoxCustom.cs
│ │ │ ├── MessageBoxCustom.resx
│ │ │ ├── MultiPanel/
│ │ │ │ ├── Design/
│ │ │ │ │ ├── MultiPanelDesigner.cs
│ │ │ │ │ ├── MultiPanelDesignerHelper.cs
│ │ │ │ │ ├── MultiPanelPageDesigner.cs
│ │ │ │ │ └── MultiPanelSelectionEditor.cs
│ │ │ │ ├── MultiPanel.cs
│ │ │ │ ├── MultiPanelPage.cs
│ │ │ │ └── MultiPanelSelectionChangeEventArgs.cs
│ │ │ ├── NativeMethods.cs
│ │ │ ├── NoFlickerListBox.cs
│ │ │ ├── NoFlickerPanel.cs
│ │ │ ├── PersistentSplitContainer.cs
│ │ │ ├── PrintOptionsDialog.Designer.cs
│ │ │ ├── PrintOptionsDialog.cs
│ │ │ ├── PrintOptionsDialog.resx
│ │ │ ├── ResolutionAction.cs
│ │ │ ├── SkillQueueControl.cs
│ │ │ ├── SplitButton.cs
│ │ │ ├── Throbber.cs
│ │ │ ├── TipWindow.Designer.cs
│ │ │ ├── TipWindow.cs
│ │ │ ├── TipWindow.resx
│ │ │ ├── TrayIcon.Designer.cs
│ │ │ ├── TrayIcon.cs
│ │ │ ├── TrayIcon.resx
│ │ │ ├── TreeView.cs
│ │ │ └── TreeViewExtensions.cs
│ │ ├── CustomEventArgs/
│ │ │ ├── ApiErrorTroubleshooterEventArgs.cs
│ │ │ ├── AttributeChangedEventArgs.cs
│ │ │ ├── AttributeHighlightingEventArgs.cs
│ │ │ ├── AttributeValueChangedEventArgs.cs
│ │ │ ├── AttributeValueChangingEventArgs.cs
│ │ │ ├── CharacterChangedEventArgs.cs
│ │ │ ├── CharacterIdentityChangedEventArgs.cs
│ │ │ ├── CloudStorageServiceProviderEventArgs.cs
│ │ │ ├── ContractsEventArgs.cs
│ │ │ ├── DataUpdateAvailableEventArgs.cs
│ │ │ ├── DaySelectedEventArgs.cs
│ │ │ ├── DropDownMouseMoveEventArgs.cs
│ │ │ ├── ESIKeyCreationEventArgs.cs
│ │ │ ├── ESIKeyInfoChangedEventArgs.cs
│ │ │ ├── EveServerEventArgs.cs
│ │ │ ├── IndustryJobsEventArgs.cs
│ │ │ ├── LabelChangedEventArgs.cs
│ │ │ ├── LoadoutEventArgs.cs
│ │ │ ├── LoadoutFeedEventArgs.cs
│ │ │ ├── MarketOrdersEventArgs.cs
│ │ │ ├── PlanChangedEventArgs.cs
│ │ │ ├── PlanetaryPinsEventArgs.cs
│ │ │ ├── QueuedSkillsEventArgs.cs
│ │ │ ├── SkillClickedEventArgs.cs
│ │ │ ├── TimeCheckSyncEventArgs.cs
│ │ │ ├── UpdateAvailableEventArgs.cs
│ │ │ └── UriCharacterEventArgs.cs
│ │ ├── Data/
│ │ │ ├── Agent.cs
│ │ │ ├── Blueprint.cs
│ │ │ ├── BlueprintCollection.cs
│ │ │ ├── BlueprintMarketGroup.cs
│ │ │ ├── BlueprintMarketGroupCollection.cs
│ │ │ ├── Certificate.cs
│ │ │ ├── CertificateCategoryCollection.cs
│ │ │ ├── CertificateClass.cs
│ │ │ ├── CertificateClassCollection.cs
│ │ │ ├── CertificateCollection.cs
│ │ │ ├── CertificateGroup.cs
│ │ │ ├── CertificateLevel.cs
│ │ │ ├── Constellation.cs
│ │ │ ├── ControlTowerFuel.cs
│ │ │ ├── ControlTowerFuelCollection.cs
│ │ │ ├── Datafile.cs
│ │ │ ├── EveProperty.cs
│ │ │ ├── EvePropertyCategory.cs
│ │ │ ├── EvePropertyCollection.cs
│ │ │ ├── EvePropertyValue.cs
│ │ │ ├── Faction.cs
│ │ │ ├── Implant.cs
│ │ │ ├── ImplantCollection.cs
│ │ │ ├── Item.cs
│ │ │ ├── ItemCollection.cs
│ │ │ ├── MarketGroup.cs
│ │ │ ├── MarketGroupCollection.cs
│ │ │ ├── MarketGroupExtensions.cs
│ │ │ ├── Mastery.cs
│ │ │ ├── MasteryCertificate.cs
│ │ │ ├── MasteryShip.cs
│ │ │ ├── MasteryShipCollection.cs
│ │ │ ├── Material.cs
│ │ │ ├── MaterialCollection.cs
│ │ │ ├── NPCCorporation.cs
│ │ │ ├── Planet.cs
│ │ │ ├── ReactionMaterial.cs
│ │ │ ├── ReactionMaterialCollection.cs
│ │ │ ├── Region.cs
│ │ │ ├── Ship.cs
│ │ │ ├── SolarSystem.cs
│ │ │ ├── SolarSystemRange.cs
│ │ │ ├── StaticBlueprints.cs
│ │ │ ├── StaticCertificate.cs
│ │ │ ├── StaticCertificateClass.cs
│ │ │ ├── StaticCertificateGroup.cs
│ │ │ ├── StaticCertificates.cs
│ │ │ ├── StaticGeography.cs
│ │ │ ├── StaticItems.cs
│ │ │ ├── StaticMasteries.cs
│ │ │ ├── StaticProperties.cs
│ │ │ ├── StaticRecommendations.cs
│ │ │ ├── StaticReprocessing.cs
│ │ │ ├── StaticRequiredMaterial.cs
│ │ │ ├── StaticSkill.cs
│ │ │ ├── StaticSkillGroup.cs
│ │ │ ├── StaticSkillLevel.cs
│ │ │ ├── StaticSkills.cs
│ │ │ ├── Station.cs
│ │ │ └── StationServices.cs
│ │ ├── EVEMon.Common.csproj
│ │ ├── EmailProvider/
│ │ │ ├── DefaultProvider.cs
│ │ │ ├── EmailProviders.cs
│ │ │ ├── GmxProvider.cs
│ │ │ ├── GoogleProvider.cs
│ │ │ ├── HotmailProvider.cs
│ │ │ ├── IEmailProvider.cs
│ │ │ ├── YahooPlusProvider.cs
│ │ │ └── YahooProvider.cs
│ │ ├── Enumerations/
│ │ │ ├── AbbreviationFormat.cs
│ │ │ ├── ActiveJobState.cs
│ │ │ ├── AgentType.cs
│ │ │ ├── AmarrMilitiaRank.cs
│ │ │ ├── Ancestry.cs
│ │ │ ├── AttributeOptimizationStrategy.cs
│ │ │ ├── BlinkAction.cs
│ │ │ ├── Bloodline.cs
│ │ │ ├── BlueprintActivity.cs
│ │ │ ├── BlueprintType.cs
│ │ │ ├── CCPAPI/
│ │ │ │ ├── APIErrorType.cs
│ │ │ │ ├── CCPAPIContactType.cs
│ │ │ │ ├── CCPAPIKeyType.cs
│ │ │ │ ├── CCPAPILocationType.cs
│ │ │ │ ├── CCPAPIMethodsEnum.cs
│ │ │ │ ├── CCPAPIPlanetTypes.cs
│ │ │ │ ├── CCPContractStatus.cs
│ │ │ │ ├── CCPJobCompletedStatus.cs
│ │ │ │ ├── CCPOrderState.cs
│ │ │ │ ├── ESIAPICharacterMethods.cs
│ │ │ │ ├── ESIAPICorporationMethods.cs
│ │ │ │ └── ESIAPIGenericMethods.cs
│ │ │ ├── CaldariMilitiaRank.cs
│ │ │ ├── CertificateFilter.cs
│ │ │ ├── CertificateGrade.cs
│ │ │ ├── CertificateSort.cs
│ │ │ ├── CertificateStatus.cs
│ │ │ ├── CharacterSaveFormat.cs
│ │ │ ├── CharacterSortCriteria.cs
│ │ │ ├── ConnectionStatus.cs
│ │ │ ├── ContactGroup.cs
│ │ │ ├── ContactType.cs
│ │ │ ├── ContractAvailability.cs
│ │ │ ├── ContractState.cs
│ │ │ ├── ContractType.cs
│ │ │ ├── DataCompression.cs
│ │ │ ├── DescriptiveTextOptions.cs
│ │ │ ├── EveAttribute.cs
│ │ │ ├── EveImageSize.cs
│ │ │ ├── EveImageSizeMode.cs
│ │ │ ├── EveMailState.cs
│ │ │ ├── GallenteMilitiaRank.cs
│ │ │ ├── Gender.cs
│ │ │ ├── ImplantSlots.cs
│ │ │ ├── IssuedFor.cs
│ │ │ ├── ItemFamily.cs
│ │ │ ├── ItemMetaGroup.cs
│ │ │ ├── ItemSlot.cs
│ │ │ ├── JobState.cs
│ │ │ ├── KillGroup.cs
│ │ │ ├── KillLogFittingContentGroup.cs
│ │ │ ├── LearningOptions.cs
│ │ │ ├── LoadoutFormat.cs
│ │ │ ├── MasteryStatus.cs
│ │ │ ├── MedalGroup.cs
│ │ │ ├── MinmatarMilitiaRank.cs
│ │ │ ├── ObjectActivityFilter.cs
│ │ │ ├── ObjectUsabilityFilter.cs
│ │ │ ├── ObsoleteRemovalPolicy.cs
│ │ │ ├── OrderState.cs
│ │ │ ├── PathSearchCriteria.cs
│ │ │ ├── PlanChange.cs
│ │ │ ├── PlanEntrySort.cs
│ │ │ ├── PlanEntryType.cs
│ │ │ ├── PlanFormat.cs
│ │ │ ├── PlanOperations.cs
│ │ │ ├── PlanSort.cs
│ │ │ ├── PlanetaryPinState.cs
│ │ │ ├── QueryStatus.cs
│ │ │ ├── Race.cs
│ │ │ ├── RemappingPointStatus.cs
│ │ │ ├── ServerStatus.cs
│ │ │ ├── SkillFilter.cs
│ │ │ ├── SkillSort.cs
│ │ │ ├── SortOrder.cs
│ │ │ ├── StandingGroup.cs
│ │ │ ├── StandingStatus.cs
│ │ │ ├── ThrobberState.cs
│ │ │ ├── TrainingOrigin.cs
│ │ │ ├── TransactionType.cs
│ │ │ └── UISettings/
│ │ │ ├── AssetGrouping.cs
│ │ │ ├── CalendarProvider.cs
│ │ │ ├── CloseBehaviour.cs
│ │ │ ├── CompatibilityMode.cs
│ │ │ ├── ContractGrouping.cs
│ │ │ ├── EVEMailMessagesGrouping.cs
│ │ │ ├── EVENotificationsGrouping.cs
│ │ │ ├── GoogleCalendarReminder.cs
│ │ │ ├── IndustryJobGrouping.cs
│ │ │ ├── MainWindowTitleFormat.cs
│ │ │ ├── MarketOrderGrouping.cs
│ │ │ ├── MarkupType.cs
│ │ │ ├── ObsoleteEntryRemovalBehaviour.cs
│ │ │ ├── PlanetaryGrouping.cs
│ │ │ ├── PortraitSizes.cs
│ │ │ ├── ReadingPanePositioning.cs
│ │ │ ├── SystemTrayBehaviour.cs
│ │ │ ├── ThreeStateSortOrder.cs
│ │ │ ├── TrayPopupGrouping.cs
│ │ │ ├── TrayPopupSort.cs
│ │ │ ├── TrayPopupStyles.cs
│ │ │ ├── UpdatePeriod.cs
│ │ │ ├── WalletJournalGrouping.cs
│ │ │ └── WalletTransactionGrouping.cs
│ │ ├── EveMonClient.Events.cs
│ │ ├── EveMonClient.cs
│ │ ├── Exceptions/
│ │ │ └── APIException.cs
│ │ ├── Extensions/
│ │ │ ├── EnumExtensions.cs
│ │ │ ├── EventHandlerExtensions.cs
│ │ │ ├── HttpExtensions.cs
│ │ │ ├── ObjectExtensions.cs
│ │ │ ├── PlanEntryExtensions.cs
│ │ │ ├── SkillEnumerableExtensions.cs
│ │ │ ├── SkillLevelEnumerableExtensions.cs
│ │ │ ├── StaticSkillEnumerableExtensions.cs
│ │ │ ├── StaticSkillExtensions.cs
│ │ │ ├── StaticSkillLevelEnumerableExtensions.cs
│ │ │ ├── StringExtensions.cs
│ │ │ ├── TimeExtensions.cs
│ │ │ └── WinFormsExtensions.cs
│ │ ├── ExternalCalendar/
│ │ │ ├── CalendarEvent.cs
│ │ │ ├── ExternalCalendar.cs
│ │ │ ├── GoogleCalendarEvent.cs
│ │ │ └── OutlookCalendarEvent.cs
│ │ ├── Factories/
│ │ │ ├── DisposableWithCallback.cs
│ │ │ ├── FontFactory.cs
│ │ │ └── WindowsFactory.cs
│ │ ├── GlobalSuppressions.cs
│ │ ├── Helpers/
│ │ │ ├── AttributesOptimizer.cs
│ │ │ ├── BlankCharacterUIHelper.cs
│ │ │ ├── CharacterAttributeScratchpad.cs
│ │ │ ├── CharacterExporter.cs
│ │ │ ├── CharacterScratchpad.cs
│ │ │ ├── ExceptionHandler.cs
│ │ │ ├── FileHelper.cs
│ │ │ ├── FormatHelper.cs
│ │ │ ├── GAnalyticsTracker.cs
│ │ │ ├── ImageHelper.cs
│ │ │ ├── KillLogExporter.cs
│ │ │ ├── ListViewExporter.cs
│ │ │ ├── Loadout.cs
│ │ │ ├── LoadoutBase.cs
│ │ │ ├── LoadoutExporter.cs
│ │ │ ├── LoadoutHelper.cs
│ │ │ ├── LoadoutInfo.cs
│ │ │ ├── PathFinder.cs
│ │ │ ├── PlanEntrySorter.cs
│ │ │ ├── PlanHelper.cs
│ │ │ ├── PlanIOHelper.cs
│ │ │ ├── PlanPrinter.cs
│ │ │ ├── PlanScratchpad.cs
│ │ │ ├── TaskHelper.cs
│ │ │ ├── TimeCheck.cs
│ │ │ └── UIHelper.cs
│ │ ├── IgbService/
│ │ │ ├── ClientConnectedEventArgs.cs
│ │ │ ├── IgbClientDataReadEventArgs.cs
│ │ │ ├── IgbServer.cs
│ │ │ ├── IgbTcpClient.cs
│ │ │ └── IgbTcpListener.cs
│ │ ├── InstanceManager.cs
│ │ ├── Interfaces/
│ │ │ ├── ICharacterAttribute.cs
│ │ │ ├── IEveMessage.cs
│ │ │ ├── IListView.cs
│ │ │ ├── ILoadoutInfo.cs
│ │ │ ├── IPlanOperation.cs
│ │ │ ├── IPlanOrderPluggable.cs
│ │ │ ├── IQueryMonitor.cs
│ │ │ ├── IQueryMonitorEx.cs
│ │ │ ├── ISkillLevel.cs
│ │ │ └── IStaticSkill.cs
│ │ ├── Loadouts/
│ │ │ ├── LoadoutsProvider.cs
│ │ │ └── Osmium/
│ │ │ └── OsmiumLoadoutsProvider.cs
│ │ ├── MarketPricer/
│ │ │ ├── EveMarketer/
│ │ │ │ └── EMItemPricer.cs
│ │ │ ├── Fuzzworks/
│ │ │ │ └── FuzzworksItemPricer.cs
│ │ │ └── ItemPricer.cs
│ │ ├── Models/
│ │ │ ├── APIMethod.cs
│ │ │ ├── APIProvider.cs
│ │ │ ├── AccountStatus.cs
│ │ │ ├── Asset.cs
│ │ │ ├── BaseCharacter.cs
│ │ │ ├── BasePlan.cs
│ │ │ ├── BuyOrder.cs
│ │ │ ├── CCPCharacter.cs
│ │ │ ├── CalendarEventAttendee.cs
│ │ │ ├── Character.cs
│ │ │ ├── CharacterAttribute.cs
│ │ │ ├── CharacterIdentity.cs
│ │ │ ├── Collections/
│ │ │ │ ├── AssetCollection.cs
│ │ │ │ ├── CharacterIdentityIgnoreList.cs
│ │ │ │ ├── ContactCollection.cs
│ │ │ │ ├── ContractCollection.cs
│ │ │ │ ├── EmploymentRecordCollection.cs
│ │ │ │ ├── EveFactionWarfareStatsCollection.cs
│ │ │ │ ├── EveFactionWarsCollection.cs
│ │ │ │ ├── EveMailMessageCollection.cs
│ │ │ │ ├── EveMailingListCollection.cs
│ │ │ │ ├── EveNotificationCollection.cs
│ │ │ │ ├── ImplantSetCollection.cs
│ │ │ │ ├── IndustryJobCollection.cs
│ │ │ │ ├── KillLogCollection.cs
│ │ │ │ ├── LoyaltyCollection.cs
│ │ │ │ ├── MarketOrderCollection.cs
│ │ │ │ ├── MedalCollection.cs
│ │ │ │ ├── PlanCollection.cs
│ │ │ │ ├── PlanetaryColonyCollection.cs
│ │ │ │ ├── ResearchPointCollection.cs
│ │ │ │ ├── SkillCollection.cs
│ │ │ │ ├── SkillGroupCollection.cs
│ │ │ │ ├── StandingCollection.cs
│ │ │ │ ├── UpcomingCalendarEventCollection.cs
│ │ │ │ ├── WalletJournalCollection.cs
│ │ │ │ └── WalletTransactionsCollection.cs
│ │ │ ├── Comparers/
│ │ │ │ ├── AssetComparer.cs
│ │ │ │ ├── CharacterComparer.cs
│ │ │ │ ├── ContractComparer.cs
│ │ │ │ ├── ContractItemComparer.cs
│ │ │ │ ├── EveMailMessageComparer.cs
│ │ │ │ ├── EveNotificationComparer.cs
│ │ │ │ ├── IndustryJobComparer.cs
│ │ │ │ ├── KillLogComparer.cs
│ │ │ │ ├── MarketOrderComparer.cs
│ │ │ │ ├── MedalComparer.cs
│ │ │ │ ├── PlanComparer.cs
│ │ │ │ ├── PlanEntryComparer.cs
│ │ │ │ ├── PlanetaryPinComparer.cs
│ │ │ │ ├── ResearchPointComparer.cs
│ │ │ │ ├── SerializableSettingsComparer.cs
│ │ │ │ ├── WalletJournalComparer.cs
│ │ │ │ └── WalletTransactionComparer.cs
│ │ │ ├── Contact.cs
│ │ │ ├── Contract.cs
│ │ │ ├── ContractBid.cs
│ │ │ ├── ContractItem.cs
│ │ │ ├── Corporation.cs
│ │ │ ├── ESIKey.cs
│ │ │ ├── ESIMethod.cs
│ │ │ ├── EmploymentRecord.cs
│ │ │ ├── EveFactionWar.cs
│ │ │ ├── EveFactionWarfareStats.cs
│ │ │ ├── EveFactionalWarfareStats.cs
│ │ │ ├── EveMailBody.cs
│ │ │ ├── EveMailMessage.cs
│ │ │ ├── EveMailingList.cs
│ │ │ ├── EveNotification.cs
│ │ │ ├── EveNotificationText.cs
│ │ │ ├── EveServer.cs
│ │ │ ├── Extended/
│ │ │ │ ├── ESIMethods.cs
│ │ │ │ ├── EveNotificationTextParser.cs
│ │ │ │ └── InternalEveNotificationTextParser.cs
│ │ │ ├── FactionalWarfareStats.cs
│ │ │ ├── ImplantSet.cs
│ │ │ ├── IndustryJob.cs
│ │ │ ├── InvalidPlanEntry.cs
│ │ │ ├── KillLog.cs
│ │ │ ├── KillLogItem.cs
│ │ │ ├── Loyalty.cs
│ │ │ ├── MarketOrder.cs
│ │ │ ├── Medal.cs
│ │ │ ├── Plan.cs
│ │ │ ├── PlanEntry.cs
│ │ │ ├── PlanetaryColony.cs
│ │ │ ├── PlanetaryLink.cs
│ │ │ ├── PlanetaryPin.cs
│ │ │ ├── PlanetaryRoute.cs
│ │ │ ├── QueuedSkill.cs
│ │ │ ├── RemappingPoint.cs
│ │ │ ├── RemappingResult.cs
│ │ │ ├── ResearchPoint.cs
│ │ │ ├── SellOrder.cs
│ │ │ ├── Skill.cs
│ │ │ ├── SkillGroup.cs
│ │ │ ├── SkillLevel.cs
│ │ │ ├── SkillLevelSet.cs
│ │ │ ├── SkillQueue.cs
│ │ │ ├── Standing.cs
│ │ │ ├── UpcomingCalendarEvent.cs
│ │ │ ├── UriCharacter.cs
│ │ │ ├── WalletJournal.cs
│ │ │ └── WalletTransaction.cs
│ │ ├── Net/
│ │ │ ├── DownloadResult.cs
│ │ │ ├── ExceptionMessages.Designer.cs
│ │ │ ├── ExceptionMessages.resx
│ │ │ ├── HttpClientServiceRequest.cs
│ │ │ ├── HttpWebClientService.ImageDownload.cs
│ │ │ ├── HttpWebClientService.StreamDownload.cs
│ │ │ ├── HttpWebClientService.StringDownload.cs
│ │ │ ├── HttpWebClientService.XmlDownload.cs
│ │ │ ├── HttpWebClientService.cs
│ │ │ ├── HttpWebClientServiceException.cs
│ │ │ ├── HttpWebClientServiceExceptionStatus.cs
│ │ │ ├── HttpWebClientServiceState.cs
│ │ │ ├── INetworkChangeSubscriber.cs
│ │ │ ├── NetworkMonitor.cs
│ │ │ ├── RequestParams.cs
│ │ │ └── ResponseParams.cs
│ │ ├── Notifications/
│ │ │ ├── APIErrorNotificationEventArgs.cs
│ │ │ ├── ContractsNotificationEventArgs.cs
│ │ │ ├── EveMailMessageNotificationEventArgs.cs
│ │ │ ├── EveNotificationNotificationEventArgs.cs
│ │ │ ├── IndustryJobsNotificationEventArgs.cs
│ │ │ ├── MarketOrdersNotificationEventArgs.cs
│ │ │ ├── NotificationBehaviour.cs
│ │ │ ├── NotificationCategory.cs
│ │ │ ├── NotificationEventArgs.cs
│ │ │ ├── NotificationInvalidationEventArgs.cs
│ │ │ ├── NotificationPriority.cs
│ │ │ ├── PlanetaryPinsNotificationEventArgs.cs
│ │ │ └── SkillCompletionNotificationEventArgs.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ └── Resources.resx
│ │ ├── QueryMonitor/
│ │ │ ├── CCPQueryMonitorBase.cs
│ │ │ ├── CharacterDataQuerying.cs
│ │ │ ├── CharacterQueryMonitor.cs
│ │ │ ├── CorporationDataQuerying.cs
│ │ │ ├── CorporationQueryMonitor.cs
│ │ │ ├── ESIKeyQueryMonitor.cs
│ │ │ ├── PagedQueryMonitor.cs
│ │ │ ├── QueryMonitor.cs
│ │ │ └── QueryMonitorCollection.cs
│ │ ├── Resources/
│ │ │ ├── Cursors/
│ │ │ │ └── ContextMenuPointer.cur
│ │ │ ├── License/
│ │ │ │ └── gpl.txt
│ │ │ ├── MD5Sums.txt
│ │ │ ├── Skill_Select/
│ │ │ │ ├── Group0/
│ │ │ │ │ ├── Default.Designer.cs
│ │ │ │ │ ├── Default.resources
│ │ │ │ │ └── Default.resx
│ │ │ │ ├── Group1/
│ │ │ │ │ ├── Dice_Spots.Designer.cs
│ │ │ │ │ ├── Dice_Spots.resources
│ │ │ │ │ └── Dice_Spots.resx
│ │ │ │ ├── Group2/
│ │ │ │ │ ├── Slashes.Designer.cs
│ │ │ │ │ ├── Slashes.resources
│ │ │ │ │ └── Slashes.resx
│ │ │ │ ├── Group3/
│ │ │ │ │ ├── Pie_Slices.Designer.cs
│ │ │ │ │ ├── Pie_Slices.resources
│ │ │ │ │ └── Pie_Slices.resx
│ │ │ │ ├── Group4/
│ │ │ │ │ ├── Pentagons.Designer.cs
│ │ │ │ │ ├── Pentagons.resources
│ │ │ │ │ └── Pentagons.resx
│ │ │ │ ├── Group5/
│ │ │ │ │ ├── Pentagrams.Designer.cs
│ │ │ │ │ ├── Pentagrams.resources
│ │ │ │ │ └── Pentagrams.resx
│ │ │ │ ├── Group6/
│ │ │ │ │ ├── Black_Dice.resources
│ │ │ │ │ └── Black_Dice.resx
│ │ │ │ ├── Group7/
│ │ │ │ │ ├── Red_Dice.resources
│ │ │ │ │ └── Red_Dice.resx
│ │ │ │ ├── Group8/
│ │ │ │ │ ├── Bars.Designer.cs
│ │ │ │ │ ├── Bars.resources
│ │ │ │ │ └── Bars.resx
│ │ │ │ ├── IconSettings.Designer.cs
│ │ │ │ └── IconSettings.settings
│ │ │ ├── callback_fail.htm
│ │ │ ├── callback_ok.htm
│ │ │ ├── chrFactions.txt
│ │ │ ├── eve-blueprints-en-US.xml.gzip
│ │ │ ├── eve-certificates-en-US.xml.gzip
│ │ │ ├── eve-geography-en-US.xml.gzip
│ │ │ ├── eve-items-en-US.xml.gzip
│ │ │ ├── eve-masteries-en-US.xml.gzip
│ │ │ ├── eve-properties-en-US.xml.gzip
│ │ │ ├── eve-reprocessing-en-US.xml.gzip
│ │ │ └── eve-skills-en-US.xml.gzip
│ │ ├── Scheduling/
│ │ │ ├── Enumerations.cs
│ │ │ ├── RecurringScheduleEntry.cs
│ │ │ ├── ScheduleDateTimeRange.cs
│ │ │ ├── ScheduleEntry.cs
│ │ │ ├── ScheduleEntryTitleComparer.cs
│ │ │ ├── Scheduler.cs
│ │ │ └── SimpleScheduleEntry.cs
│ │ ├── Serialization/
│ │ │ ├── Datafiles/
│ │ │ │ ├── BlueprintsDatafile.cs
│ │ │ │ ├── CertificatesDatafile.cs
│ │ │ │ ├── DatafileConstants.Designer.cs
│ │ │ │ ├── DatafileConstants.resx
│ │ │ │ ├── GeoDatafile.cs
│ │ │ │ ├── ItemsDatafile.cs
│ │ │ │ ├── MasteriesDatafile.cs
│ │ │ │ ├── PropertiesDatafile.cs
│ │ │ │ ├── ReprocessingDatafile.cs
│ │ │ │ ├── SerializableAgent.cs
│ │ │ │ ├── SerializableBlueprint.cs
│ │ │ │ ├── SerializableBlueprintMarketGroup.cs
│ │ │ │ ├── SerializableCertificate.cs
│ │ │ │ ├── SerializableCertificateClass.cs
│ │ │ │ ├── SerializableCertificateGroup.cs
│ │ │ │ ├── SerializableCertificatePrerequisite.cs
│ │ │ │ ├── SerializableCertificateRecommendation.cs
│ │ │ │ ├── SerializableConstellation.cs
│ │ │ │ ├── SerializableControlTowerFuel.cs
│ │ │ │ ├── SerializableItem.cs
│ │ │ │ ├── SerializableItemMaterials.cs
│ │ │ │ ├── SerializableJump.cs
│ │ │ │ ├── SerializableMarketGroup.cs
│ │ │ │ ├── SerializableMastery.cs
│ │ │ │ ├── SerializableMasteryCertificate.cs
│ │ │ │ ├── SerializableMasteryShip.cs
│ │ │ │ ├── SerializableMaterialQuantity.cs
│ │ │ │ ├── SerializablePlanet.cs
│ │ │ │ ├── SerializablePrereqSkill.cs
│ │ │ │ ├── SerializablePrerequisiteSkill.cs
│ │ │ │ ├── SerializableProperty.cs
│ │ │ │ ├── SerializablePropertyCategory.cs
│ │ │ │ ├── SerializablePropertyValue.cs
│ │ │ │ ├── SerializableReactionInfo.cs
│ │ │ │ ├── SerializableRegion.cs
│ │ │ │ ├── SerializableRequiredMaterial.cs
│ │ │ │ ├── SerializableSkill.cs
│ │ │ │ ├── SerializableSkillGroup.cs
│ │ │ │ ├── SerializableSkillPrerequisite.cs
│ │ │ │ ├── SerializableSolarSystem.cs
│ │ │ │ ├── SerializableStation.cs
│ │ │ │ ├── SerializableStationList.cs
│ │ │ │ ├── SkillsDatafile.cs
│ │ │ │ └── datafile-transform.xslt
│ │ │ ├── Esi/
│ │ │ │ ├── EsiAPIAssetList.cs
│ │ │ │ ├── EsiAPIAttributes.cs
│ │ │ │ ├── EsiAPICalendarEvent.cs
│ │ │ │ ├── EsiAPICalendarEventAttendees.cs
│ │ │ │ ├── EsiAPICalendarEvents.cs
│ │ │ │ ├── EsiAPICharacterNames.cs
│ │ │ │ ├── EsiAPICharacterSheet.cs
│ │ │ │ ├── EsiAPIClones.cs
│ │ │ │ ├── EsiAPIContactNotifications.cs
│ │ │ │ ├── EsiAPIContactsList.cs
│ │ │ │ ├── EsiAPIContractBids.cs
│ │ │ │ ├── EsiAPIContractItems.cs
│ │ │ │ ├── EsiAPIContracts.cs
│ │ │ │ ├── EsiAPICorpAccountBalance.cs
│ │ │ │ ├── EsiAPICorporationSheet.cs
│ │ │ │ ├── EsiAPIDivisions.cs
│ │ │ │ ├── EsiAPIEmploymentHistory.cs
│ │ │ │ ├── EsiAPIError.cs
│ │ │ │ ├── EsiAPIEveFactionWars.cs
│ │ │ │ ├── EsiAPIEveFactionalWarfareStats.cs
│ │ │ │ ├── EsiAPIFactionalWarfareStats.cs
│ │ │ │ ├── EsiAPIIndustryJobs.cs
│ │ │ │ ├── EsiAPIJumpFatigue.cs
│ │ │ │ ├── EsiAPIKillLog.cs
│ │ │ │ ├── EsiAPIKillMail.cs
│ │ │ │ ├── EsiAPILocation.cs
│ │ │ │ ├── EsiAPILoyalty.cs
│ │ │ │ ├── EsiAPIMailBody.cs
│ │ │ │ ├── EsiAPIMailMessages.cs
│ │ │ │ ├── EsiAPIMailingLists.cs
│ │ │ │ ├── EsiAPIMarketOrders.cs
│ │ │ │ ├── EsiAPIMedals.cs
│ │ │ │ ├── EsiAPINotifications.cs
│ │ │ │ ├── EsiAPIPlanet.cs
│ │ │ │ ├── EsiAPIPlanetaryColoniesList.cs
│ │ │ │ ├── EsiAPIPlanetaryColony.cs
│ │ │ │ ├── EsiAPIResearchPoints.cs
│ │ │ │ ├── EsiAPIServerStatus.cs
│ │ │ │ ├── EsiAPIShip.cs
│ │ │ │ ├── EsiAPISkillQueue.cs
│ │ │ │ ├── EsiAPISkills.cs
│ │ │ │ ├── EsiAPISovStructures.cs
│ │ │ │ ├── EsiAPIStandings.cs
│ │ │ │ ├── EsiAPIStation.cs
│ │ │ │ ├── EsiAPIStructure.cs
│ │ │ │ ├── EsiAPITokenInfo.cs
│ │ │ │ ├── EsiAPIType.cs
│ │ │ │ ├── EsiAPIWalletJournal.cs
│ │ │ │ ├── EsiAPIWalletTransactions.cs
│ │ │ │ ├── EsiAccountBalanceListItem.cs
│ │ │ │ ├── EsiAssetListItem.cs
│ │ │ │ ├── EsiCalendarEventAttendeeListItem.cs
│ │ │ │ ├── EsiCalendarEventListItem.cs
│ │ │ │ ├── EsiCharacterBase.cs
│ │ │ │ ├── EsiCharacterNameListItem.cs
│ │ │ │ ├── EsiContactListItem.cs
│ │ │ │ ├── EsiContactNotifyListItem.cs
│ │ │ │ ├── EsiContractBidsListItem.cs
│ │ │ │ ├── EsiContractItemsListItem.cs
│ │ │ │ ├── EsiContractListItem.cs
│ │ │ │ ├── EsiDivisionListItem.cs
│ │ │ │ ├── EsiEmploymentHistoryListItem.cs
│ │ │ │ ├── EsiErrors.cs
│ │ │ │ ├── EsiEveFactionWarfareTotals.cs
│ │ │ │ ├── EsiEveFactionWarsListItem.cs
│ │ │ │ ├── EsiEveFactionalWarfareStatsListItem.cs
│ │ │ │ ├── EsiJobListItem.cs
│ │ │ │ ├── EsiJumpCloneListItem.cs
│ │ │ │ ├── EsiKillLogAttackersListItem.cs
│ │ │ │ ├── EsiKillLogItemListItem.cs
│ │ │ │ ├── EsiKillLogListItem.cs
│ │ │ │ ├── EsiKillLogVictim.cs
│ │ │ │ ├── EsiLocationBase.cs
│ │ │ │ ├── EsiLoyaltyListItem.cs
│ │ │ │ ├── EsiMailBase.cs
│ │ │ │ ├── EsiMailMessagesListItem.cs
│ │ │ │ ├── EsiMailRecipientListItem.cs
│ │ │ │ ├── EsiMailingListsListItem.cs
│ │ │ │ ├── EsiMedalsListItem.cs
│ │ │ │ ├── EsiNotificationsListItem.cs
│ │ │ │ ├── EsiOrderListItem.cs
│ │ │ │ ├── EsiPlanetaryColonyListItem.cs
│ │ │ │ ├── EsiPlanetaryContentsListItem.cs
│ │ │ │ ├── EsiPlanetaryExtractorDetails.cs
│ │ │ │ ├── EsiPlanetaryExtractorHead.cs
│ │ │ │ ├── EsiPlanetaryFactoryDetails.cs
│ │ │ │ ├── EsiPlanetaryLink.cs
│ │ │ │ ├── EsiPlanetaryPin.cs
│ │ │ │ ├── EsiPlanetaryRoute.cs
│ │ │ │ ├── EsiPosition.cs
│ │ │ │ ├── EsiRefTypeString.cs
│ │ │ │ ├── EsiResearchListItem.cs
│ │ │ │ ├── EsiResult.cs
│ │ │ │ ├── EsiSkillListItem.cs
│ │ │ │ ├── EsiSkillQueueListItem.cs
│ │ │ │ ├── EsiSovStructureListItem.cs
│ │ │ │ ├── EsiStandingsListItem.cs
│ │ │ │ ├── EsiWalletJournalListItem.cs
│ │ │ │ └── EsiWalletTransactionsListItem.cs
│ │ │ ├── Eve/
│ │ │ │ ├── CCPAPIError.cs
│ │ │ │ ├── CCPAPIResult.cs
│ │ │ │ ├── IAPIResult.cs
│ │ │ │ ├── ISerializableCharacterIdentity.cs
│ │ │ │ ├── ISerializableWithLocalClock.cs
│ │ │ │ ├── SerializableAPICharacterSheet.cs
│ │ │ │ ├── SerializableAPIContracts.cs
│ │ │ │ ├── SerializableAPIEveFactionalWarfareStats.cs
│ │ │ │ ├── SerializableAPIKillLog.cs
│ │ │ │ ├── SerializableAPIMailBodies.cs
│ │ │ │ ├── SerializableAPIMailMessages.cs
│ │ │ │ ├── SerializableAPIRefTypes.cs
│ │ │ │ ├── SerializableAPIUpcomingCalendarEvents.cs
│ │ │ │ ├── SerializableAPIWalletJournal.cs
│ │ │ │ ├── SerializableAPIWalletTransactions.cs
│ │ │ │ ├── SerializableCalendarEventAttendeeListItem.cs
│ │ │ │ ├── SerializableCharacterAttributes.cs
│ │ │ │ ├── SerializableCharacterCertificate.cs
│ │ │ │ ├── SerializableCharacterJumpClone.cs
│ │ │ │ ├── SerializableCharacterJumpCloneImplant.cs
│ │ │ │ ├── SerializableCharacterListItem.cs
│ │ │ │ ├── SerializableCharacterNameListItem.cs
│ │ │ │ ├── SerializableCharacterSheetBase.cs
│ │ │ │ ├── SerializableCharacterSkill.cs
│ │ │ │ ├── SerializableContractListItem.cs
│ │ │ │ ├── SerializableEmploymentHistory.cs
│ │ │ │ ├── SerializableEmploymentHistoryListItem.cs
│ │ │ │ ├── SerializableEveFacWarfareTotals.cs
│ │ │ │ ├── SerializableEveFactionWarsListItem.cs
│ │ │ │ ├── SerializableEveFactionalWarfareStatsListItem.cs
│ │ │ │ ├── SerializableKillLogAttackersListItem.cs
│ │ │ │ ├── SerializableKillLogItemListItem.cs
│ │ │ │ ├── SerializableKillLogListItem.cs
│ │ │ │ ├── SerializableKillLogVictim.cs
│ │ │ │ ├── SerializableLocation.cs
│ │ │ │ ├── SerializableMailBodiesListItem.cs
│ │ │ │ ├── SerializableMailMessagesListItem.cs
│ │ │ │ ├── SerializableNewImplant.cs
│ │ │ │ ├── SerializableOutpost.cs
│ │ │ │ ├── SerializableQueuedSkill.cs
│ │ │ │ ├── SerializableRefTypesListItem.cs
│ │ │ │ ├── SerializableUpcomingCalendarEventsListItem.cs
│ │ │ │ ├── SerializableWalletJournalListItem.cs
│ │ │ │ ├── SerializableWalletTransactionsListItem.cs
│ │ │ │ └── rowsets-transform.xslt
│ │ │ ├── EveMarketData/
│ │ │ │ └── MarketPricer/
│ │ │ │ ├── SerializableEMDItemPriceList.cs
│ │ │ │ ├── SerializableEMDItemPriceListItem.cs
│ │ │ │ └── SerializableEMDItemPrices.cs
│ │ │ ├── EveMarketer/
│ │ │ │ └── MarketPricer/
│ │ │ │ ├── SerializableECItemPriceItem.cs
│ │ │ │ ├── SerializableECItemPriceListItem.cs
│ │ │ │ └── SerializableECItemPrices.cs
│ │ │ ├── Exportation/
│ │ │ │ ├── OutputAttributeEnhancer.cs
│ │ │ │ ├── OutputCharacter.cs
│ │ │ │ ├── OutputPlan.cs
│ │ │ │ ├── OutputPlans.cs
│ │ │ │ ├── OutputSkill.cs
│ │ │ │ ├── OutputSkillGroup.cs
│ │ │ │ └── output-html.xslt
│ │ │ ├── FittingClf/
│ │ │ │ ├── SerializableClfFitting.cs
│ │ │ │ ├── SerializableClfFittingChargeType.cs
│ │ │ │ ├── SerializableClfFittingDroneSet.cs
│ │ │ │ ├── SerializableClfFittingDroneType.cs
│ │ │ │ ├── SerializableClfFittingMetaData.cs
│ │ │ │ ├── SerializableClfFittingModule.cs
│ │ │ │ ├── SerializableClfFittingPreset.cs
│ │ │ │ └── SerializableClfFittingShipType.cs
│ │ │ ├── FittingXml/
│ │ │ │ ├── SerializableXmlFitting.cs
│ │ │ │ ├── SerializableXmlFittingDescription.cs
│ │ │ │ ├── SerializableXmlFittingHardware.cs
│ │ │ │ ├── SerializableXmlFittingShipType.cs
│ │ │ │ └── SerializableXmlFittings.cs
│ │ │ ├── Flags.xml
│ │ │ ├── Fuzzworks/
│ │ │ │ ├── SerializableFuzzworksPriceItem.cs
│ │ │ │ └── SerializableFuzzworksPriceListItem.cs
│ │ │ ├── Hammertime/
│ │ │ │ └── HammertimeStructure.cs
│ │ │ ├── JsonResult.cs
│ │ │ ├── NotificationRefTypes.xml
│ │ │ ├── Osmium/
│ │ │ │ └── Loadout/
│ │ │ │ ├── SerializableOsmiumLoadoutAuthor.cs
│ │ │ │ └── SerializableOsmiumLoadoutFeed.cs
│ │ │ ├── PatchXml/
│ │ │ │ ├── SerializableDatafile.cs
│ │ │ │ ├── SerializablePatch.cs
│ │ │ │ └── SerializableRelease.cs
│ │ │ ├── RefTypes.xml
│ │ │ ├── Samples/
│ │ │ │ ├── Charactersheet.out.xml
│ │ │ │ ├── Charactersheet.xml
│ │ │ │ ├── HtmlExport.xml
│ │ │ │ ├── OldPlan.xml
│ │ │ │ └── OldSettings.xml
│ │ │ ├── SerializableAPICredentials.cs
│ │ │ ├── SerializableAPIError.cs
│ │ │ ├── SerializableAPIResult.cs
│ │ │ ├── SerializableEveFlags.cs
│ │ │ ├── SerializableEveFlagsListItem.cs
│ │ │ ├── SerializableEveIDToName.cs
│ │ │ ├── SerializableEveIDToNameListItem.cs
│ │ │ ├── SerializableNotificationRefTypes.cs
│ │ │ ├── SerializableNotificationRefTypesListItem.cs
│ │ │ └── Settings/
│ │ │ ├── SerializableAPIKey.cs
│ │ │ ├── SerializableAPIMethod.cs
│ │ │ ├── SerializableAPIProvider.cs
│ │ │ ├── SerializableAPIUpdate.cs
│ │ │ ├── SerializableAccount.cs
│ │ │ ├── SerializableBuyOrder.cs
│ │ │ ├── SerializableCCPCharacter.cs
│ │ │ ├── SerializableCharacterIdentity.cs
│ │ │ ├── SerializableContract.cs
│ │ │ ├── SerializableEndPoint.cs
│ │ │ ├── SerializableImplantSetCollection.cs
│ │ │ ├── SerializableInvalidPlanEntry.cs
│ │ │ ├── SerializableJob.cs
│ │ │ ├── SerializableOrderBase.cs
│ │ │ ├── SerializablePlan.cs
│ │ │ ├── SerializablePlanEntry.cs
│ │ │ ├── SerializablePortableEveInstallation.cs
│ │ │ ├── SerializableRecurringScheduleEntry.cs
│ │ │ ├── SerializableRemappingPoint.cs
│ │ │ ├── SerializableResearchPoint.cs
│ │ │ ├── SerializableScheduleEntry.cs
│ │ │ ├── SerializableSellOrder.cs
│ │ │ ├── SerializableSettings.cs
│ │ │ ├── SerializableSettingsCharacter.cs
│ │ │ ├── SerializableSettingsImplantSet.cs
│ │ │ ├── SerializableStanding.cs
│ │ │ ├── SerializableUriCharacter.cs
│ │ │ └── settings-transform.xslt
│ │ ├── Service/
│ │ │ ├── AutoShrink.cs
│ │ │ ├── CodeCompiler.cs
│ │ │ ├── Emailer.cs
│ │ │ ├── EveFlag.cs
│ │ │ ├── EveIDToName.cs
│ │ │ ├── EveIDToStation.cs
│ │ │ ├── EveNotificationType.cs
│ │ │ ├── EveRefType.cs
│ │ │ ├── IDToObjectProvider.cs
│ │ │ ├── ISSOWebServer.cs
│ │ │ ├── ImageService.cs
│ │ │ ├── LocalXmlCache.cs
│ │ │ ├── SSOAuthenticationService.cs
│ │ │ └── SSOWebServerHttpListener.cs
│ │ ├── Settings.cs
│ │ ├── SettingsObjects/
│ │ │ ├── AssetColumn.cs
│ │ │ ├── AssetColumnSettings.cs
│ │ │ ├── AssetSettings.cs
│ │ │ ├── BlueprintBrowserSettings.cs
│ │ │ ├── CalendarSettings.cs
│ │ │ ├── CertificateBrowserSettings.cs
│ │ │ ├── CharacterUISettings.cs
│ │ │ ├── CloudStorageServiceProviderSettings.cs
│ │ │ ├── CombatLogSettings.cs
│ │ │ ├── ContractColumn.cs
│ │ │ ├── ContractColumnSettings.cs
│ │ │ ├── ContractSettings.cs
│ │ │ ├── CustomMsgBoxSettings.cs
│ │ │ ├── EVEMailMessagesColumn.cs
│ │ │ ├── EVEMailMessagesColumnSettings.cs
│ │ │ ├── EVEMailMessagesSettings.cs
│ │ │ ├── EveMailMessageColumn.cs
│ │ │ ├── EveMailMessageColumnSettings.cs
│ │ │ ├── EveMailMessageSettings.cs
│ │ │ ├── EveNotificationColumn.cs
│ │ │ ├── EveNotificationColumnSettings.cs
│ │ │ ├── EveNotificationSettings.cs
│ │ │ ├── EveNotificationsColumn.cs
│ │ │ ├── EveNotificationsColumnSettings.cs
│ │ │ ├── EveNotificationsSettings.cs
│ │ │ ├── ExportationSettings.cs
│ │ │ ├── G15Settings.cs
│ │ │ ├── IColumnSettings.cs
│ │ │ ├── IgbSettings.cs
│ │ │ ├── IndustryJobColumn.cs
│ │ │ ├── IndustryJobColumnSettings.cs
│ │ │ ├── IndustryJobSettings.cs
│ │ │ ├── ItemBrowserSettings.cs
│ │ │ ├── LoadoutsProviderSettings.cs
│ │ │ ├── MainWindowSettings.cs
│ │ │ ├── MarketOrderColumn.cs
│ │ │ ├── MarketOrderColumnSettings.cs
│ │ │ ├── MarketOrderSettings.cs
│ │ │ ├── MarketPricerSettings.cs
│ │ │ ├── ModifiedSerializableDictionary.cs
│ │ │ ├── MonitoredCharacterSettings.cs
│ │ │ ├── NotificationCategorySettings.cs
│ │ │ ├── NotificationSettings.cs
│ │ │ ├── PlanColumn.cs
│ │ │ ├── PlanColumnSettings.cs
│ │ │ ├── PlanExportSettings.cs
│ │ │ ├── PlanSorting.cs
│ │ │ ├── PlanWindowSettings.cs
│ │ │ ├── PlanetaryColumn.cs
│ │ │ ├── PlanetaryColumnSettings.cs
│ │ │ ├── PlanetarySettings.cs
│ │ │ ├── PortableEveInstallationsSettings.cs
│ │ │ ├── ProxyAuthentication.cs
│ │ │ ├── ProxySettings.cs
│ │ │ ├── ResearchColumn.cs
│ │ │ ├── ResearchColumnSettings.cs
│ │ │ ├── ResearchSettings.cs
│ │ │ ├── SchedulerSettings.cs
│ │ │ ├── SchedulerUISettings.cs
│ │ │ ├── SerializableColor.cs
│ │ │ ├── SerializableDictionary.cs
│ │ │ ├── SerializableRectangle.cs
│ │ │ ├── ShipBrowserSettings.cs
│ │ │ ├── SkillBrowserSettings.cs
│ │ │ ├── SkillPieChartSettings.cs
│ │ │ ├── ToolTipNotificationBehaviour.cs
│ │ │ ├── TrayPopupSettings.cs
│ │ │ ├── TrayTooltipSettings.cs
│ │ │ ├── UISettings.cs
│ │ │ ├── UpdatePeriodExtensions.cs
│ │ │ ├── UpdateSettings.cs
│ │ │ ├── WalletJournalColumn.cs
│ │ │ ├── WalletJournalColumnSettings.cs
│ │ │ ├── WalletJournalSettings.cs
│ │ │ ├── WalletTransactionColumn.cs
│ │ │ ├── WalletTransactionColumnSettings.cs
│ │ │ ├── WalletTransactionSettings.cs
│ │ │ └── WindowLocationSettings.cs
│ │ ├── Threading/
│ │ │ └── Dispatcher.cs
│ │ ├── UpdateManager.cs
│ │ ├── Util.cs
│ │ └── packages.config
│ ├── EVEMon.LogitechG15/
│ │ ├── CycleEventArgs.cs
│ │ ├── EVEMon.LogitechG15.csproj
│ │ ├── G15Handler.cs
│ │ ├── GlobalSuppressions.cs
│ │ ├── LcdDisplay.cs
│ │ ├── LcdInterface.cs
│ │ ├── LcdLine.cs
│ │ ├── LcdState.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ └── Resources.resx
│ │ └── app.config
│ ├── EVEMon.PieChart/
│ │ ├── AngleChangeEventArgs.cs
│ │ ├── ColorUtil.cs
│ │ ├── EVEMon.PieChart.csproj
│ │ ├── EdgeColor.cs
│ │ ├── Enumerations.cs
│ │ ├── GlobalSuppressions.cs
│ │ ├── GraphicsUtil.cs
│ │ ├── PieChart.cs
│ │ ├── PieChartControl.cs
│ │ ├── PieSlice.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Quadrilateral.cs
│ │ ├── SkillsPieChart.Designer.cs
│ │ ├── SkillsPieChart.cs
│ │ ├── SkillsPieChart.resx
│ │ └── app.config
│ ├── EVEMon.Sales/
│ │ ├── CXIParser.cs
│ │ ├── EVEMon.Sales.csproj
│ │ ├── EveCentralParser.cs
│ │ ├── GlobalSuppressions.cs
│ │ ├── IMineralParser.cs
│ │ ├── MineralDataRequest.cs
│ │ ├── MineralParserException.cs
│ │ ├── MineralPrice.cs
│ │ ├── MineralTile.Designer.cs
│ │ ├── MineralTile.cs
│ │ ├── MineralTile.resx
│ │ ├── MineralWorksheet.Designer.cs
│ │ ├── MineralWorksheet.cs
│ │ ├── MineralWorksheet.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── AssemblyInfo.cs
│ ├── EVEMon.Watchdog/
│ │ ├── EVEMon.Watchdog.csproj
│ │ ├── GlobalSuppressions.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── WatchdogWindow.Designer.cs
│ │ ├── WatchdogWindow.cs
│ │ ├── WatchdogWindow.resx
│ │ └── app.config
│ └── EVEMon.WindowsApi/
│ ├── EVEMon.WindowsApi.csproj
│ ├── GlobalSuppressions.cs
│ ├── OSFeatureCheck.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SafeNativeMethods.cs
│ └── Windows7.cs
├── tests/
│ ├── Tests.EVEMon/
│ │ ├── AsyncVoidMethodsTests.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Tests.EVEMon.csproj
│ │ ├── app.config
│ │ └── packages.config
│ ├── Tests.EVEMon.Common/
│ │ ├── AsyncVoidMethodsTests.cs
│ │ ├── CompressionUncompressionTests.cs
│ │ ├── GlobalSuppressions.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Tests.EVEMon.Common.csproj
│ │ ├── TimeExtensionsTests.cs
│ │ ├── app.config
│ │ └── packages.config
│ └── Tests.Helpers/
│ ├── AsyncVoidMethodsHelper.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── Tests.Helpers.csproj
├── tools/
│ ├── EVESDEToSQL/
│ │ ├── EVESDEToSQL.exe.config
│ │ ├── SDEFiles/
│ │ │ └── Put SDE zip or individual files here
│ │ ├── System.Data.SQLite.xml
│ │ ├── YamlDotNet.xml
│ │ └── license.txt
│ ├── InstallBuilder/
│ │ ├── EVEMonInstallerScript.nsi
│ │ ├── GlobalSuppressions.cs
│ │ ├── InstallBuilder.csproj
│ │ ├── NETFrameworkCheck.nsh
│ │ ├── NSIS/
│ │ │ ├── COPYING
│ │ │ ├── Contrib/
│ │ │ │ ├── Language files/
│ │ │ │ │ ├── Afrikaans.nlf
│ │ │ │ │ ├── Afrikaans.nsh
│ │ │ │ │ ├── Albanian.nlf
│ │ │ │ │ ├── Albanian.nsh
│ │ │ │ │ ├── Arabic.nlf
│ │ │ │ │ ├── Arabic.nsh
│ │ │ │ │ ├── Basque.nlf
│ │ │ │ │ ├── Basque.nsh
│ │ │ │ │ ├── Belarusian.nlf
│ │ │ │ │ ├── Belarusian.nsh
│ │ │ │ │ ├── Bosnian.nlf
│ │ │ │ │ ├── Bosnian.nsh
│ │ │ │ │ ├── Breton.nlf
│ │ │ │ │ ├── Breton.nsh
│ │ │ │ │ ├── Bulgarian.nlf
│ │ │ │ │ ├── Bulgarian.nsh
│ │ │ │ │ ├── Catalan.nlf
│ │ │ │ │ ├── Catalan.nsh
│ │ │ │ │ ├── Croatian.nlf
│ │ │ │ │ ├── Croatian.nsh
│ │ │ │ │ ├── Czech.nlf
│ │ │ │ │ ├── Czech.nsh
│ │ │ │ │ ├── Danish.nlf
│ │ │ │ │ ├── Danish.nsh
│ │ │ │ │ ├── Dutch.nlf
│ │ │ │ │ ├── Dutch.nsh
│ │ │ │ │ ├── English.nlf
│ │ │ │ │ ├── English.nsh
│ │ │ │ │ ├── Esperanto.nlf
│ │ │ │ │ ├── Esperanto.nsh
│ │ │ │ │ ├── Estonian.nlf
│ │ │ │ │ ├── Estonian.nsh
│ │ │ │ │ ├── Farsi.nlf
│ │ │ │ │ ├── Farsi.nsh
│ │ │ │ │ ├── Finnish.nlf
│ │ │ │ │ ├── Finnish.nsh
│ │ │ │ │ ├── French.nlf
│ │ │ │ │ ├── French.nsh
│ │ │ │ │ ├── Galician.nlf
│ │ │ │ │ ├── Galician.nsh
│ │ │ │ │ ├── German.nlf
│ │ │ │ │ ├── German.nsh
│ │ │ │ │ ├── Greek.nlf
│ │ │ │ │ ├── Greek.nsh
│ │ │ │ │ ├── Hebrew.nlf
│ │ │ │ │ ├── Hebrew.nsh
│ │ │ │ │ ├── Hungarian.nlf
│ │ │ │ │ ├── Hungarian.nsh
│ │ │ │ │ ├── Icelandic.nlf
│ │ │ │ │ ├── Icelandic.nsh
│ │ │ │ │ ├── Indonesian.nlf
│ │ │ │ │ ├── Indonesian.nsh
│ │ │ │ │ ├── Irish.nlf
│ │ │ │ │ ├── Irish.nsh
│ │ │ │ │ ├── Italian.nlf
│ │ │ │ │ ├── Italian.nsh
│ │ │ │ │ ├── Japanese.nlf
│ │ │ │ │ ├── Japanese.nsh
│ │ │ │ │ ├── Korean.nlf
│ │ │ │ │ ├── Korean.nsh
│ │ │ │ │ ├── Kurdish.nlf
│ │ │ │ │ ├── Kurdish.nsh
│ │ │ │ │ ├── Latvian.nlf
│ │ │ │ │ ├── Latvian.nsh
│ │ │ │ │ ├── Lithuanian.nlf
│ │ │ │ │ ├── Lithuanian.nsh
│ │ │ │ │ ├── Luxembourgish.nlf
│ │ │ │ │ ├── Luxembourgish.nsh
│ │ │ │ │ ├── Macedonian.nlf
│ │ │ │ │ ├── Macedonian.nsh
│ │ │ │ │ ├── Malay.nlf
│ │ │ │ │ ├── Malay.nsh
│ │ │ │ │ ├── Mongolian.nlf
│ │ │ │ │ ├── Mongolian.nsh
│ │ │ │ │ ├── Norwegian.nlf
│ │ │ │ │ ├── Norwegian.nsh
│ │ │ │ │ ├── NorwegianNynorsk.nlf
│ │ │ │ │ ├── NorwegianNynorsk.nsh
│ │ │ │ │ ├── Polish.nlf
│ │ │ │ │ ├── Polish.nsh
│ │ │ │ │ ├── Portuguese.nlf
│ │ │ │ │ ├── Portuguese.nsh
│ │ │ │ │ ├── PortugueseBR.nlf
│ │ │ │ │ ├── PortugueseBR.nsh
│ │ │ │ │ ├── Romanian.nlf
│ │ │ │ │ ├── Romanian.nsh
│ │ │ │ │ ├── Russian.nlf
│ │ │ │ │ ├── Russian.nsh
│ │ │ │ │ ├── Serbian.nlf
│ │ │ │ │ ├── Serbian.nsh
│ │ │ │ │ ├── SerbianLatin.nlf
│ │ │ │ │ ├── SerbianLatin.nsh
│ │ │ │ │ ├── SimpChinese.nlf
│ │ │ │ │ ├── SimpChinese.nsh
│ │ │ │ │ ├── Slovak.nlf
│ │ │ │ │ ├── Slovak.nsh
│ │ │ │ │ ├── Slovenian.nlf
│ │ │ │ │ ├── Slovenian.nsh
│ │ │ │ │ ├── Spanish.nlf
│ │ │ │ │ ├── Spanish.nsh
│ │ │ │ │ ├── SpanishInternational.nlf
│ │ │ │ │ ├── SpanishInternational.nsh
│ │ │ │ │ ├── Swedish.nlf
│ │ │ │ │ ├── Swedish.nsh
│ │ │ │ │ ├── Thai.nlf
│ │ │ │ │ ├── Thai.nsh
│ │ │ │ │ ├── TradChinese.nlf
│ │ │ │ │ ├── TradChinese.nsh
│ │ │ │ │ ├── Turkish.nlf
│ │ │ │ │ ├── Turkish.nsh
│ │ │ │ │ ├── Ukrainian.nlf
│ │ │ │ │ ├── Ukrainian.nsh
│ │ │ │ │ ├── Uzbek.nlf
│ │ │ │ │ ├── Uzbek.nsh
│ │ │ │ │ ├── Welsh.nlf
│ │ │ │ │ └── Welsh.nsh
│ │ │ │ ├── Modern UI/
│ │ │ │ │ ├── System.nsh
│ │ │ │ │ └── ioSpecial.ini
│ │ │ │ ├── Modern UI 2/
│ │ │ │ │ ├── Deprecated.nsh
│ │ │ │ │ ├── Interface.nsh
│ │ │ │ │ ├── Localization.nsh
│ │ │ │ │ ├── MUI2.nsh
│ │ │ │ │ ├── Pages/
│ │ │ │ │ │ ├── Components.nsh
│ │ │ │ │ │ ├── Directory.nsh
│ │ │ │ │ │ ├── Finish.nsh
│ │ │ │ │ │ ├── InstallFiles.nsh
│ │ │ │ │ │ ├── License.nsh
│ │ │ │ │ │ ├── StartMenu.nsh
│ │ │ │ │ │ ├── UninstallConfirm.nsh
│ │ │ │ │ │ └── Welcome.nsh
│ │ │ │ │ └── Pages.nsh
│ │ │ │ └── zip2exe/
│ │ │ │ ├── Base.nsh
│ │ │ │ ├── Classic.nsh
│ │ │ │ └── Modern.nsh
│ │ │ ├── Docs/
│ │ │ │ ├── AdvSplash/
│ │ │ │ │ └── advsplash.txt
│ │ │ │ ├── Banner/
│ │ │ │ │ └── Readme.txt
│ │ │ │ ├── BgImage/
│ │ │ │ │ └── BgImage.txt
│ │ │ │ ├── Dialer/
│ │ │ │ │ └── Dialer.txt
│ │ │ │ ├── InstallOptions/
│ │ │ │ │ ├── Changelog.txt
│ │ │ │ │ └── Readme.html
│ │ │ │ ├── Math/
│ │ │ │ │ └── Math.txt
│ │ │ │ ├── Modern UI/
│ │ │ │ │ ├── Changelog.txt
│ │ │ │ │ ├── License.txt
│ │ │ │ │ └── Readme.html
│ │ │ │ ├── Modern UI 2/
│ │ │ │ │ ├── License.txt
│ │ │ │ │ └── Readme.html
│ │ │ │ ├── MultiUser/
│ │ │ │ │ └── Readme.html
│ │ │ │ ├── NSISdl/
│ │ │ │ │ ├── License.txt
│ │ │ │ │ └── ReadMe.txt
│ │ │ │ ├── Splash/
│ │ │ │ │ └── splash.txt
│ │ │ │ ├── StartMenu/
│ │ │ │ │ └── Readme.txt
│ │ │ │ ├── StrFunc/
│ │ │ │ │ └── StrFunc.txt
│ │ │ │ ├── System/
│ │ │ │ │ ├── System.html
│ │ │ │ │ └── WhatsNew.txt
│ │ │ │ ├── VPatch/
│ │ │ │ │ └── Readme.html
│ │ │ │ ├── makensisw/
│ │ │ │ │ ├── License.txt
│ │ │ │ │ └── Readme.txt
│ │ │ │ ├── nsDialogs/
│ │ │ │ │ └── Readme.html
│ │ │ │ └── nsExec/
│ │ │ │ └── nsExec.txt
│ │ │ ├── Examples/
│ │ │ │ ├── AdvSplash/
│ │ │ │ │ └── Example.nsi
│ │ │ │ ├── Banner/
│ │ │ │ │ └── Example.nsi
│ │ │ │ ├── BgImage/
│ │ │ │ │ └── Example.nsi
│ │ │ │ ├── FileFunc.ini
│ │ │ │ ├── FileFunc.nsi
│ │ │ │ ├── FileFuncTest.nsi
│ │ │ │ ├── InstallOptions/
│ │ │ │ │ ├── test.ini
│ │ │ │ │ ├── test.nsi
│ │ │ │ │ ├── testimgs.ini
│ │ │ │ │ ├── testimgs.nsi
│ │ │ │ │ ├── testlink.ini
│ │ │ │ │ ├── testlink.nsi
│ │ │ │ │ ├── testnotify.ini
│ │ │ │ │ └── testnotify.nsi
│ │ │ │ ├── Library.nsi
│ │ │ │ ├── LogicLib.nsi
│ │ │ │ ├── Math/
│ │ │ │ │ ├── math.nsi
│ │ │ │ │ ├── mathtest.ini
│ │ │ │ │ ├── mathtest.nsi
│ │ │ │ │ └── mathtest.txt
│ │ │ │ ├── Memento.nsi
│ │ │ │ ├── Modern UI/
│ │ │ │ │ ├── Basic.nsi
│ │ │ │ │ ├── HeaderBitmap.nsi
│ │ │ │ │ ├── MultiLanguage.nsi
│ │ │ │ │ ├── StartMenu.nsi
│ │ │ │ │ └── WelcomeFinish.nsi
│ │ │ │ ├── Plugin/
│ │ │ │ │ ├── exdll-vs2008.sln
│ │ │ │ │ ├── exdll-vs2008.vcproj
│ │ │ │ │ ├── exdll.c
│ │ │ │ │ ├── exdll.dpr
│ │ │ │ │ ├── exdll.dsp
│ │ │ │ │ ├── exdll.dsw
│ │ │ │ │ ├── exdll_with_unit.dpr
│ │ │ │ │ ├── extdll.inc
│ │ │ │ │ ├── nsis/
│ │ │ │ │ │ ├── api.h
│ │ │ │ │ │ ├── pluginapi.h
│ │ │ │ │ │ └── pluginapi.lib
│ │ │ │ │ └── nsis.pas
│ │ │ │ ├── Splash/
│ │ │ │ │ └── Example.nsi
│ │ │ │ ├── StartMenu/
│ │ │ │ │ └── Example.nsi
│ │ │ │ ├── StrFunc.nsi
│ │ │ │ ├── System/
│ │ │ │ │ ├── SysFunc.nsh
│ │ │ │ │ ├── System.nsh
│ │ │ │ │ └── System.nsi
│ │ │ │ ├── TextFunc.ini
│ │ │ │ ├── TextFunc.nsi
│ │ │ │ ├── TextFuncTest.nsi
│ │ │ │ ├── UserInfo/
│ │ │ │ │ └── UserInfo.nsi
│ │ │ │ ├── UserVars.nsi
│ │ │ │ ├── VPatch/
│ │ │ │ │ ├── example.nsi
│ │ │ │ │ ├── newfile.txt
│ │ │ │ │ ├── oldfile.txt
│ │ │ │ │ └── patch.pat
│ │ │ │ ├── VersionInfo.nsi
│ │ │ │ ├── WordFunc.ini
│ │ │ │ ├── WordFunc.nsi
│ │ │ │ ├── WordFuncTest.nsi
│ │ │ │ ├── bigtest.nsi
│ │ │ │ ├── example1.nsi
│ │ │ │ ├── example2.nsi
│ │ │ │ ├── gfx.nsi
│ │ │ │ ├── languages.nsi
│ │ │ │ ├── makensis.nsi
│ │ │ │ ├── nsDialogs/
│ │ │ │ │ ├── InstallOptions.nsi
│ │ │ │ │ ├── example.nsi
│ │ │ │ │ ├── timer.nsi
│ │ │ │ │ └── welcome.nsi
│ │ │ │ ├── nsExec/
│ │ │ │ │ └── test.nsi
│ │ │ │ ├── one-section.nsi
│ │ │ │ ├── primes.nsi
│ │ │ │ ├── rtest.nsi
│ │ │ │ ├── silent.nsi
│ │ │ │ ├── viewhtml.nsi
│ │ │ │ └── waplugin.nsi
│ │ │ ├── Include/
│ │ │ │ ├── Colors.nsh
│ │ │ │ ├── FileFunc.nsh
│ │ │ │ ├── InstallOptions.nsh
│ │ │ │ ├── LangFile.nsh
│ │ │ │ ├── Library.nsh
│ │ │ │ ├── LogicLib.nsh
│ │ │ │ ├── MUI.nsh
│ │ │ │ ├── MUI2.nsh
│ │ │ │ ├── Memento.nsh
│ │ │ │ ├── MultiUser.nsh
│ │ │ │ ├── Sections.nsh
│ │ │ │ ├── StrFunc.nsh
│ │ │ │ ├── TextFunc.nsh
│ │ │ │ ├── UpgradeDLL.nsh
│ │ │ │ ├── Util.nsh
│ │ │ │ ├── VB6RunTime.nsh
│ │ │ │ ├── VPatchLib.nsh
│ │ │ │ ├── Win/
│ │ │ │ │ ├── WinDef.nsh
│ │ │ │ │ ├── WinError.nsh
│ │ │ │ │ ├── WinNT.nsh
│ │ │ │ │ └── WinUser.nsh
│ │ │ │ ├── WinCore.nsh
│ │ │ │ ├── WinMessages.nsh
│ │ │ │ ├── WinVer.nsh
│ │ │ │ ├── WordFunc.nsh
│ │ │ │ ├── nsDialogs.nsh
│ │ │ │ └── x64.nsh
│ │ │ ├── Menu/
│ │ │ │ └── index.html
│ │ │ ├── NSIS.chm
│ │ │ ├── Stubs/
│ │ │ │ ├── bzip2
│ │ │ │ ├── bzip2_solid
│ │ │ │ ├── lzma
│ │ │ │ ├── lzma_solid
│ │ │ │ ├── uninst
│ │ │ │ ├── zlib
│ │ │ │ └── zlib_solid
│ │ │ └── nsisconf.nsh
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── UAC.nsh
│ │ ├── app.config
│ │ └── packages.config
│ ├── PatchXmlCreator/
│ │ ├── Action.cs
│ │ ├── DatafileControl.Designer.cs
│ │ ├── DatafileControl.cs
│ │ ├── DatafileControl.resx
│ │ ├── GlobalSuppressions.cs
│ │ ├── Helper.cs
│ │ ├── Output/
│ │ │ ├── patch-old.xml
│ │ │ └── patch.xml
│ │ ├── PatchXmlCreator.csproj
│ │ ├── PatchXmlCreatorWindow.Designer.cs
│ │ ├── PatchXmlCreatorWindow.cs
│ │ ├── PatchXmlCreatorWindow.resx
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Resources.Designer.cs
│ │ │ ├── Resources.resx
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ └── app.config
│ ├── ReSharper/
│ │ ├── EVEMonCodingStyle-ReSharper.xml
│ │ ├── EVEMonCodingStyle-ReSharper6.1.DotSettings
│ │ └── EVEMonCodingStyle-ReSharper9.x.DotSettings
│ ├── ResFileCreator/
│ │ ├── GlobalSuppressions.cs
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── ResFileCreator.csproj
│ │ └── app.config
│ └── XmlGenerator/
│ ├── App.config
│ ├── Collections/
│ │ ├── BagCollection.cs
│ │ ├── IndexedCollection.cs
│ │ └── RelationSetCollection.cs
│ ├── Datafiles/
│ │ ├── Blueprints.cs
│ │ ├── Certificates.cs
│ │ ├── Geography.cs
│ │ ├── Items.cs
│ │ ├── Masteries.cs
│ │ ├── Properties.cs
│ │ ├── Reprocessing.cs
│ │ └── Skills.cs
│ ├── Extensions/
│ │ └── StringCleaning.cs
│ ├── GlobalSuppressions.cs
│ ├── Interfaces/
│ │ ├── IHasId.cs
│ │ ├── IHasLongId.cs
│ │ └── IRelation.cs
│ ├── Models/
│ │ ├── EveStaticData.cs
│ │ ├── agtAgentTypes.cs
│ │ ├── agtAgents.cs
│ │ ├── agtResearchAgents.cs
│ │ ├── certCerts.cs
│ │ ├── chrAncestries.cs
│ │ ├── chrAttributes.cs
│ │ ├── chrBloodlines.cs
│ │ ├── chrFactions.cs
│ │ ├── chrRaces.cs
│ │ ├── cloneStates.cs
│ │ ├── crpActivities.cs
│ │ ├── crpNPCCorporationDivisions.cs
│ │ ├── crpNPCCorporationResearchFields.cs
│ │ ├── crpNPCCorporationTrades.cs
│ │ ├── crpNPCCorporations.cs
│ │ ├── crpNPCDivisions.cs
│ │ ├── crtCertificates.cs
│ │ ├── crtClasses.cs
│ │ ├── crtRecommendations.cs
│ │ ├── crtRelationships.cs
│ │ ├── dgmAttributeCategories.cs
│ │ ├── dgmAttributeTypes.cs
│ │ ├── dgmEffects.cs
│ │ ├── dgmExpressions.cs
│ │ ├── dgmMasteries.cs
│ │ ├── dgmTraits.cs
│ │ ├── dgmTypeAttributes.cs
│ │ ├── dgmTypeEffects.cs
│ │ ├── dgmTypeMasteries.cs
│ │ ├── dgmTypeTraits.cs
│ │ ├── eveGraphics.cs
│ │ ├── eveIcons.cs
│ │ ├── eveUnits.cs
│ │ ├── industryActivity.cs
│ │ ├── industryActivityMaterials.cs
│ │ ├── industryActivityProbabilities.cs
│ │ ├── industryActivityProducts.cs
│ │ ├── industryActivityRaces.cs
│ │ ├── industryActivitySkills.cs
│ │ ├── industryBlueprints.cs
│ │ ├── invCategories.cs
│ │ ├── invContrabandTypes.cs
│ │ ├── invControlTowerResourcePurposes.cs
│ │ ├── invControlTowerResources.cs
│ │ ├── invFlags.cs
│ │ ├── invGroups.cs
│ │ ├── invItems.cs
│ │ ├── invMarketGroups.cs
│ │ ├── invMetaGroups.cs
│ │ ├── invMetaTypes.cs
│ │ ├── invNames.cs
│ │ ├── invPositions.cs
│ │ ├── invTraits.cs
│ │ ├── invTypeMaterials.cs
│ │ ├── invTypeReactions.cs
│ │ ├── invTypes.cs
│ │ ├── invUniqueNames.cs
│ │ ├── mapCelestialStatistics.cs
│ │ ├── mapConstellationJumps.cs
│ │ ├── mapConstellations.cs
│ │ ├── mapDenormalize.cs
│ │ ├── mapJumps.cs
│ │ ├── mapLandmarks.cs
│ │ ├── mapLocationScenes.cs
│ │ ├── mapLocationWormholeClasses.cs
│ │ ├── mapRegionJumps.cs
│ │ ├── mapRegions.cs
│ │ ├── mapSolarSystemJumps.cs
│ │ ├── mapSolarSystems.cs
│ │ ├── mapUniverse.cs
│ │ ├── planetSchematics.cs
│ │ ├── planetSchematicsPinMap.cs
│ │ ├── planetSchematicsTypeMap.cs
│ │ ├── ramActivities.cs
│ │ ├── ramAssemblyLineStations.cs
│ │ ├── ramAssemblyLineTypeDetailPerCategory.cs
│ │ ├── ramAssemblyLineTypeDetailPerGroup.cs
│ │ ├── ramAssemblyLineTypes.cs
│ │ ├── ramInstallationTypeContents.cs
│ │ ├── sknLicenses.cs
│ │ ├── sknMaterials.cs
│ │ ├── sknSkins.cs
│ │ ├── staOperationServices.cs
│ │ ├── staOperations.cs
│ │ ├── staServices.cs
│ │ ├── staStationTypes.cs
│ │ ├── staStations.cs
│ │ ├── translationTables.cs
│ │ ├── trnTranslationColumns.cs
│ │ ├── trnTranslationLanguages.cs
│ │ ├── trnTranslations.cs
│ │ ├── warCombatZoneSystems.cs
│ │ └── warCombatZones.cs
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Providers/
│ │ ├── Database.cs
│ │ └── HoboleaksAlphaSkills.cs
│ ├── StaticData/
│ │ ├── AgtAgentTypes.cs
│ │ ├── AgtAgents.cs
│ │ ├── AgtResearchAgents.cs
│ │ ├── ChrFactions.cs
│ │ ├── CrpNPCDivisions.cs
│ │ ├── CrtCertificates.cs
│ │ ├── CrtClasses.cs
│ │ ├── CrtRecommendations.cs
│ │ ├── CrtRelationships.cs
│ │ ├── DgmAttributeCategories.cs
│ │ ├── DgmAttributeTypes.cs
│ │ ├── DgmMasteries.cs
│ │ ├── DgmTraits.cs
│ │ ├── DgmTypeAttributes.cs
│ │ ├── DgmTypeEffects.cs
│ │ ├── DgmTypeMasteries.cs
│ │ ├── DgmTypeTraits.cs
│ │ ├── EveIcons.cs
│ │ ├── EveUnits.cs
│ │ ├── IndustryActivity.cs
│ │ ├── IndustryActivityMaterials.cs
│ │ ├── IndustryActivityProbabilities.cs
│ │ ├── IndustryActivityProducts.cs
│ │ ├── IndustryActivitySkills.cs
│ │ ├── IndustryBlueprints.cs
│ │ ├── InvCategories.cs
│ │ ├── InvControlTowerResourcePurposes.cs
│ │ ├── InvControlTowerResources.cs
│ │ ├── InvFlags.cs
│ │ ├── InvGroups.cs
│ │ ├── InvItems.cs
│ │ ├── InvMarketGroups.cs
│ │ ├── InvMetaTypes.cs
│ │ ├── InvNames.cs
│ │ ├── InvTraits.cs
│ │ ├── InvTypeMaterials.cs
│ │ ├── InvTypeReactions.cs
│ │ ├── InvTypes.cs
│ │ ├── MapConstellations.cs
│ │ ├── MapRegions.cs
│ │ ├── MapSolarSystems.cs
│ │ ├── MapSolarSystemsJump.cs
│ │ └── StaStations.cs
│ ├── Utils/
│ │ └── Util.cs
│ ├── XmlGenerator.csproj
│ ├── Xmlfiles/
│ │ ├── Flags.cs
│ │ └── Serialization/
│ │ ├── SerialiazableRowset.cs
│ │ ├── SerializableInvFlagsRow.cs
│ │ └── SerializableRoot.cs
│ └── packages.config
└── updates/
└── patch.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = crlf
insert_final_newline = true
indent_style = space
indent_size = 4
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio 2015 cache/options directory
.vs/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
## TODO: Comment the next line if you want to checkin your
## web deploy settings but do note that will include unencrypted
## passwords
#*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
*.bacpac
/*.rb
/*.bat
/tools/XmlGenerator/*.sqlite
================================================
FILE: EVEMon.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{D7B1651B-8895-4254-8EBF-029CBEE3C1E3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{B2FD94FF-A895-4519-A97F-6DEA32F15F8E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{9AB16E7E-E520-4444-8E8E-165129CC93B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon", "src\EVEMon\EVEMon.csproj", "{A2E5EFE0-614A-4567-95E5-92A4D94169AC}"
ProjectSection(ProjectDependencies) = postProject
{696E929A-6A4A-4C6D-A8B2-C4F25F781940} = {696E929A-6A4A-4C6D-A8B2-C4F25F781940}
{8C4A87A0-780E-4765-ADD0-146091FE26F4} = {8C4A87A0-780E-4765-ADD0-146091FE26F4}
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0} = {87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon.Common", "src\EVEMon.Common\EVEMon.Common.csproj", "{C0665275-3E0B-4117-81B0-751206ED03CD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon.LogitechG15", "src\EVEMon.LogitechG15\EVEMon.LogitechG15.csproj", "{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon.PieChart", "src\EVEMon.PieChart\EVEMon.PieChart.csproj", "{696E929A-6A4A-4C6D-A8B2-C4F25F781940}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon.WindowsApi", "src\EVEMon.WindowsApi\EVEMon.WindowsApi.csproj", "{D942D976-6185-4ECD-A83B-60260100D12E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EVEMon.Watchdog", "src\EVEMon.Watchdog\EVEMon.Watchdog.csproj", "{8C4A87A0-780E-4765-ADD0-146091FE26F4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.EVEMon.Common", "tests\Tests.EVEMon.Common\Tests.EVEMon.Common.csproj", "{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InstallBuilder", "tools\InstallBuilder\InstallBuilder.csproj", "{5CE8E302-3577-41BC-A35F-C88AC625F7A7}"
ProjectSection(ProjectDependencies) = postProject
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0} = {87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}
{A2E5EFE0-614A-4567-95E5-92A4D94169AC} = {A2E5EFE0-614A-4567-95E5-92A4D94169AC}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlGenerator", "tools\XmlGenerator\XmlGenerator.csproj", "{9366D54A-B516-4A1D-987B-B1BCE31D2A72}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PatchXmlCreator", "tools\PatchXmlCreator\PatchXmlCreator.csproj", "{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResFileCreator", "tools\ResFileCreator\ResFileCreator.csproj", "{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A7AC1A9C-97FC-4937-A8CA-684650A99D01}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
SharedAssemblyInfo.cs = SharedAssemblyInfo.cs
SharedAssemblyInfo.template.cs = SharedAssemblyInfo.template.cs
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.EVEMon", "tests\Tests.EVEMon\Tests.EVEMon.csproj", "{FD639BF6-3414-4FB2-8325-61744D44F028}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Helpers", "tests\Tests.Helpers\Tests.Helpers.csproj", "{1917E258-0979-4333-8B20-5D66E8986E1C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Snapshot|Any CPU = Snapshot|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Release|Any CPU.Build.0 = Release|Any CPU
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{A2E5EFE0-614A-4567-95E5-92A4D94169AC}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Release|Any CPU.Build.0 = Release|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{C0665275-3E0B-4117-81B0-751206ED03CD}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Release|Any CPU.Build.0 = Release|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Debug|Any CPU.Build.0 = Debug|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Release|Any CPU.ActiveCfg = Release|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Release|Any CPU.Build.0 = Release|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{696E929A-6A4A-4C6D-A8B2-C4F25F781940}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Release|Any CPU.Build.0 = Release|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{D942D976-6185-4ECD-A83B-60260100D12E}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Release|Any CPU.Build.0 = Release|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{8C4A87A0-780E-4765-ADD0-146091FE26F4}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Release|Any CPU.Build.0 = Release|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{5CE8E302-3577-41BC-A35F-C88AC625F7A7}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{9366D54A-B516-4A1D-987B-B1BCE31D2A72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9366D54A-B516-4A1D-987B-B1BCE31D2A72}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9366D54A-B516-4A1D-987B-B1BCE31D2A72}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9366D54A-B516-4A1D-987B-B1BCE31D2A72}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Release|Any CPU.Build.0 = Release|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0}.Snapshot|Any CPU.Build.0 = Snapshot|Any CPU
{FD639BF6-3414-4FB2-8325-61744D44F028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD639BF6-3414-4FB2-8325-61744D44F028}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD639BF6-3414-4FB2-8325-61744D44F028}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD639BF6-3414-4FB2-8325-61744D44F028}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
{1917E258-0979-4333-8B20-5D66E8986E1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1917E258-0979-4333-8B20-5D66E8986E1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1917E258-0979-4333-8B20-5D66E8986E1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1917E258-0979-4333-8B20-5D66E8986E1C}.Snapshot|Any CPU.ActiveCfg = Snapshot|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A2E5EFE0-614A-4567-95E5-92A4D94169AC} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{C0665275-3E0B-4117-81B0-751206ED03CD} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{3067BDFB-C02D-4CAF-96AA-4D8F9F986180} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{696E929A-6A4A-4C6D-A8B2-C4F25F781940} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{D942D976-6185-4ECD-A83B-60260100D12E} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{8C4A87A0-780E-4765-ADD0-146091FE26F4} = {D7B1651B-8895-4254-8EBF-029CBEE3C1E3}
{C61CB94F-31DF-48BE-8053-FCE7DC6ECD7F} = {B2FD94FF-A895-4519-A97F-6DEA32F15F8E}
{5CE8E302-3577-41BC-A35F-C88AC625F7A7} = {9AB16E7E-E520-4444-8E8E-165129CC93B3}
{9366D54A-B516-4A1D-987B-B1BCE31D2A72} = {9AB16E7E-E520-4444-8E8E-165129CC93B3}
{E6907BAD-CDF4-4B3C-AF2E-E854D2E2D959} = {9AB16E7E-E520-4444-8E8E-165129CC93B3}
{87682BB1-CCE5-4CA4-BDE8-1A2ACF0B3CE0} = {9AB16E7E-E520-4444-8E8E-165129CC93B3}
{FD639BF6-3414-4FB2-8325-61744D44F028} = {B2FD94FF-A895-4519-A97F-6DEA32F15F8E}
{1917E258-0979-4333-8B20-5D66E8986E1C} = {B2FD94FF-A895-4519-A97F-6DEA32F15F8E}
EndGlobalSection
EndGlobal
================================================
FILE: README.md
================================================
[]()
[]()
# **EVEMon**
A lightweight, easy-to-use standalone Windows application designed to assist you in keeping track of your EVE Online character progression.
For complete info on *How To Contribute* please visit the [wiki](https://bitbucket.org/EVEMonDevTeam/evemon/wiki) section
**Maintainer of the ESI fork:**
[EVE:Peter Han](https://github.com/peterhaneve/evemon) (GitHub)
**Owner:**
[EVEMonDevTeam](https://github.com/evemondevteam/) (GitHub)
[EVEMonDevTeam](https://bitbucket.org/EVEMonDevTeam) (Bitbucket)
**Website:** [EVEMon](https://evemondevteam.github.io/evemon/)
**Documentation:** [EVEMon Docs](https://evemon.readthedocs.org/)
**Feedback & Ideas:** [On UserVoice](https://evemon.uservoice.com/)
**Admins:**
[JimiC](https://github.com/JimiC) (GitHub)
[Jimi C](https://bitbucket.org/Desmont_McCallock) (Bitbucket)
================================================
FILE: SharedAssemblyInfo.cs
================================================
using System.Reflection;
using System.Resources;
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: AssemblyDescription("EVEMon Offline Character Utility for ESI, repository URL: https://github.com/peterhaneve/evemon")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("EVEMon Development Team")]
[assembly: AssemblyProduct("EVEMon")]
[assembly: AssemblyCopyright("Copyright © 2006-2021, EVEMon Development Team")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Friend assembly for unit testing
[assembly: InternalsVisibleTo("Tests.EVEMon.Common")]
// 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)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("4.0.20.0")]
[assembly: AssemblyFileVersion("4.0.20.4986")]
[assembly: AssemblyInformationalVersion("4.0.20")]
// Neutral Language
[assembly: NeutralResourcesLanguage("en-US")]
================================================
FILE: SharedAssemblyInfo.template.cs
================================================
using System.Reflection;
using System.Resources;
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: AssemblyDescription("EVEMon Offline Character Utility for ESI, repository URL: https://github.com/peterhaneve/evemon")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("EVEMon Development Team")]
[assembly: AssemblyProduct("EVEMon")]
[assembly: AssemblyCopyright("Copyright © 2006-$UTCYEAR$, EVEMon Development Team")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Friend assembly for unit testing
[assembly: InternalsVisibleTo("Tests.EVEMon.Common")]
// 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)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("4.0.20.0")]
[assembly: AssemblyFileVersion("4.0.20.$REVNUM$")]
[assembly: AssemblyInformationalVersion("4.0.20")]
// Neutral Language
[assembly: NeutralResourcesLanguage("en-US")]
================================================
FILE: designs/AutoUpdate-Architecture.bmml
================================================
circle
none
Google
AppEngine
circle
none
BattleClinic
false
bottom
true
false
Update.xml%20Silos
circle
none
BattleClinic
bottom
true
false
Content%20Silos%3A%0A%20-%20DataFiles%20%28*.xml.gz%29%0A%20-%20Binaries%20%28Installer%2C%20ZIP%20Archive%29
%3Cupdate%3E%0A%20%3Cpackage%20name%3D%22EVEMon%22%3E%0A%20%20%3Cdate%3E09/01/10%3C/date%3E%0A%20%20%3Cversion%3E1.3.1.2138%3C/version%3E%0A%20%20%3Cinstaller%3EEVEMon-install-1.3.1.2138.exe%3C/installer%3E%0A%20%20%3Carguments%3E/S%20/AUTORUN%20/SKIPDOTNET%20/D%3D%25EVEMON_EXECUTABLE_PATH%25%3C/arguments%3E%0A%20%20%3Cservers%3E%0A%20%20%20%3Cserver%3Ehttp%3A//evemon.static.battleclinic.com/builds/installers/%3C/server%3E%0A%20%20%20%3Cserver%3Ehttp%3A//evemon.battleclinic.com/builds/installers/%3C/server%3E%0A%20%20%20%3Cserver%3Ehttp%3A//evemon-cdn.appspot.com/builds/installers/%3C/server%3E%0A%20%20%3C/servers%3E%0A%20%20%3Ccontributors%3E%0A%20%20%20%3Ccontributor%3ERichard%20Slater%3C/contributor%3E%0A%20%20%20%3Ccontributor%3EAlice%3C/contributor%3E%0A%20%20%20%3Ccontributor%3EBob%3C/contributor%3E%0A%20%20%3C/contributors%3E%0A%20%20%3Cimportant%3E%0A%3C%21%5BCDATA%5BImportant%20messages%20go%20here%5D%5D%3E%0A%20%20%3C/important%3E%0A%20%20%3Cmessage%3E%0A%3C%21%5BCDATA%5BMessages%20about%20the%20release%20go%20here%5D%5D%3E%0A%20%20%3C/message%3E%0A%20%3C/package%3E%0A%20%3Cdatafiles%3E%0A%20%20%3Cdatafile%3E%0A%20%20%20%20%3Cname%3Eeve-certificates-en-US.xml.gz%3C/name%3E%0A%20%20%20%20%3Cculture%3Een-US%3C/culture%3E%0A%20%20%20%20%3Cversion%3E2249%3C/version%3E%0A%20%20%20%20%3CminimumAssembly%3E1.3.1.2138%3C/minimumAssembly%3E%0A%20%20%20%20%3Cdate%3E25/05/2010%3C/date%3E%0A%20%20%20%20%3Cmd5%3E9ced7a636195498d6df59a3e669e585a%3C/md5%3E%0A%20%20%20%20%3Cservers%3E%0A%20%20%20%20%20%3Cserver%3Ehttp%3A//evemon.static.battleclinic.com/builds/installers/%3C/server%3E%0A%20%20%20%20%20%3Cserver%3Ehttp%3A//evemon.battleclinic.com/builds/installers/%3C/server%3E%0A%20%20%20%20%20%3Cserver%3Ehttp%3A//evemon-cdn.appspot.com/builds/installers/%3C/server%3E%0A%20%20%20%20%3C/servers%3E%0A%20%20%20%20%3Cmessage%3E%3C%21%5BCDATA%5BMessage%20Goes%20Here%5D%5D%3E%3C/message%3E%0A%20%20%3C/datafile%3E%0A%20%3C/datafiles%3E%0A%3C/update%3E
================================================
FILE: designs/AutoUpdate-UI-EVEMonUpdate.bmml
================================================
EVEMon%20Update
New%20external%20EVEMon%20Update%20written%20in%20Pure%20.NET%202.0%20%28as%20EVEMon%20is%20now%29%20for%20maximum%20compatibility.%0A%20-%20identify%20missing%20dependancies%0A%20-%20download%20updates%0A%20-%20repair%20damaged%20or%20missing%20EVEMon%20data%0A%20-%20clear%20out%20redundant%20files%20in%20%25APPDATA%25%5CEVEMon%0A%20%0AEVEMon.Update.dll%20provides%20shared%20services%2C%20so%20EVEMon%20can%20identify%20if%20an%20data%20or%20program%20update%20is%20available%2C%20then%20close%20and%20launch%20updater.%0A%20%0AEVEMon%20Update%20will%20request%20admin%20privalages%20on%20Windows%207/Vista%20to%20update%20Program%20Files%20and%20Data%20stored%20in%20EVEMon%5CResources
Data%20Files
Binaries
EVEMon%201.3.2
Blueprints%20Datafile
Certificates%20Datafile
Items%20Datafile
Ships%20Datafile
Update%2C%20Tools
Multi-threaded%20download%20from%20multiple%20sources%3A%0A%20-%20Static.BattleClinic%0A%20-%20EVE%20Files%0A%20-%20Zofu%0A%20-%20Google%20AppEngine*%0A%20-%20AmazonS3*%0A%20-%20Windows%20Azure*%0A%20%0A*%20%7E%240.15/GB
top
true
false
top
true
false
Apply%20Updates
top
true
false
Downloads%20not%20applied%20untill%20MD5s%20checked
Check%20for%20Updates%0Ax%20Automatically%20Apply%0Ax%20Start%20EVEMon%20when%20Applied
Cleanup%20AppData
View%20Details
bottom
false
true
Displays%20a%20dialog%20detailing%20the%20messages%20from%20Update.xml
================================================
FILE: designs/AutoUpdate-UI-UpdateDetails.bmml
================================================
Update%20Details
EVEMon%201.3.2%3A%0A%20%0A%21%21%21%20Important%20Notice%20%21%21%21%0A%20%0AContributors%3A%0A%20*%20Alice%0A%20*%20Bob%0A%20*%20Charlie%0A%20%0AMessages%20about%20EVEMon%201.3.2%0A%20%0ABlueprints%20Datafile%20%2825%20May%202010%20-%20Version%202249%29%0AMessage%0A%20%0ACertificates%20Datafile%20%2825%20May%202010%20-%20Version%202249%29%0AMessage
true
Bold/Larger%20Title
Red%20Important%20Notice
Text%20is%20in%20a%20RTF%20box%20for%20easy%20formatting.
================================================
FILE: designs/PosMonitor.bmml
================================================
26
true
true
true
true
EVEMon
27
Scetrov%2C%20Vortecs%2C%20Haust%20Vindur
16
Scetrov
false
10
Male%20Gallente%20Gallente%0ACorporation%3A%20OcUK%0ABalance%3A%201%2C203%2C482%2C742%20ISK%0A%20
false
10
Inteligence%3A%2024.20%0APerception%2019.80%0ACharisma%3A%2019.80%0AWilpower%3A%2019.80%0AMemory%3A%2030.80
right
false
10
Known%20Skills%3A%20221%0ASkills%20at%20Level%20V%3A%20112%0ATotal%20SP%3A%2092%2C704%2C844%0AClone%20Limit%3A%20120%2C000%2C000%0AClone%20Grade%20Tau
0
10
00%3A59%3A59
Skills
Queue
Market%20Orders
selected
POSs
true
10
Currently%20Training%3A%0A237%20SP/Hour
false
10
Projectile%20Weapon%20Rigging%20IV%0A2%20hours%2C%2013%20minutes%2C%2055%20seconds%0ASat%2022/04/2010%2018%3A42%3A15
Wormhole%20POS%20%28%2322345%29%20/%20J100150%20/%20Online%0APOS%20%2388472%20/%20Elonya%20/%20Online%0APOS%20%2344538%20/%20Piak%20/%20Offline%0APOS%20%2344476%20/%20Piekura%20/%20Offline
none
true
16
-1
Item%20Required%2C%20Quantity%2C%20Cycles%20Remaining%2C%20Time%20Untill%20%0ACharters%2C%2050%2C%2010%2C%2010h%0ACoolant%2C%201344%2C%20168%2C%207d%0AEnriched%20Uranium%2C%20672%2C%20168%2C%207d%0AHelium%20Isotopes%2C%2075600%2C%20168%2C%207d%0AMechanical%20Parts%2C%20840%2C%20168%2C%207d%0AOxygen%2C%204200%2C%20168%2C%207d%0ARobotics%2C%20168%2C%20168%2C%207d%0AHeavy%20Water%2C%201854%2C%20-%2C%20-%0ALiquid%20Ozone%2C%201245%2C%20-%2C%20-
0
true
none
0
AlertIcon%7Csmall
1
1
bottom
false
none
0
AlertIcon%7Csmall
Warning%20icon%20denotes%20a%20POS%20that%20requires%20attention.%20If%20we%20create%20a%20generic%20accordion%20it%20probably%20best%20to%20allow%20%22Owner%20Draw%22%20for%20the%20title%20section.
1
1
top
false
Individual%20list%20items%20can%20be%20colourd%20to%20show%20thresholds%20%28Red%20%3D%20%3C1d%2C%20Yello%20%3D%201-3%20days%2C%20Green%20%3D%204-7%20days%29%20
right
Accordion%20allows%20the%20display%20of%20essential%20information%20about%20the%20POS%20What%2C%20Where%20and%20Status%20along%20with%20a%20notification%20icon.%20Expanding%20one%20will%20collapse%20all%20others%20ensuring%20that%20space%20is%20maximized.
1
1
top
false
Variable%20fuels%20would%20show%20a%20hyphen%20when%20PG/CPU%20not%20set.
1
-1
top
false
Right%20click%20menu%20on%20title%20bar%20allows%20user%20to%20access%20a%20configuration%20dialog%20box%20to%20set%20a%20Custom%20Name%2C%20PG%20and%20CPU%20usage.
false
false
bottom
false
false
1
1
top
false
true
Single%20click%20a%20heading%20and%20it%20will%20expand%20one%20heading%20and%20collapse%20all%20others%2C%20clicking%20an%20expanded%20heading%20will%20not%20have%20any%20effect.
================================================
FILE: src/EVEMon/APIErrorHandling/APIErrorWindow.Designer.cs
================================================
namespace EVEMon.ApiErrorHandling
{
partial class ApiErrorWindow
{
///
/// 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(ApiErrorWindow));
this.ErrorLabel = new System.Windows.Forms.Label();
this.IconPictureBox = new System.Windows.Forms.PictureBox();
this.MainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.CopyToClipboardLinkLabel = new System.Windows.Forms.LinkLabel();
this.DetailsPanel = new System.Windows.Forms.Panel();
this.DetailsTextBox = new System.Windows.Forms.TextBox();
this.TroubleshooterPanel = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)(this.IconPictureBox)).BeginInit();
this.MainTableLayoutPanel.SuspendLayout();
this.DetailsPanel.SuspendLayout();
this.SuspendLayout();
//
// ErrorLabel
//
this.ErrorLabel.AutoSize = true;
this.ErrorLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ErrorLabel.Location = new System.Drawing.Point(53, 10);
this.ErrorLabel.Name = "ErrorLabel";
this.ErrorLabel.Size = new System.Drawing.Size(521, 40);
this.ErrorLabel.TabIndex = 1;
this.ErrorLabel.Text = "Error details.";
//
// IconPictureBox
//
this.IconPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.IconPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("IconPictureBox.Image")));
this.IconPictureBox.Location = new System.Drawing.Point(13, 13);
this.IconPictureBox.Name = "IconPictureBox";
this.IconPictureBox.Size = new System.Drawing.Size(34, 34);
this.IconPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.IconPictureBox.TabIndex = 0;
this.IconPictureBox.TabStop = false;
//
// MainTableLayoutPanel
//
this.MainTableLayoutPanel.AutoSize = true;
this.MainTableLayoutPanel.ColumnCount = 2;
this.MainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 40F));
this.MainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.MainTableLayoutPanel.Controls.Add(this.ErrorLabel, 1, 0);
this.MainTableLayoutPanel.Controls.Add(this.IconPictureBox, 0, 0);
this.MainTableLayoutPanel.Controls.Add(this.CopyToClipboardLinkLabel, 1, 1);
this.MainTableLayoutPanel.Controls.Add(this.DetailsPanel, 0, 2);
this.MainTableLayoutPanel.Controls.Add(this.TroubleshooterPanel, 0, 3);
this.MainTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.MainTableLayoutPanel.Location = new System.Drawing.Point(0, 0);
this.MainTableLayoutPanel.Name = "MainTableLayoutPanel";
this.MainTableLayoutPanel.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0);
this.MainTableLayoutPanel.RowCount = 4;
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.MainTableLayoutPanel.Size = new System.Drawing.Size(587, 466);
this.MainTableLayoutPanel.TabIndex = 3;
//
// CopyToClipboardLinkLabel
//
this.CopyToClipboardLinkLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.CopyToClipboardLinkLabel.AutoSize = true;
this.CopyToClipboardLinkLabel.Location = new System.Drawing.Point(487, 50);
this.CopyToClipboardLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.CopyToClipboardLinkLabel.Name = "CopyToClipboardLinkLabel";
this.CopyToClipboardLinkLabel.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);
this.CopyToClipboardLinkLabel.Size = new System.Drawing.Size(90, 23);
this.CopyToClipboardLinkLabel.TabIndex = 4;
this.CopyToClipboardLinkLabel.TabStop = true;
this.CopyToClipboardLinkLabel.Text = "Copy to Clipboard";
this.CopyToClipboardLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.CopyToClipboardLinkLabel_LinkClicked);
//
// DetailsPanel
//
this.DetailsPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.DetailsPanel.BackColor = System.Drawing.SystemColors.Window;
this.DetailsPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.MainTableLayoutPanel.SetColumnSpan(this.DetailsPanel, 2);
this.DetailsPanel.Controls.Add(this.DetailsTextBox);
this.DetailsPanel.Location = new System.Drawing.Point(10, 73);
this.DetailsPanel.Margin = new System.Windows.Forms.Padding(0, 0, 0, 10);
this.DetailsPanel.Name = "DetailsPanel";
this.DetailsPanel.Padding = new System.Windows.Forms.Padding(10);
this.DetailsPanel.Size = new System.Drawing.Size(567, 371);
this.DetailsPanel.TabIndex = 2;
//
// DetailsTextBox
//
this.DetailsTextBox.BackColor = System.Drawing.SystemColors.Window;
this.DetailsTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.DetailsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.DetailsTextBox.Location = new System.Drawing.Point(10, 10);
this.DetailsTextBox.Multiline = true;
this.DetailsTextBox.Name = "DetailsTextBox";
this.DetailsTextBox.ReadOnly = true;
this.DetailsTextBox.Size = new System.Drawing.Size(545, 349);
this.DetailsTextBox.TabIndex = 3;
this.DetailsTextBox.Text = "No error details are available.";
//
// TroubleshooterPanel
//
this.TroubleshooterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TroubleshooterPanel.AutoSize = true;
this.TroubleshooterPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.TroubleshooterPanel.BackColor = System.Drawing.SystemColors.InactiveCaption;
this.TroubleshooterPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.MainTableLayoutPanel.SetColumnSpan(this.TroubleshooterPanel, 2);
this.TroubleshooterPanel.ForeColor = System.Drawing.SystemColors.ControlText;
this.TroubleshooterPanel.Location = new System.Drawing.Point(10, 454);
this.TroubleshooterPanel.Margin = new System.Windows.Forms.Padding(0, 0, 0, 10);
this.TroubleshooterPanel.Name = "TroubleshooterPanel";
this.TroubleshooterPanel.Size = new System.Drawing.Size(567, 2);
this.TroubleshooterPanel.TabIndex = 2;
this.TroubleshooterPanel.Visible = false;
//
// ApiErrorWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.ClientSize = new System.Drawing.Size(587, 466);
this.Controls.Add(this.MainTableLayoutPanel);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(500, 500);
this.Name = "ApiErrorWindow";
this.Text = "API Error Details";
((System.ComponentModel.ISupportInitialize)(this.IconPictureBox)).EndInit();
this.MainTableLayoutPanel.ResumeLayout(false);
this.MainTableLayoutPanel.PerformLayout();
this.DetailsPanel.ResumeLayout(false);
this.DetailsPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label ErrorLabel;
private System.Windows.Forms.PictureBox IconPictureBox;
private System.Windows.Forms.TableLayoutPanel MainTableLayoutPanel;
private System.Windows.Forms.TextBox DetailsTextBox;
private System.Windows.Forms.Panel TroubleshooterPanel;
private System.Windows.Forms.LinkLabel CopyToClipboardLinkLabel;
private System.Windows.Forms.Panel DetailsPanel;
}
}
================================================
FILE: src/EVEMon/APIErrorHandling/APIErrorWindow.cs
================================================
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations.CCPAPI;
using EVEMon.Common.Helpers;
using EVEMon.Common.Net;
using EVEMon.Common.Notifications;
using EVEMon.Common.Serialization.Eve;
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace EVEMon.ApiErrorHandling
{
///
/// Displays an error window if appropriate a troubleshooter is displayed to help the user resolve the issue.
///
public partial class ApiErrorWindow : EVEMonForm
{
private readonly HttpTimeoutTroubleshooter m_httpTimeoutTroubleshooter = new HttpTimeoutTroubleshooter();
private APIErrorNotificationEventArgs m_notification;
private ApiErrorTroubleshooter m_troubleshooter;
private bool m_troubleshooterUsed;
///
/// Constructor
///
public ApiErrorWindow()
{
InitializeComponent();
}
///
/// Gets or sets the notification for this error.
///
internal APIErrorNotificationEventArgs Notification
{
get { return m_notification; }
set
{
if (value != null)
{
var exception = value.Result?.Exception;
string errorText = GetErrorLabelText(value);
m_notification = value;
ErrorLabel.Text = errorText;
// Several clients are getting TrustFailure for badly configured SSL
// certificates, provide better debugging info
if (errorText.ToLower().Contains("trustfailure"))
DetailsTextBox.Text = Properties.Resources.ErrorTrustFailure;
else if (exception != null)
DetailsTextBox.Text = exception.ToString();
DisplayTroubleshooter(exception);
}
}
}
///
/// Displays the troubleshooter.
///
/// The exception.
private void DisplayTroubleshooter(Exception exception)
{
TroubleshooterPanel.Visible = false;
m_troubleshooter = GetTroubleshooter(exception);
if (m_troubleshooter == null)
return;
TroubleshooterPanel.Visible = true;
TroubleshooterPanel.Controls.Add(m_troubleshooter);
m_troubleshooter.ErrorResolved += troubleshooter_ErrorResolved;
m_troubleshooter.Dock = DockStyle.Fill;
}
///
/// Gets the troubleshooter.
///
/// The exception.
/// A troubleshooter for the error message.
private ApiErrorTroubleshooter GetTroubleshooter(Exception exception)
{
var httpException = exception as HttpWebClientServiceException;
return httpException?.Status == HttpWebClientServiceExceptionStatus.Timeout ?
m_httpTimeoutTroubleshooter : null;
}
///
/// Handles the ErrorResolved event when a http timeout is displayed of the troubleshooter control.
///
/// The source of the event.
/// The instance containing the event data.
private void troubleshooter_ErrorResolved(object sender, ApiErrorTroubleshooterEventArgs e)
{
m_troubleshooterUsed = true;
if (e == null)
return;
if (!e.Resolved)
{
TroubleshooterPanel.BackColor = Color.DarkSalmon;
return;
}
EveMonClient.Notifications.Invalidate(new NotificationInvalidationEventArgs(
m_notification));
PerformAction(e.Action);
}
///
/// Performs the action.
///
/// The action.
private void PerformAction(ResolutionAction action)
{
switch (action)
{
case ResolutionAction.Close:
Close();
break;
case ResolutionAction.HideTroubleshooter:
TroubleshooterPanel.Hide();
break;
case ResolutionAction.None:
TroubleshooterPanel.BackColor = Color.PaleGreen;
break;
default:
throw new NotImplementedException();
}
}
///
/// Gets the error label text.
///
/// The value.
/// String representing the error.
private static string GetErrorLabelText(APIErrorNotificationEventArgs value)
{
if (value == null)
return "No error selected.";
return value.ToString() + Environment.NewLine + (value.Result == null ?
"No details were provided." : GetErrorLabelTextDetail(value.Result));
}
///
/// Gets the error label text detail.
///
/// The value.
private static string GetErrorLabelTextDetail(IAPIResult result)
{
switch (result.ErrorType)
{
case APIErrorType.None:
return "No error specified";
case APIErrorType.CCP:
return $"CCP Error: {result.ErrorMessage}";
case APIErrorType.Http:
return $"HTTP error: {result.ErrorMessage}";
case APIErrorType.Xml:
return $"XML error: {result.ErrorMessage}";
case APIErrorType.Json:
return $"XSLT error: {result.ErrorMessage}";
default:
throw new NotImplementedException();
}
}
///
/// On closing, disposes of the troubleshooter.
///
///
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
if (m_troubleshooter != null)
{
m_troubleshooter.Dispose();
m_troubleshooter = null;
}
}
///
/// Handles the LinkClicked event of the CopyToClipboardLinkLabel control.
///
/// The source of the event.
/// The instance containing the event data.
private void CopyToClipboardLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
StringBuilder builder = new StringBuilder();
builder.Append("EVEMon ");
builder.AppendLine(EveMonClient.FileVersionInfo.FileVersion);
builder.AppendLine().AppendLine("API Error:");
builder.AppendLine(GetErrorLabelText(Notification));
if (m_troubleshooter != null)
{
builder.AppendLine();
builder.Append("A troubleshooter was displayed " + (m_troubleshooterUsed ?
"and used." : "but not used."));
}
try
{
Clipboard.Clear();
Clipboard.SetText(builder.ToString(), TextDataFormat.Text);
}
catch (ExternalException ex)
{
// Occurs when another process is using the clipboard
ExceptionHandler.LogException(ex, true);
MessageBox.Show(Properties.Resources.ErrorClipboardFailure, "Error copying",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
================================================
FILE: src/EVEMon/APIErrorHandling/APIErrorWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
RK5CYII=
================================================
FILE: src/EVEMon/APIErrorHandling/HttpTimeoutTroubleshooter.Designer.cs
================================================
namespace EVEMon.ApiErrorHandling
{
partial class HttpTimeoutTroubleshooter
{
///
/// 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.MainTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.ExplanationLabel = new System.Windows.Forms.Label();
this.TimeoutLabel = new System.Windows.Forms.Label();
this.TimeoutDropDown = new System.Windows.Forms.ComboBox();
this.SetTimeoutButton = new System.Windows.Forms.Button();
this.MainTableLayoutPanel.SuspendLayout();
this.SuspendLayout();
//
// MainTableLayoutPanel
//
this.MainTableLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.MainTableLayoutPanel.AutoSize = true;
this.MainTableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.MainTableLayoutPanel.ColumnCount = 2;
this.MainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 28.57143F));
this.MainTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 71.42857F));
this.MainTableLayoutPanel.Controls.Add(this.ExplanationLabel, 0, 0);
this.MainTableLayoutPanel.Controls.Add(this.TimeoutLabel, 0, 1);
this.MainTableLayoutPanel.Controls.Add(this.TimeoutDropDown, 1, 1);
this.MainTableLayoutPanel.Controls.Add(this.SetTimeoutButton, 1, 2);
this.MainTableLayoutPanel.Location = new System.Drawing.Point(0, 0);
this.MainTableLayoutPanel.Name = "MainTableLayoutPanel";
this.MainTableLayoutPanel.RowCount = 3;
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.MainTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.MainTableLayoutPanel.Size = new System.Drawing.Size(357, 97);
this.MainTableLayoutPanel.TabIndex = 0;
//
// ExplanationLabel
//
this.ExplanationLabel.AutoSize = true;
this.MainTableLayoutPanel.SetColumnSpan(this.ExplanationLabel, 2);
this.ExplanationLabel.Location = new System.Drawing.Point(5, 5);
this.ExplanationLabel.Margin = new System.Windows.Forms.Padding(5);
this.ExplanationLabel.Name = "ExplanationLabel";
this.ExplanationLabel.Size = new System.Drawing.Size(343, 26);
this.ExplanationLabel.TabIndex = 0;
this.ExplanationLabel.Text = "The server EVEMon contacted did not respond in a timely manner, you can extend th" +
"e length of time EVEMon waits before giving up:";
//
// TimeoutLabel
//
this.TimeoutLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.TimeoutLabel.AutoSize = true;
this.TimeoutLabel.Location = new System.Drawing.Point(49, 41);
this.TimeoutLabel.Margin = new System.Windows.Forms.Padding(5);
this.TimeoutLabel.Name = "TimeoutLabel";
this.TimeoutLabel.Size = new System.Drawing.Size(48, 13);
this.TimeoutLabel.TabIndex = 1;
this.TimeoutLabel.Text = "Timeout:";
this.TimeoutLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// TimeoutDropDown
//
this.TimeoutDropDown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.TimeoutDropDown.Items.AddRange(new object[] {
"10 Seconds (Default)",
"15 Seconds",
"20 Seconds",
"30 Seconds",
"40 Seconds",
"50 Seconds",
"1 Minute"});
this.TimeoutDropDown.Location = new System.Drawing.Point(105, 39);
this.TimeoutDropDown.Name = "TimeoutDropDown";
this.TimeoutDropDown.Size = new System.Drawing.Size(140, 21);
this.TimeoutDropDown.TabIndex = 2;
//
// SetTimeoutButton
//
this.SetTimeoutButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.SetTimeoutButton.Location = new System.Drawing.Point(248, 66);
this.SetTimeoutButton.Name = "SetTimeoutButton";
this.SetTimeoutButton.Size = new System.Drawing.Size(106, 28);
this.SetTimeoutButton.TabIndex = 3;
this.SetTimeoutButton.Text = "Set Timeout";
this.SetTimeoutButton.UseVisualStyleBackColor = true;
this.SetTimeoutButton.Click += new System.EventHandler(this.SetTimeoutButton_Click);
//
// HttpTimeoutTroubleshooter
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.Controls.Add(this.MainTableLayoutPanel);
this.Name = "HttpTimeoutTroubleshooter";
this.Size = new System.Drawing.Size(358, 100);
this.MainTableLayoutPanel.ResumeLayout(false);
this.MainTableLayoutPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TableLayoutPanel MainTableLayoutPanel;
private System.Windows.Forms.Label ExplanationLabel;
private System.Windows.Forms.Label TimeoutLabel;
private System.Windows.Forms.ComboBox TimeoutDropDown;
private System.Windows.Forms.Button SetTimeoutButton;
}
}
================================================
FILE: src/EVEMon/APIErrorHandling/HttpTimeoutTroubleshooter.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.SettingsObjects;
using EVEMon.Common.Extensions;
namespace EVEMon.ApiErrorHandling
{
///
/// Http Timeout Troubleshooter displays when a HTTP Timeout has occurred.
///
public partial class HttpTimeoutTroubleshooter : ApiErrorTroubleshooter
{
///
/// Initializes a new instance of the class.
///
public HttpTimeoutTroubleshooter()
{
InitializeComponent();
List options = new List();
UpdateSettings updateSettings = new UpdateSettings();
// Lets add 10 - 60 to the list
for (int i = 10; i <= 60; i += 10)
{
string text = string.Empty;
if (i == updateSettings.HttpTimeout)
text = "Default";
if (i == Settings.Updates.HttpTimeout)
text = "Current";
options.Add(new TimeoutOption(i, text));
}
// If the current is set to something odd we add it and sort by Seconds
if (options.All(x => x.Seconds != Settings.Updates.HttpTimeout))
options.Add(new TimeoutOption(Settings.Updates.HttpTimeout, "Current"));
// If the default is not in the list we add it
if (options.All(x => x.Seconds != updateSettings.HttpTimeout))
options.Add(new TimeoutOption(updateSettings.HttpTimeout, "Default"));
options.Sort((a, b) => a.Seconds.CompareTo(b.Seconds));
// Databind
TimeoutDropDown.DataSource = options;
TimeoutDropDown.DisplayMember = "Label";
TimeoutDropDown.ValueMember = "Seconds";
}
///
/// Handles the Click event of the SetTimeoutButton control.
///
/// The source of the event.
/// The instance containing the event data.
private void SetTimeoutButton_Click(object sender, EventArgs e)
{
Settings.Updates.HttpTimeout = (int)TimeoutDropDown.SelectedValue;
OnErrorResolved(ResolutionAction.Close);
}
///
/// Private class to store and format suitable time spans.
///
private class TimeoutOption
{
private readonly string m_text;
///
/// Initializes a new instance of the class.
///
/// The seconds.
/// The text.
public TimeoutOption(int seconds, string text)
{
Seconds = seconds;
m_text = text;
}
///
/// Gets or sets the seconds.
///
/// The seconds.
public int Seconds { get; }
///
/// Gets the label.
///
/// The label.
public string Label
{
get
{
StringBuilder builder = new StringBuilder();
if (Seconds % 60 == 0)
{
int minutes = Seconds / 60;
builder.Append($"{minutes} Minute{(minutes.S())}");
}
else
builder.Append($"{Seconds} Seconds");
if (!string.IsNullOrEmpty(m_text))
builder.Append($" ({m_text})");
return builder.ToString();
}
}
}
}
}
================================================
FILE: src/EVEMon/APIErrorHandling/HttpTimeoutTroubleshooter.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: src/EVEMon/About/AboutWindow.Designer.cs
================================================
namespace EVEMon.About
{
partial class AboutWindow
{
///
/// 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(AboutWindow));
this.LegalLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.GplLabel = new System.Windows.Forms.Label();
this.HeaderLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.LogoPictureBox = new System.Windows.Forms.PictureBox();
this.VerCopyLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.EVEMonLabel = new System.Windows.Forms.Label();
this.VersionLabel = new System.Windows.Forms.Label();
this.CopyrightLabel = new System.Windows.Forms.Label();
this.DevelopmentTeamLabel = new System.Windows.Forms.Label();
this.HomePageLinkLabel = new System.Windows.Forms.LinkLabel();
this.BodyLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.leftPanel = new System.Windows.Forms.FlowLayoutPanel();
this.AuthorsLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.CreatedByLabel = new System.Windows.Forms.Label();
this.ContinuedByLabel = new System.Windows.Forms.Label();
this.DonationsLabel = new System.Windows.Forms.Label();
this.DevContribLabel = new System.Windows.Forms.Label();
this.devsList = new System.Windows.Forms.ListView();
this.CredentialsLabels = new System.Windows.Forms.Label();
this.credentialsFlowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.ccpGamesLinkLabel = new System.Windows.Forms.LinkLabel();
this.ccpDocsLinkLabel = new System.Windows.Forms.LinkLabel();
this.bitbucketLinkLabel = new System.Windows.Forms.LinkLabel();
this.gitHubLinkLabel = new System.Windows.Forms.LinkLabel();
this.eveMarketerLinkLabel = new System.Windows.Forms.LinkLabel();
this.eveMarketDataLinkLabel = new System.Windows.Forms.LinkLabel();
this.googleApisLinkLabel = new System.Windows.Forms.LinkLabel();
this.dropboxSDKLinkLabel = new System.Windows.Forms.LinkLabel();
this.oneDriveSDKLinkLabel = new System.Windows.Forms.LinkLabel();
this.lironLeviLinkLabel = new System.Windows.Forms.LinkLabel();
this.battleClinicLinkLabel = new System.Windows.Forms.LinkLabel();
this.stackOverflowLinkLabel = new System.Windows.Forms.LinkLabel();
this.forgotLabel = new System.Windows.Forms.Label();
this.LegalLayoutPanel.SuspendLayout();
this.HeaderLayoutPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.LogoPictureBox)).BeginInit();
this.VerCopyLayoutPanel.SuspendLayout();
this.BodyLayoutPanel.SuspendLayout();
this.leftPanel.SuspendLayout();
this.AuthorsLayoutPanel.SuspendLayout();
this.credentialsFlowLayoutPanel.SuspendLayout();
this.SuspendLayout();
//
// LegalLayoutPanel
//
this.LegalLayoutPanel.AutoSize = true;
this.LegalLayoutPanel.Controls.Add(this.GplLabel);
this.LegalLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.LegalLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.LegalLayoutPanel.Location = new System.Drawing.Point(0, 100);
this.LegalLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
this.LegalLayoutPanel.Name = "LegalLayoutPanel";
this.LegalLayoutPanel.Size = new System.Drawing.Size(307, 221);
this.LegalLayoutPanel.TabIndex = 10;
//
// GplLabel
//
this.GplLabel.AutoSize = true;
this.GplLabel.Location = new System.Drawing.Point(3, 9);
this.GplLabel.Margin = new System.Windows.Forms.Padding(3, 9, 3, 30);
this.GplLabel.Name = "GplLabel";
this.GplLabel.Size = new System.Drawing.Size(301, 182);
this.GplLabel.TabIndex = 6;
this.GplLabel.Text = resources.GetString("GplLabel.Text");
//
// HeaderLayoutPanel
//
this.HeaderLayoutPanel.AutoSize = true;
this.HeaderLayoutPanel.Controls.Add(this.LogoPictureBox);
this.HeaderLayoutPanel.Controls.Add(this.VerCopyLayoutPanel);
this.HeaderLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.HeaderLayoutPanel.Location = new System.Drawing.Point(0, 0);
this.HeaderLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
this.HeaderLayoutPanel.Name = "HeaderLayoutPanel";
this.HeaderLayoutPanel.Size = new System.Drawing.Size(251, 100);
this.HeaderLayoutPanel.TabIndex = 0;
this.HeaderLayoutPanel.WrapContents = false;
//
// LogoPictureBox
//
this.LogoPictureBox.Dock = System.Windows.Forms.DockStyle.Top;
this.LogoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("LogoPictureBox.Image")));
this.LogoPictureBox.Location = new System.Drawing.Point(0, 0);
this.LogoPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.LogoPictureBox.Name = "LogoPictureBox";
this.LogoPictureBox.Size = new System.Drawing.Size(100, 100);
this.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.LogoPictureBox.TabIndex = 7;
this.LogoPictureBox.TabStop = false;
//
// VerCopyLayoutPanel
//
this.VerCopyLayoutPanel.AutoSize = true;
this.VerCopyLayoutPanel.Controls.Add(this.EVEMonLabel);
this.VerCopyLayoutPanel.Controls.Add(this.VersionLabel);
this.VerCopyLayoutPanel.Controls.Add(this.CopyrightLabel);
this.VerCopyLayoutPanel.Controls.Add(this.DevelopmentTeamLabel);
this.VerCopyLayoutPanel.Controls.Add(this.HomePageLinkLabel);
this.VerCopyLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.VerCopyLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.VerCopyLayoutPanel.Location = new System.Drawing.Point(100, 0);
this.VerCopyLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
this.VerCopyLayoutPanel.Name = "VerCopyLayoutPanel";
this.VerCopyLayoutPanel.Padding = new System.Windows.Forms.Padding(0, 17, 0, 0);
this.VerCopyLayoutPanel.Size = new System.Drawing.Size(151, 100);
this.VerCopyLayoutPanel.TabIndex = 8;
this.VerCopyLayoutPanel.WrapContents = false;
//
// EVEMonLabel
//
this.EVEMonLabel.AutoSize = true;
this.EVEMonLabel.Location = new System.Drawing.Point(3, 17);
this.EVEMonLabel.Name = "EVEMonLabel";
this.EVEMonLabel.Size = new System.Drawing.Size(49, 13);
this.EVEMonLabel.TabIndex = 0;
this.EVEMonLabel.Text = "EVEMon";
//
// VersionLabel
//
this.VersionLabel.AutoSize = true;
this.VersionLabel.Location = new System.Drawing.Point(3, 30);
this.VersionLabel.Name = "VersionLabel";
this.VersionLabel.Size = new System.Drawing.Size(59, 13);
this.VersionLabel.TabIndex = 1;
this.VersionLabel.Text = "Version {0}";
//
// CopyrightLabel
//
this.CopyrightLabel.AutoSize = true;
this.CopyrightLabel.Location = new System.Drawing.Point(3, 43);
this.CopyrightLabel.Name = "CopyrightLabel";
this.CopyrightLabel.Size = new System.Drawing.Size(107, 13);
this.CopyrightLabel.TabIndex = 5;
this.CopyrightLabel.Text = "Copyright 2006-{0}";
//
// DevelopmentTeamLabel
//
this.DevelopmentTeamLabel.AutoSize = true;
this.DevelopmentTeamLabel.Location = new System.Drawing.Point(3, 56);
this.DevelopmentTeamLabel.Name = "DevelopmentTeamLabel";
this.DevelopmentTeamLabel.Size = new System.Drawing.Size(145, 13);
this.DevelopmentTeamLabel.TabIndex = 6;
this.DevelopmentTeamLabel.Text = "EVEMon Development Team";
//
// HomePageLinkLabel
//
this.HomePageLinkLabel.AutoSize = true;
this.HomePageLinkLabel.Location = new System.Drawing.Point(3, 69);
this.HomePageLinkLabel.Name = "HomePageLinkLabel";
this.HomePageLinkLabel.Size = new System.Drawing.Size(38, 13);
this.HomePageLinkLabel.TabIndex = 0;
this.HomePageLinkLabel.TabStop = true;
this.HomePageLinkLabel.Text = "http://";
this.HomePageLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.HomePageLinkLabel_LinkClicked);
//
// BodyLayoutPanel
//
this.BodyLayoutPanel.AutoSize = true;
this.BodyLayoutPanel.ColumnCount = 3;
this.BodyLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 53.59629F));
this.BodyLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.BodyLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 46.40371F));
this.BodyLayoutPanel.Controls.Add(this.leftPanel, 0, 0);
this.BodyLayoutPanel.Controls.Add(this.DevContribLabel, 1, 0);
this.BodyLayoutPanel.Controls.Add(this.devsList, 1, 1);
this.BodyLayoutPanel.Controls.Add(this.CredentialsLabels, 2, 0);
this.BodyLayoutPanel.Controls.Add(this.credentialsFlowLayoutPanel, 2, 1);
this.BodyLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.BodyLayoutPanel.Location = new System.Drawing.Point(9, 9);
this.BodyLayoutPanel.Name = "BodyLayoutPanel";
this.BodyLayoutPanel.RowCount = 2;
this.BodyLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.BodyLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.BodyLayoutPanel.Size = new System.Drawing.Size(779, 403);
this.BodyLayoutPanel.TabIndex = 11;
//
// leftPanel
//
this.leftPanel.Controls.Add(this.HeaderLayoutPanel);
this.leftPanel.Controls.Add(this.LegalLayoutPanel);
this.leftPanel.Controls.Add(this.AuthorsLayoutPanel);
this.leftPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.leftPanel.Location = new System.Drawing.Point(3, 3);
this.leftPanel.Name = "leftPanel";
this.BodyLayoutPanel.SetRowSpan(this.leftPanel, 2);
this.leftPanel.Size = new System.Drawing.Size(313, 397);
this.leftPanel.TabIndex = 7;
//
// AuthorsLayoutPanel
//
this.AuthorsLayoutPanel.AutoSize = true;
this.AuthorsLayoutPanel.Controls.Add(this.CreatedByLabel);
this.AuthorsLayoutPanel.Controls.Add(this.ContinuedByLabel);
this.AuthorsLayoutPanel.Controls.Add(this.DonationsLabel);
this.AuthorsLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.AuthorsLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.AuthorsLayoutPanel.Location = new System.Drawing.Point(0, 321);
this.AuthorsLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
this.AuthorsLayoutPanel.Name = "AuthorsLayoutPanel";
this.AuthorsLayoutPanel.Size = new System.Drawing.Size(285, 39);
this.AuthorsLayoutPanel.TabIndex = 0;
this.AuthorsLayoutPanel.WrapContents = false;
//
// CreatedByLabel
//
this.CreatedByLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.CreatedByLabel.AutoSize = true;
this.CreatedByLabel.Location = new System.Drawing.Point(3, 0);
this.CreatedByLabel.Name = "CreatedByLabel";
this.CreatedByLabel.Size = new System.Drawing.Size(279, 13);
this.CreatedByLabel.TabIndex = 2;
this.CreatedByLabel.Text = "Originally created by Timothy \'Six Anari\' Fries of Goonfleet.";
//
// ContinuedByLabel
//
this.ContinuedByLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.ContinuedByLabel.AutoSize = true;
this.ContinuedByLabel.Location = new System.Drawing.Point(3, 13);
this.ContinuedByLabel.Name = "ContinuedByLabel";
this.ContinuedByLabel.Size = new System.Drawing.Size(257, 13);
this.ContinuedByLabel.TabIndex = 3;
this.ContinuedByLabel.Text = "Continued by the listed \'Developers and contributors\'.";
//
// DonationsLabel
//
this.DonationsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.DonationsLabel.AutoSize = true;
this.DonationsLabel.Location = new System.Drawing.Point(3, 26);
this.DonationsLabel.Name = "DonationsLabel";
this.DonationsLabel.Size = new System.Drawing.Size(211, 13);
this.DonationsLabel.TabIndex = 4;
this.DonationsLabel.Text = "Donations of ISK are always appreciated. ;)";
//
// DevContribLabel
//
this.DevContribLabel.AutoSize = true;
this.DevContribLabel.Location = new System.Drawing.Point(322, 0);
this.DevContribLabel.Name = "DevContribLabel";
this.DevContribLabel.Size = new System.Drawing.Size(140, 13);
this.DevContribLabel.TabIndex = 8;
this.DevContribLabel.Text = "Developers and contributors";
//
// devsList
//
this.devsList.Dock = System.Windows.Forms.DockStyle.Fill;
this.devsList.FullRowSelect = true;
this.devsList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.devsList.Location = new System.Drawing.Point(322, 16);
this.devsList.MultiSelect = false;
this.devsList.Name = "devsList";
this.devsList.Size = new System.Drawing.Size(176, 384);
this.devsList.TabIndex = 9;
this.devsList.UseCompatibleStateImageBehavior = false;
this.devsList.View = System.Windows.Forms.View.Details;
//
// CredentialsLabels
//
this.CredentialsLabels.AutoSize = true;
this.CredentialsLabels.Location = new System.Drawing.Point(504, 0);
this.CredentialsLabels.Name = "CredentialsLabels";
this.CredentialsLabels.Size = new System.Drawing.Size(183, 13);
this.CredentialsLabels.TabIndex = 10;
this.CredentialsLabels.Text = "External contributions and credentials";
//
// credentialsFlowLayoutPanel
//
this.credentialsFlowLayoutPanel.Controls.Add(this.ccpGamesLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.ccpDocsLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.bitbucketLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.gitHubLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.eveMarketerLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.eveMarketDataLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.googleApisLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.dropboxSDKLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.oneDriveSDKLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.lironLeviLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.battleClinicLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.stackOverflowLinkLabel);
this.credentialsFlowLayoutPanel.Controls.Add(this.forgotLabel);
this.credentialsFlowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.credentialsFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.credentialsFlowLayoutPanel.Location = new System.Drawing.Point(504, 16);
this.credentialsFlowLayoutPanel.Name = "credentialsFlowLayoutPanel";
this.credentialsFlowLayoutPanel.Size = new System.Drawing.Size(272, 384);
this.credentialsFlowLayoutPanel.TabIndex = 11;
//
// ccpGamesLinkLabel
//
this.ccpGamesLinkLabel.AutoSize = true;
this.ccpGamesLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.ccpGamesLinkLabel.Location = new System.Drawing.Point(0, 0);
this.ccpGamesLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.ccpGamesLinkLabel.Name = "ccpGamesLinkLabel";
this.ccpGamesLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.ccpGamesLinkLabel.Size = new System.Drawing.Size(235, 32);
this.ccpGamesLinkLabel.TabIndex = 7;
this.ccpGamesLinkLabel.Text = "CCP Games for their efforts towards community developers.";
this.ccpGamesLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// ccpDocsLinkLabel
//
this.ccpDocsLinkLabel.AutoSize = true;
this.ccpDocsLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.ccpDocsLinkLabel.Location = new System.Drawing.Point(0, 32);
this.ccpDocsLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.ccpDocsLinkLabel.Name = "ccpDocsLinkLabel";
this.ccpDocsLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.ccpDocsLinkLabel.Size = new System.Drawing.Size(217, 19);
this.ccpDocsLinkLabel.TabIndex = 8;
this.ccpDocsLinkLabel.Text = "CCP 3rd party docs for their documentation.";
this.ccpDocsLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// bitbucketLinkLabel
//
this.bitbucketLinkLabel.AutoSize = true;
this.bitbucketLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.bitbucketLinkLabel.Location = new System.Drawing.Point(0, 51);
this.bitbucketLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.bitbucketLinkLabel.Name = "bitbucketLinkLabel";
this.bitbucketLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.bitbucketLinkLabel.Size = new System.Drawing.Size(165, 19);
this.bitbucketLinkLabel.TabIndex = 21;
this.bitbucketLinkLabel.Text = "Bitbucket for hosting the project.";
this.bitbucketLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// gitHubLinkLabel
//
this.gitHubLinkLabel.AutoSize = true;
this.gitHubLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.gitHubLinkLabel.Location = new System.Drawing.Point(0, 70);
this.gitHubLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.gitHubLinkLabel.Name = "gitHubLinkLabel";
this.gitHubLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.gitHubLinkLabel.Size = new System.Drawing.Size(238, 32);
this.gitHubLinkLabel.TabIndex = 22;
this.gitHubLinkLabel.Text = "GitHub for hosting the project and providing our representation site.";
this.gitHubLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// eveMarketerLinkLabel
//
this.eveMarketerLinkLabel.AutoSize = true;
this.eveMarketerLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.eveMarketerLinkLabel.Location = new System.Drawing.Point(0, 102);
this.eveMarketerLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.eveMarketerLinkLabel.Name = "eveMarketerLinkLabel";
this.eveMarketerLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.eveMarketerLinkLabel.Size = new System.Drawing.Size(216, 19);
this.eveMarketerLinkLabel.TabIndex = 12;
this.eveMarketerLinkLabel.Text = "EVEMarketer for their market data and API.";
this.eveMarketerLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// eveMarketDataLinkLabel
//
this.eveMarketDataLinkLabel.AutoSize = true;
this.eveMarketDataLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.eveMarketDataLinkLabel.Location = new System.Drawing.Point(0, 121);
this.eveMarketDataLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.eveMarketDataLinkLabel.Name = "eveMarketDataLinkLabel";
this.eveMarketDataLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.eveMarketDataLinkLabel.Size = new System.Drawing.Size(233, 19);
this.eveMarketDataLinkLabel.TabIndex = 19;
this.eveMarketDataLinkLabel.Text = "EVE-MarketData for their market data and API.";
this.eveMarketDataLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// googleApisLinkLabel
//
this.googleApisLinkLabel.AutoSize = true;
this.googleApisLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.googleApisLinkLabel.Location = new System.Drawing.Point(0, 140);
this.googleApisLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.googleApisLinkLabel.Name = "googleApisLinkLabel";
this.googleApisLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.googleApisLinkLabel.Size = new System.Drawing.Size(132, 19);
this.googleApisLinkLabel.TabIndex = 10;
this.googleApisLinkLabel.Text = "Google for their API SDK.";
this.googleApisLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// dropboxSDKLinkLabel
//
this.dropboxSDKLinkLabel.AutoSize = true;
this.dropboxSDKLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.dropboxSDKLinkLabel.Location = new System.Drawing.Point(0, 159);
this.dropboxSDKLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.dropboxSDKLinkLabel.Name = "dropboxSDKLinkLabel";
this.dropboxSDKLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.dropboxSDKLinkLabel.Size = new System.Drawing.Size(138, 19);
this.dropboxSDKLinkLabel.TabIndex = 17;
this.dropboxSDKLinkLabel.Text = "Dropbox for their API SDK.";
this.dropboxSDKLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// oneDriveSDKLinkLabel
//
this.oneDriveSDKLinkLabel.AutoSize = true;
this.oneDriveSDKLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.oneDriveSDKLinkLabel.Location = new System.Drawing.Point(0, 178);
this.oneDriveSDKLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.oneDriveSDKLinkLabel.Name = "oneDriveSDKLinkLabel";
this.oneDriveSDKLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.oneDriveSDKLinkLabel.Size = new System.Drawing.Size(189, 19);
this.oneDriveSDKLinkLabel.TabIndex = 18;
this.oneDriveSDKLinkLabel.Text = "Microsoft OneDrive for their API SDK.";
this.oneDriveSDKLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// lironLeviLinkLabel
//
this.lironLeviLinkLabel.AutoSize = true;
this.lironLeviLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.lironLeviLinkLabel.Location = new System.Drawing.Point(0, 197);
this.lironLeviLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.lironLeviLinkLabel.Name = "lironLeviLinkLabel";
this.lironLeviLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.lironLeviLinkLabel.Size = new System.Drawing.Size(141, 19);
this.lironLeviLinkLabel.TabIndex = 15;
this.lironLeviLinkLabel.Text = "Liron Levi for his MultiPanel";
this.lironLeviLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// battleClinicLinkLabel
//
this.battleClinicLinkLabel.AutoSize = true;
this.battleClinicLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.battleClinicLinkLabel.Location = new System.Drawing.Point(0, 216);
this.battleClinicLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.battleClinicLinkLabel.Name = "battleClinicLinkLabel";
this.battleClinicLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.battleClinicLinkLabel.Size = new System.Drawing.Size(270, 32);
this.battleClinicLinkLabel.TabIndex = 20;
this.battleClinicLinkLabel.Text = "BattleClinic, especially SghnDubh and MrCue, and the rest of the staff for the de" +
"cade long support.";
//
// stackOverflowLinkLabel
//
this.stackOverflowLinkLabel.AutoSize = true;
this.stackOverflowLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.stackOverflowLinkLabel.Location = new System.Drawing.Point(0, 248);
this.stackOverflowLinkLabel.Margin = new System.Windows.Forms.Padding(0);
this.stackOverflowLinkLabel.Name = "stackOverflowLinkLabel";
this.stackOverflowLinkLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.stackOverflowLinkLabel.Size = new System.Drawing.Size(264, 32);
this.stackOverflowLinkLabel.TabIndex = 16;
this.stackOverflowLinkLabel.Text = "The users of Stack Overflow who contributed advice and code snippits.";
this.stackOverflowLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabel_LinkClicked);
//
// forgotLabel
//
this.forgotLabel.AutoSize = true;
this.forgotLabel.Location = new System.Drawing.Point(0, 280);
this.forgotLabel.Margin = new System.Windows.Forms.Padding(0);
this.forgotLabel.Name = "forgotLabel";
this.forgotLabel.Padding = new System.Windows.Forms.Padding(5, 3, 0, 3);
this.forgotLabel.Size = new System.Drawing.Size(266, 58);
this.forgotLabel.TabIndex = 14;
this.forgotLabel.Text = "And also the ones we forgot, the ones who lurk in the shadows of the forums to he" +
"lp us deal with users, all the people who reported bugs to the forums and the on" +
"es who dared to test our betas.";
//
// AboutWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.SystemColors.Window;
this.ClientSize = new System.Drawing.Size(797, 421);
this.Controls.Add(this.BodyLayoutPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "AboutWindow";
this.Padding = new System.Windows.Forms.Padding(9);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "About EVEMon";
this.LegalLayoutPanel.ResumeLayout(false);
this.LegalLayoutPanel.PerformLayout();
this.HeaderLayoutPanel.ResumeLayout(false);
this.HeaderLayoutPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.LogoPictureBox)).EndInit();
this.VerCopyLayoutPanel.ResumeLayout(false);
this.VerCopyLayoutPanel.PerformLayout();
this.BodyLayoutPanel.ResumeLayout(false);
this.BodyLayoutPanel.PerformLayout();
this.leftPanel.ResumeLayout(false);
this.leftPanel.PerformLayout();
this.AuthorsLayoutPanel.ResumeLayout(false);
this.AuthorsLayoutPanel.PerformLayout();
this.credentialsFlowLayoutPanel.ResumeLayout(false);
this.credentialsFlowLayoutPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.FlowLayoutPanel LegalLayoutPanel;
private System.Windows.Forms.FlowLayoutPanel HeaderLayoutPanel;
private System.Windows.Forms.PictureBox LogoPictureBox;
private System.Windows.Forms.FlowLayoutPanel VerCopyLayoutPanel;
private System.Windows.Forms.Label EVEMonLabel;
private System.Windows.Forms.Label VersionLabel;
private System.Windows.Forms.Label CopyrightLabel;
private System.Windows.Forms.LinkLabel HomePageLinkLabel;
private System.Windows.Forms.Label GplLabel;
private System.Windows.Forms.TableLayoutPanel BodyLayoutPanel;
private System.Windows.Forms.FlowLayoutPanel AuthorsLayoutPanel;
private System.Windows.Forms.Label CreatedByLabel;
private System.Windows.Forms.Label ContinuedByLabel;
private System.Windows.Forms.Label DonationsLabel;
private System.Windows.Forms.FlowLayoutPanel leftPanel;
private System.Windows.Forms.Label DevContribLabel;
private System.Windows.Forms.ListView devsList;
private System.Windows.Forms.Label CredentialsLabels;
private System.Windows.Forms.FlowLayoutPanel credentialsFlowLayoutPanel;
private System.Windows.Forms.LinkLabel ccpGamesLinkLabel;
private System.Windows.Forms.LinkLabel ccpDocsLinkLabel;
private System.Windows.Forms.LinkLabel googleApisLinkLabel;
private System.Windows.Forms.LinkLabel eveMarketerLinkLabel;
private System.Windows.Forms.Label forgotLabel;
private System.Windows.Forms.LinkLabel lironLeviLinkLabel;
private System.Windows.Forms.LinkLabel stackOverflowLinkLabel;
private System.Windows.Forms.Label DevelopmentTeamLabel;
private System.Windows.Forms.LinkLabel dropboxSDKLinkLabel;
private System.Windows.Forms.LinkLabel eveMarketDataLinkLabel;
private System.Windows.Forms.LinkLabel oneDriveSDKLinkLabel;
private System.Windows.Forms.LinkLabel bitbucketLinkLabel;
private System.Windows.Forms.LinkLabel gitHubLinkLabel;
private System.Windows.Forms.LinkLabel battleClinicLinkLabel;
}
}
================================================
FILE: src/EVEMon/About/AboutWindow.cs
================================================
using System;
using System.Collections;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
namespace EVEMon.About
{
///
/// Displays the About Window (Help -> About) containing contrib,
/// legal and version information about the application.
///
public partial class AboutWindow : EVEMonForm
{
private readonly SortedList m_headers;
private readonly SortedList m_developersList;
///
/// Setup the list of developers and the standard font
///
public AboutWindow()
{
InitializeComponent();
devsList.SelectedIndexChanged += devsList_SelectedIndexChanged;
EVEMonLabel.Font = FontFactory.GetDefaultFont(8.25F, FontStyle.Bold);
DevContribLabel.Font = FontFactory.GetDefaultFont(8.25F, FontStyle.Bold);
CredentialsLabels.Font = FontFactory.GetDefaultFont(8.25F, FontStyle.Bold);
// list of headings
m_headers = new SortedList
{
{ 1, "Guru" },
{ 2, "Guru (Retired)" },
{ 3, "Consultants"},
{ 4, "Developers" },
{ 5, "Developers (Retired)" },
{ 6, "Contributors" }
};
// list of developers by heading
m_developersList = new SortedList
{
// EVEMon Guru
{ "Blitz Bandis", 1 },
// Guru (Retired)
{ "Jimi", 2 },
{ "Araan Sunn", 2 },
{ "Six Anari", 2 },
{ "Anders Chydenius", 2 },
{ "Brad Stone", 2 },
{ "Eewec Ourbyni", 2 },
{ "Richard Slater", 2 },
{ "Vehlin", 2 },
// Consultants
{ "MrCue", 3 },
{ "Nericus Demeeny", 3 },
{ "Tonto Auri", 3 },
// Developers
{ "Peter Han", 4 },
// Developers (Retired)
{ "Collin Grady", 5 },
{ "DCShadow", 5 },
{ "DonQuiche", 5 },
{ "Grauw", 5 },
{ "Jalon Mevek", 5 },
{ "Labogh", 5 },
{ "romanl", 5 },
{ "Safrax", 5 },
{ "Stevil Knevil", 5 },
{ "TheBelgarion", 5 },
// Contributors
{ "Abomb", 6 },
{ "Adam Butt", 6 },
{ "Aethlyn", 6 },
{ "Aevum Decessus", 6 },
{ "aliceturing", 6 },
{ "aMUSiC", 6 },
{ "Arengor", 6 },
{ "ATGardner", 6 },
{ "Barend", 6 },
{ "berin", 6 },
{ "bugusnot", 6 },
{ "Candle", 6 },
{ "coeus", 6 },
{ "CrazyMahone", 6 },
{ "CyberTech", 6 },
{ "Derath Ellecon", 6 },
{ "Dariana", 6 },
{ "Eviro", 6 },
{ "exi", 6 },
{ "FangVV", 6 },
{ "Femaref", 6 },
{ "Flash", 6 },
{ "Galideeth", 6 },
{ "gareth", 6 },
{ "gavinl", 6 },
{ "GoneWacko", 6 },
{ "Good speed", 6 },
{ "happyslinky", 6 },
{ "Innocent Enemy", 6 },
{ "Jazzy_Josh", 6 },
{ "jdread", 6 },
{ "Jeff Zellner", 6 },
{ "jthiesen", 6 },
{ "justinian", 6 },
{ "Kelos Pelmand", 6 },
{ "Kingdud", 6 },
{ "Kw4h", 6 },
{ "Kunnis Niam", 6 },
{ "lerthe61", 6 },
{ "Lexiica", 6 },
{ "Master of Dice", 6 },
{ "Maximilian Kernbach", 6 },
{ "MaZ", 6 },
{ "mexx24", 6 },
{ "Michayel Lyon", 6 },
{ "mintoko", 6 },
{ "misterilla", 6 },
{ "Moq", 6 },
{ "morgangreenacre", 6 },
{ "Namistai", 6 },
{ "Nascent Nimbus", 6 },
{ "NetMage", 6 },
{ "Nagapito", 6 },
{ "Nilyen", 6 },
{ "Nimrel", 6 },
{ "Niom", 6 },
{ "Pharazon", 6 },
{ "Phoenix Flames", 6 },
{ "phorge", 6 },
{ "Protag", 6 },
{ "Optica", 6 },
{ "Quantix Blackstar", 6 },
{ "Risako", 6 },
{ "Ruldar", 6 },
{ "Safarian Lanar", 6 },
{ "scoobyrich", 6 },
{ "Sertan Deras", 6 },
{ "shaver", 6 },
{ "Shocky", 6 },
{ "Shwehan Juanis", 6 },
{ "skolima", 6 },
{ "Spiff Nutter", 6 },
{ "stiez", 6 },
{ "Subkahnshus", 6 },
{ "SyndicateAexeron", 6 },
{ "The_Assimilator", 6 },
{ "TheConstructor", 6 },
{ "Travis Puderbaugh", 6 },
{ "Trin", 6 },
{ "vardoj", 6 },
{ "Waste Land", 6 },
{ "wrok", 6 },
{ "xNomeda", 6 },
{ "ykoehler", 6 },
{ "Zarra Kri", 6 },
{ "Zofu", 6 }
};
}
///
/// Prevents the user to select an item in the list.
///
///
///
private void devsList_SelectedIndexChanged(object sender, EventArgs e)
{
if (devsList.SelectedItems.Count != 0)
devsList.SelectedItems.Clear();
}
///
/// Populates and adds links to the various labels and list
/// boxes on the form.
///
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
HomePageLinkLabel.Text = NetworkConstants.EVEMonMainPage;
CopyrightLabel.Text = string.Format(CultureConstants.DefaultCulture, CopyrightLabel.Text, DateTime.UtcNow.Year);
VersionLabel.Text = GetVersionText();
AddDevelopersToListView();
AddLinkToLabel(ccpGamesLinkLabel, "CCP Games", "http://www.ccpgames.com/");
AddLinkToLabel(ccpDocsLinkLabel, "CCP 3rd party docs", "https://eveonline-third-party-documentation.readthedocs.org/en/latest/");
AddLinkToLabel(bitbucketLinkLabel, "Bitbucket", "https://bitbucket.org/");
AddLinkToLabel(gitHubLinkLabel, "GitHub", "https://github.com/");
AddLinkToLabel(eveMarketerLinkLabel, "EVEMarketer", "http://www.evemarketer.com/");
AddLinkToLabel(eveMarketDataLinkLabel, "EVE-MarketData", "http://eve-marketdata.com/");
AddLinkToLabel(googleApisLinkLabel, "Google", "https://github.com/google/google-api-dotnet-client/");
AddLinkToLabel(dropboxSDKLinkLabel, "Dropbox", "https://github.com/dropbox/dropbox-sdk-dotnet/");
AddLinkToLabel(oneDriveSDKLinkLabel, "Microsoft OneDrive", "https://github.com/OneDrive/onedrive-sdk-csharp/");
AddLinkToLabel(lironLeviLinkLabel, "Liron Levi", "http://www.codeproject.com/Articles/37397/A-Multipanel-Control-in-C/");
AddLinkToLabel(stackOverflowLinkLabel, "Stack Overflow", "http://stackoverflow.com/");
}
///
/// Gets the version text.
///
///
private string GetVersionText()
{
FileVersionInfo version = EveMonClient.FileVersionInfo;
// Adds environment process info
VersionLabel.Text += $" ({(Environment.Is64BitProcess ? "64" : "32")} bit)";
// Returns the application product version (AssemblyInformationalVersion)
// or the application file version (AssemblyFileVersion)
// if the build is in SNAPSHOT
if (!EveMonClient.IsDebugBuild)
{
return string.Format(CultureConstants.InvariantCulture, VersionLabel.Text,
EveMonClient.IsSnapshotBuild ? version.FileVersion : version.ProductVersion);
}
// Returns the application file version (AssemblyFileVersion)
// and adds " (Debug)" to the version number if the build is in DEBUG
VersionLabel.Text += @" (Debug)";
return string.Format(CultureConstants.InvariantCulture, VersionLabel.Text, version.FileVersion);
}
///
/// Little function to allow us to add links to a link label
/// after the contents has been set, purely by the contained
/// text
///
///
/// At present this function only works on the first instance
/// of a string within the text property of the link label,
/// further insances will be ignored.
///
/// LinkLabel to act upon
/// text to make a link
/// URL for the link to point to
private static void AddLinkToLabel(LinkLabel label, string linkText, string url)
{
int start = label.Text.IndexOf(linkText, StringComparison.Ordinal);
int length = linkText.Length;
label.Links.Add(start, length, url);
}
///
/// Loops through the list of headings and developers and adds
/// them to the list box.
///
private void AddDevelopersToListView()
{
devsList.Columns.Add(new ColumnHeader());
// Set up the list of developers
for (int i = 0; i < m_headers.Count; i++)
{
ListViewGroup group = new ListViewGroup(m_headers.GetByIndex(i).ToString());
devsList.Groups.Add(group);
for (int j = 0; j < m_developersList.Count; j++)
{
if (!m_headers.GetKey(i).Equals(m_developersList.GetByIndex(j)))
continue;
ListViewItem item = new ListViewItem(m_developersList.GetKey(j).ToString(), group);
devsList.Items.Add(item);
}
}
devsList.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}
///
/// Handles the LinkClicked event of the llHomePage LinkLabel.
/// Navigates to the EVEMon website in a browser.
///
/// The source of the event.
/// The instance containing the event data.
private void HomePageLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Util.OpenURL(new Uri(NetworkConstants.EVEMonMainPage));
}
///
/// Handles the LinkClicked event of the IconSourceLinkLabel control.
///
/// The source of the event.
/// The instance containing the event data.
private void LinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (e.Link.LinkData.GetType() != typeof(string))
return;
try
{
Uri linkUri = new Uri(e.Link.LinkData.ToString());
Util.OpenURL(linkUri);
}
catch (UriFormatException ex)
{
// uri is malformed, never mind just ignore it
ExceptionHandler.LogException(ex, true);
}
}
}
}
================================================
FILE: src/EVEMon/About/AboutWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
This program is free software; you can redistribute it and/or modify it under the terms of version 2 the GNU General Public License as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterDeletionWindow.Designer.cs
================================================
namespace EVEMon.ApiCredentialsManagement
{
partial class CharacterDeletionWindow
{
///
/// 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(CharacterDeletionWindow));
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("123456");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("234567");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("3456789");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("123123123");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("455345");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("1234553234");
System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem("1235435");
System.Windows.Forms.ListViewItem listViewItem8 = new System.Windows.Forms.ListViewItem("12314124");
System.Windows.Forms.ListViewItem listViewItem9 = new System.Windows.Forms.ListViewItem("1235454");
System.Windows.Forms.ListViewItem listViewItem10 = new System.Windows.Forms.ListViewItem("45656456");
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.characterToRemoveLabel = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.cancelButton = new System.Windows.Forms.Button();
this.deleteButton = new System.Windows.Forms.Button();
this.noCharactersLabel = new System.Windows.Forms.Label();
this.esiKeysListView = new System.Windows.Forms.ListView();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(13, 13);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(32, 32);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// characterToRemoveLabel
//
this.characterToRemoveLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.characterToRemoveLabel.AutoSize = true;
this.characterToRemoveLabel.ForeColor = System.Drawing.SystemColors.ControlText;
this.characterToRemoveLabel.Location = new System.Drawing.Point(51, 22);
this.characterToRemoveLabel.Name = "characterToRemoveLabel";
this.characterToRemoveLabel.Size = new System.Drawing.Size(214, 13);
this.characterToRemoveLabel.TabIndex = 1;
this.characterToRemoveLabel.Text = "You are about to delete the character \"{0}\".";
this.characterToRemoveLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label2
//
this.label2.AutoSize = true;
this.label2.ForeColor = System.Drawing.Color.DarkRed;
this.label2.Location = new System.Drawing.Point(51, 44);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(168, 13);
this.label2.TabIndex = 2;
this.label2.Text = "All your data and plans will be lost!";
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(327, 142);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 3;
this.cancelButton.Text = "&Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// deleteButton
//
this.deleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.deleteButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.deleteButton.Location = new System.Drawing.Point(246, 142);
this.deleteButton.Name = "deleteButton";
this.deleteButton.Size = new System.Drawing.Size(75, 23);
this.deleteButton.TabIndex = 4;
this.deleteButton.Text = "&Delete";
this.deleteButton.UseVisualStyleBackColor = true;
this.deleteButton.Click += new System.EventHandler(this.deleteButton_Click);
//
// noCharactersLabel
//
this.noCharactersLabel.AutoSize = true;
this.noCharactersLabel.Location = new System.Drawing.Point(51, 66);
this.noCharactersLabel.Name = "noCharactersLabel";
this.noCharactersLabel.Size = new System.Drawing.Size(181, 13);
this.noCharactersLabel.TabIndex = 6;
this.noCharactersLabel.Text = "The ESI key{0} will also be removed:";
//
// esiKeysListView
//
this.esiKeysListView.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.esiKeysListView.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3,
listViewItem4,
listViewItem5,
listViewItem6,
listViewItem7,
listViewItem8,
listViewItem9,
listViewItem10});
this.esiKeysListView.Location = new System.Drawing.Point(238, 66);
this.esiKeysListView.Name = "esiKeysListView";
this.esiKeysListView.Size = new System.Drawing.Size(192, 94);
this.esiKeysListView.TabIndex = 7;
this.esiKeysListView.UseCompatibleStateImageBehavior = false;
this.esiKeysListView.View = System.Windows.Forms.View.List;
//
// CharacterDeletionWindow
//
this.AcceptButton = this.cancelButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.ClientSize = new System.Drawing.Size(414, 177);
this.Controls.Add(this.noCharactersLabel);
this.Controls.Add(this.deleteButton);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.label2);
this.Controls.Add(this.characterToRemoveLabel);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.esiKeysListView);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "CharacterDeletionWindow";
this.Text = "Delete Character";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label characterToRemoveLabel;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button deleteButton;
private System.Windows.Forms.Label noCharactersLabel;
private System.Windows.Forms.ListView esiKeysListView;
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterDeletionWindow.cs
================================================
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
using EVEMon.Common.Extensions;
namespace EVEMon.ApiCredentialsManagement
{
public partial class CharacterDeletionWindow : EVEMonForm
{
private readonly Character m_character;
private List m_esiKeys;
///
/// Constructor.
///
private CharacterDeletionWindow()
{
InitializeComponent();
characterToRemoveLabel.Font = FontFactory.GetFont("Tahoma", FontStyle.Bold);
}
///
/// Constructor.
///
///
public CharacterDeletionWindow(Character character)
: this()
{
m_character = character;
}
///
/// Occurs when the control loads.
///
/// The instance containing the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode)
return;
esiKeysListView.Items.Clear();
// Replaces end of text with character's name
characterToRemoveLabel.Text = string.Format(CultureConstants.DefaultCulture,
characterToRemoveLabel.Text, m_character.Name);
// Find the API keys bind only to this character
m_esiKeys = EveMonClient.ESIKeys.Select(apiKey => new
{
apiKey, identities = apiKey.CharacterIdentities
}).Where(apiKey => apiKey.identities.Count() == 1 && apiKey.identities.
Contains(m_character.Identity)).Select(apiKey => apiKey.apiKey).ToList();
esiKeysListView.Items.AddRange(m_esiKeys.Select(key => new ListViewItem(
key.ID.ToString(CultureConstants.DefaultCulture))).ToArray());
// Checks whether there will be no characters left after this deletion and hide/display the relevant labels
bool noCharactersLeft = m_esiKeys.Any() && m_character is CCPCharacter;
noCharactersLabel.Text = string.Format(CultureConstants.DefaultCulture,
noCharactersLabel.Text, m_esiKeys.Count.S());
noCharactersLabel.Visible = noCharactersLeft;
// Resize window if there is no ESI key to remove
if (!noCharactersLeft)
Size = new Size(Size.Width, Size.Height - esiKeysListView.Height / 2);
}
///
/// Delete button click.
///
///
///
private void deleteButton_Click(object sender, EventArgs e)
{
// Always clear the ESI keys since keys are locked to a character
// Note: Keep this order of removal
m_esiKeys.ForEach(apiKey => EveMonClient.ESIKeys.Remove(apiKey));
EveMonClient.Characters.Remove(m_character);
Close();
}
///
/// Closes the window.
///
///
///
private void cancelButton_Click(object sender, EventArgs e)
{
Close();
}
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterDeletionWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterImportationWindow.Designer.cs
================================================
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.Enumerations;
namespace EVEMon.ApiCredentialsManagement
{
partial class CharacterImportationWindow
{
///
/// 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.labelName = new System.Windows.Forms.Label();
this.labelErrorHeader = new System.Windows.Forms.Label();
this.urlRadio = new System.Windows.Forms.RadioButton();
this.urlTextBox = new System.Windows.Forms.TextBox();
this.fileRadio = new System.Windows.Forms.RadioButton();
this.fileTextBox = new System.Windows.Forms.TextBox();
this.fileButton = new System.Windows.Forms.Button();
this.urlThrobber = new EVEMon.Common.Controls.Throbber();
this.namePanel = new System.Windows.Forms.Panel();
this.nameTextBox = new System.Windows.Forms.TextBox();
this.errorPanel = new System.Windows.Forms.FlowLayoutPanel();
this.labelError = new System.Windows.Forms.Label();
this.okButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.delayQueryTimer = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.urlThrobber)).BeginInit();
this.namePanel.SuspendLayout();
this.errorPanel.SuspendLayout();
this.SuspendLayout();
//
// labelName
//
this.labelName.AutoSize = true;
this.labelName.Location = new System.Drawing.Point(5, 7);
this.labelName.Name = "labelName";
this.labelName.Size = new System.Drawing.Size(35, 13);
this.labelName.TabIndex = 0;
this.labelName.Text = "Name";
//
// labelErrorHeader
//
this.labelErrorHeader.AutoSize = true;
this.labelErrorHeader.ForeColor = System.Drawing.Color.DarkRed;
this.labelErrorHeader.Location = new System.Drawing.Point(3, 0);
this.labelErrorHeader.Name = "labelErrorHeader";
this.labelErrorHeader.Size = new System.Drawing.Size(260, 13);
this.labelErrorHeader.TabIndex = 8;
this.labelErrorHeader.Text = "An error occurred while trying to import this character :";
//
// urlRadio
//
this.urlRadio.AutoSize = true;
this.urlRadio.Checked = true;
this.urlRadio.Location = new System.Drawing.Point(13, 13);
this.urlRadio.Name = "urlRadio";
this.urlRadio.Size = new System.Drawing.Size(69, 17);
this.urlRadio.TabIndex = 0;
this.urlRadio.TabStop = true;
this.urlRadio.Text = "Use URL";
this.urlRadio.UseVisualStyleBackColor = true;
this.urlRadio.CheckedChanged += new System.EventHandler(this.radio_CheckedChanged);
//
// urlTextBox
//
this.urlTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.urlTextBox.Location = new System.Drawing.Point(85, 13);
this.urlTextBox.Name = "urlTextBox";
this.urlTextBox.Size = new System.Drawing.Size(457, 20);
this.urlTextBox.TabIndex = 1;
//
// fileRadio
//
this.fileRadio.AutoSize = true;
this.fileRadio.Location = new System.Drawing.Point(13, 49);
this.fileRadio.Name = "fileRadio";
this.fileRadio.Size = new System.Drawing.Size(63, 17);
this.fileRadio.TabIndex = 2;
this.fileRadio.TabStop = true;
this.fileRadio.Text = "Use File";
this.fileRadio.UseVisualStyleBackColor = true;
this.fileRadio.CheckedChanged += new System.EventHandler(this.radio_CheckedChanged);
//
// fileTextBox
//
this.fileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.fileTextBox.Location = new System.Drawing.Point(85, 49);
this.fileTextBox.Name = "fileTextBox";
this.fileTextBox.ReadOnly = true;
this.fileTextBox.Size = new System.Drawing.Size(457, 20);
this.fileTextBox.TabIndex = 3;
//
// fileButton
//
this.fileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.fileButton.Location = new System.Drawing.Point(548, 47);
this.fileButton.Name = "fileButton";
this.fileButton.Size = new System.Drawing.Size(29, 23);
this.fileButton.TabIndex = 4;
this.fileButton.Text = "...";
this.fileButton.UseVisualStyleBackColor = true;
this.fileButton.Click += new System.EventHandler(this.fileButton_Click);
//
// urlThrobber
//
this.urlThrobber.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.urlThrobber.Location = new System.Drawing.Point(548, 10);
this.urlThrobber.MaximumSize = new System.Drawing.Size(24, 24);
this.urlThrobber.MinimumSize = new System.Drawing.Size(24, 24);
this.urlThrobber.Name = "urlThrobber";
this.urlThrobber.Size = new System.Drawing.Size(24, 24);
this.urlThrobber.State = ThrobberState.Stopped;
this.urlThrobber.TabIndex = 5;
this.urlThrobber.TabStop = false;
//
// namePanel
//
this.namePanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.namePanel.Controls.Add(this.nameTextBox);
this.namePanel.Controls.Add(this.labelName);
this.namePanel.Location = new System.Drawing.Point(85, 87);
this.namePanel.Name = "namePanel";
this.namePanel.Size = new System.Drawing.Size(280, 31);
this.namePanel.TabIndex = 5;
//
// nameTextBox
//
this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.nameTextBox.Location = new System.Drawing.Point(45, 4);
this.nameTextBox.Name = "nameTextBox";
this.nameTextBox.Size = new System.Drawing.Size(232, 20);
this.nameTextBox.TabIndex = 1;
//
// errorPanel
//
this.errorPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.errorPanel.Controls.Add(this.labelErrorHeader);
this.errorPanel.Controls.Add(this.labelError);
this.errorPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.errorPanel.Location = new System.Drawing.Point(80, 87);
this.errorPanel.Name = "errorPanel";
this.errorPanel.Size = new System.Drawing.Size(492, 31);
this.errorPanel.TabIndex = 9;
//
// labelError
//
this.labelError.AutoSize = true;
this.labelError.ForeColor = System.Drawing.Color.DarkRed;
this.labelError.Location = new System.Drawing.Point(3, 13);
this.labelError.Name = "labelError";
this.labelError.Size = new System.Drawing.Size(35, 13);
this.labelError.TabIndex = 9;
this.labelError.Text = "label2";
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(416, 126);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(75, 23);
this.okButton.TabIndex = 6;
this.okButton.Text = "OK";
this.okButton.UseVisualStyleBackColor = true;
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(497, 126);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 7;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
//
// delayQueryTimer
//
this.delayQueryTimer.Interval = 400;
this.delayQueryTimer.Tick += new System.EventHandler(this.delayQueryTimer_Tick);
//
// CharacterImportationWindow
//
this.AcceptButton = this.okButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(589, 161);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.okButton);
this.Controls.Add(this.errorPanel);
this.Controls.Add(this.namePanel);
this.Controls.Add(this.urlThrobber);
this.Controls.Add(this.fileButton);
this.Controls.Add(this.fileTextBox);
this.Controls.Add(this.fileRadio);
this.Controls.Add(this.urlTextBox);
this.Controls.Add(this.urlRadio);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(597, 193);
this.Name = "CharacterImportationWindow";
this.Text = "Character Importation";
((System.ComponentModel.ISupportInitialize)(this.urlThrobber)).EndInit();
this.namePanel.ResumeLayout(false);
this.namePanel.PerformLayout();
this.errorPanel.ResumeLayout(false);
this.errorPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.RadioButton urlRadio;
private System.Windows.Forms.TextBox urlTextBox;
private System.Windows.Forms.RadioButton fileRadio;
private System.Windows.Forms.TextBox fileTextBox;
private System.Windows.Forms.Button fileButton;
private Throbber urlThrobber;
private System.Windows.Forms.Panel namePanel;
private System.Windows.Forms.TextBox nameTextBox;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Timer delayQueryTimer;
private System.Windows.Forms.FlowLayoutPanel errorPanel;
private System.Windows.Forms.Label labelError;
private System.Windows.Forms.Label labelErrorHeader;
private System.Windows.Forms.Label labelName;
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterImportationWindow.cs
================================================
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using EVEMon.Common.Collections.Global;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Models;
namespace EVEMon.ApiCredentialsManagement
{
///
/// A windows to import characters from files or urls.
///
public partial class CharacterImportationWindow : EVEMonForm
{
// When multiple downloads are fired, we only want to react to the latest one, this is done through versioning.
private int m_version;
private UriCharacterEventArgs m_args;
private UriCharacter m_uriCharacter;
///
/// Constructor for a new character creation.
///
public CharacterImportationWindow()
{
InitializeComponent();
errorPanel.Visible = false;
namePanel.Visible = false;
okButton.Enabled = false;
}
///
/// Constructor to update a character.
///
public CharacterImportationWindow(UriCharacter uriCharacter)
: this()
{
m_uriCharacter = uriCharacter;
}
///
/// On load, subscribe events.
///
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
urlTextBox.TextChanged += urlTextBox_TextChanged;
if (m_uriCharacter == null)
return;
if (m_uriCharacter.Uri.IsFile)
{
fileTextBox.Text = m_uriCharacter.Uri.ToString();
fileRadio.Checked = true;
}
else
{
urlTextBox.Text = m_uriCharacter.Uri.ToString();
urlRadio.Checked = true;
}
}
///
/// Enable or disable the proper controls when the user changes the radio buttons.
///
///
///
private void radio_CheckedChanged(object sender, EventArgs e)
{
urlTextBox.Enabled = urlRadio.Checked;
urlThrobber.Enabled = urlRadio.Checked;
fileButton.Enabled = fileRadio.Checked;
fileTextBox.Enabled = fileRadio.Checked;
}
///
/// When the users changes the url, we query from the web.
///
///
///
private void urlTextBox_TextChanged(object sender, EventArgs e)
{
delayQueryTimer.Stop();
delayQueryTimer.Start();
}
///
/// We would like to check the provided url anytime the url textbox changes but it would be stressful, so we only do it when the user didn't type
/// anything in the last 400ms. Once this timer expires, we do the check.
///
///
///
private async void delayQueryTimer_Tick(object sender, EventArgs e)
{
await TryUri(urlTextBox.Text);
}
///
/// When the users clicks the "..." button, we open a file selection dialog, then try to read the specified XML.
///
///
///
private async void fileButton_Click(object sender, EventArgs e)
{
using (OpenFileDialog form = new OpenFileDialog())
{
form.Title = @"Import character file";
form.Filter = @"CCP XML Character (*.xml)|*.xml";
form.FilterIndex = 0;
DialogResult dr = form.ShowDialog();
if (dr == DialogResult.Cancel)
return;
fileTextBox.Text = form.FileName;
fileRadio.Checked = true;
await TryUri(form.FileName);
}
}
///
/// Try to download a character XML from the given URI.
///
///
private async Task TryUri(string uri)
{
m_version++;
m_args = null;
// Update controls
okButton.Enabled = false;
namePanel.Visible = false;
errorPanel.Visible = false;
urlThrobber.State = ThrobberState.Rotating;
// Starts querying the web or the hard drive, and invokes the given callback on result
int version = m_version;
var result = await GlobalCharacterCollection.TryAddOrUpdateFromUriAsync(new Uri(uri));
if (version != m_version)
return;
urlThrobber.State = ThrobberState.Stopped;
// Was there an error ?
if (result.HasError)
{
okButton.Enabled = false;
errorPanel.Visible = true;
labelError.Text = result.Error;
return;
}
nameTextBox.Text = result.CharacterName;
namePanel.Visible = true;
okButton.Enabled = true;
m_args = result;
}
///
/// When the user clicks the OK button, we may have to generate the character
///
///
///
private void okButton_Click(object sender, EventArgs e)
{
// Shouldn't occur but, well...
if (m_args == null || m_args.HasError)
{
DialogResult = DialogResult.Cancel;
return;
}
// Generates or updates the character
if (m_uriCharacter == null)
m_uriCharacter = m_args.CreateCharacter();
else
m_args.UpdateCharacter(m_uriCharacter);
m_uriCharacter.Name = nameTextBox.Text;
DialogResult = DialogResult.OK;
}
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/CharacterImportationWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
17, 17
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyDeletionWindow.Designer.cs
================================================
namespace EVEMon.ApiCredentialsManagement
{
sealed partial class EsiKeyDeletionWindow
{
///
/// 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.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("John Doe");
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EsiKeyDeletionWindow));
this.deletionLabel = new System.Windows.Forms.Label();
this.cancelButton = new System.Windows.Forms.Button();
this.deleteButton = new System.Windows.Forms.Button();
this.charactersListView = new System.Windows.Forms.ListView();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.infoLabel = new System.Windows.Forms.Label();
this.deleteWarningLabel = new System.Windows.Forms.Label();
this.charactersListGroupBox = new System.Windows.Forms.GroupBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.charactersListGroupBox.SuspendLayout();
this.SuspendLayout();
//
// deletionLabel
//
this.deletionLabel.AutoSize = true;
this.deletionLabel.Location = new System.Drawing.Point(51, 22);
this.deletionLabel.Name = "deletionLabel";
this.deletionLabel.Size = new System.Drawing.Size(238, 13);
this.deletionLabel.TabIndex = 4;
this.deletionLabel.Text = "You are about to delete the ESI key with ID : {0}.";
this.deletionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(435, 180);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 0;
this.cancelButton.Text = "&Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
//
// deleteButton
//
this.deleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.deleteButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.deleteButton.Location = new System.Drawing.Point(354, 180);
this.deleteButton.Name = "deleteButton";
this.deleteButton.Size = new System.Drawing.Size(75, 23);
this.deleteButton.TabIndex = 1;
this.deleteButton.Text = "&Delete";
this.deleteButton.UseVisualStyleBackColor = true;
this.deleteButton.Click += new System.EventHandler(this.deleteButton_Click);
//
// charactersListView
//
this.charactersListView.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.charactersListView.CheckBoxes = true;
listViewItem1.StateImageIndex = 0;
this.charactersListView.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1});
this.charactersListView.Location = new System.Drawing.Point(308, 28);
this.charactersListView.Name = "charactersListView";
this.charactersListView.Size = new System.Drawing.Size(181, 77);
this.charactersListView.TabIndex = 2;
this.charactersListView.UseCompatibleStateImageBehavior = false;
this.charactersListView.View = System.Windows.Forms.View.List;
//
// pictureBox
//
this.pictureBox.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox.Image")));
this.pictureBox.Location = new System.Drawing.Point(13, 13);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(32, 32);
this.pictureBox.TabIndex = 3;
this.pictureBox.TabStop = false;
//
// infoLabel
//
this.infoLabel.Location = new System.Drawing.Point(6, 28);
this.infoLabel.Name = "infoLabel";
this.infoLabel.Size = new System.Drawing.Size(296, 48);
this.infoLabel.TabIndex = 6;
this.infoLabel.Text = "If you choose to leave your character, it will be displayed as cached and automat" +
"ically reconnected once it is found on another one of your ESI keys.";
//
// deleteWarningLabel
//
this.deleteWarningLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.deleteWarningLabel.ForeColor = System.Drawing.Color.DarkRed;
this.deleteWarningLabel.Location = new System.Drawing.Point(6, 90);
this.deleteWarningLabel.Name = "deleteWarningLabel";
this.deleteWarningLabel.Size = new System.Drawing.Size(304, 15);
this.deleteWarningLabel.TabIndex = 7;
this.deleteWarningLabel.Text = "Removing characters means losing all their data and plans!";
//
// charactersListGroupBox
//
this.charactersListGroupBox.Controls.Add(this.deleteWarningLabel);
this.charactersListGroupBox.Controls.Add(this.infoLabel);
this.charactersListGroupBox.Controls.Add(this.charactersListView);
this.charactersListGroupBox.Location = new System.Drawing.Point(15, 60);
this.charactersListGroupBox.Name = "charactersListGroupBox";
this.charactersListGroupBox.Size = new System.Drawing.Size(495, 114);
this.charactersListGroupBox.TabIndex = 8;
this.charactersListGroupBox.TabStop = false;
this.charactersListGroupBox.Text = "Select the characters you want to remove";
//
// EsiKeyDeletionWindow
//
this.AcceptButton = this.cancelButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(522, 215);
this.Controls.Add(this.charactersListGroupBox);
this.Controls.Add(this.deletionLabel);
this.Controls.Add(this.pictureBox);
this.Controls.Add(this.deleteButton);
this.Controls.Add(this.cancelButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Name = "EsiKeyDeletionWindow";
this.Text = "Delete an ESI key";
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.charactersListGroupBox.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button deleteButton;
private System.Windows.Forms.ListView charactersListView;
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.Label infoLabel;
private System.Windows.Forms.Label deleteWarningLabel;
private System.Windows.Forms.GroupBox charactersListGroupBox;
private System.Windows.Forms.Label deletionLabel;
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyDeletionWindow.cs
================================================
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
namespace EVEMon.ApiCredentialsManagement
{
public sealed partial class EsiKeyDeletionWindow : EVEMonForm
{
private readonly ESIKey m_apiKey;
///
/// Constructor.
///
private EsiKeyDeletionWindow()
{
InitializeComponent();
deletionLabel.Font = FontFactory.GetFont("Tahoma", FontStyle.Bold);
}
///
/// Constructor.
///
/// The ESI key.
/// esiKey
public EsiKeyDeletionWindow(ESIKey esiKey)
: this()
{
esiKey.ThrowIfNull(nameof(esiKey), "ESI key can't be null");
m_apiKey = esiKey;
}
///
/// Occurs when the control loads.
///
/// The instance containing the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode)
return;
charactersListView.ItemCheck += charactersListView_ItemCheck;
deletionLabel.Text = string.Format(CultureConstants.DefaultCulture, deletionLabel.Text, m_apiKey.ID);
// Add characters
charactersListView.Items.Clear();
foreach (ListViewItem item in m_apiKey.CharacterIdentities.Select(
id => new ListViewItem(id.CharacterName)
{
Tag = id.CCPCharacter,
Checked = id.CCPCharacter != null &&
id.CCPCharacter.Identity.ESIKeys.All(key => key == m_apiKey),
}))
{
// Gray out a character with another associated API key
if (!item.Checked)
item.ForeColor = SystemColors.GrayText;
// Strikeout and gray out a character in the API key's ignored list
if (item.Tag == null)
{
item.Font = FontFactory.GetFont(Font, FontStyle.Strikeout);
item.ForeColor = SystemColors.GrayText;
item.Checked = true;
}
charactersListView.Items.Add(item);
}
// If character list is empty resize the window
if (charactersListView.Items.Count != 0)
return;
charactersListGroupBox.Visible = false;
Size = new Size(Size.Width - charactersListGroupBox.Height / 2, Size.Height - charactersListGroupBox.Height);
}
///
/// Handles the ItemCheck event of the charactersListView control.
///
/// The source of the event.
/// The instance containing the event data.
private void charactersListView_ItemCheck(object sender, ItemCheckEventArgs e)
{
CCPCharacter ccpCharacter = charactersListView.Items[e.Index].Tag as CCPCharacter;
if (ccpCharacter == null)
e.NewValue = CheckState.Checked;
if (ccpCharacter != null && ccpCharacter.Identity.ESIKeys.Any(key => key != m_apiKey))
e.NewValue = CheckState.Unchecked;
}
///
/// "Delete" button.
///
///
///
private void deleteButton_Click(object sender, EventArgs e)
{
// Remove the API key
EveMonClient.ESIKeys.Remove(m_apiKey);
// Remove the characters from the collection
foreach (CCPCharacter ccpCharacter in charactersListView.Items.Cast().Where(
item => item.Checked).Select(item => item.Tag as CCPCharacter).Where(
ccpCharacter => ccpCharacter != null).Where(
ccpCharacter => !ccpCharacter.Identity.ESIKeys.Any()))
{
EveMonClient.Characters.Remove(ccpCharacter);
}
// Closes the window
Close();
}
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyDeletionWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyUpdateOrAdditionWindow.Designer.cs
================================================
using EVEMon.Common.Controls;
using EVEMon.Common.Controls.MultiPanel;
using EVEMon.Common.Helpers;
using System;
namespace EVEMon.ApiCredentialsManagement
{
partial class EsiKeyUpdateOrAdditionWindow
{
///
/// 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);
try
{
m_server.Dispose();
}
catch (Exception ex)
{
// Do not rethrow while disposing
ExceptionHandler.LogException(ex, true);
}
}
#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(EsiKeyUpdateOrAdditionWindow));
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Mary Jane");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Ali Baba");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("John Doe");
this.GuideLabel = new System.Windows.Forms.Label();
this.ButtonNext = new System.Windows.Forms.Button();
this.ButtonPrevious = new System.Windows.Forms.Button();
this.ButtonCancel = new System.Windows.Forms.Button();
this.MultiPanel = new EVEMon.Common.Controls.MultiPanel.MultiPanel();
this.CredentialsPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.Throbber = new EVEMon.Common.Controls.Throbber();
this.ButtonESILogin = new System.Windows.Forms.Button();
this.ResultPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.KeyTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.KeyLabel = new System.Windows.Forms.Label();
this.KeyPicture = new System.Windows.Forms.PictureBox();
this.CharactersGroupBox = new System.Windows.Forms.GroupBox();
this.ResultsMultiPanel = new EVEMon.Common.Controls.MultiPanel.MultiPanel();
this.CharactersListPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.CharactersListView = new System.Windows.Forms.ListView();
this.WarningLabel = new System.Windows.Forms.Label();
this.AuthenticationErrorPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.AuthenticationErrorGuideLabel = new System.Windows.Forms.Label();
this.LoginDeniedErrorPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.LoginDeniedLinkLabel = new System.Windows.Forms.LinkLabel();
this.GeneralErrorPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.GeneralErrorLabel = new System.Windows.Forms.Label();
this.ESITokenFailedErrorPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.ESITokenFailedLabel = new System.Windows.Forms.Label();
this.CachedWarningPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.CachedWarningLabel = new System.Windows.Forms.Label();
this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
this.LabelShiftClick = new System.Windows.Forms.Label();
this.MultiPanel.SuspendLayout();
this.CredentialsPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.Throbber)).BeginInit();
this.ResultPage.SuspendLayout();
this.KeyTableLayoutPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.KeyPicture)).BeginInit();
this.CharactersGroupBox.SuspendLayout();
this.ResultsMultiPanel.SuspendLayout();
this.CharactersListPage.SuspendLayout();
this.AuthenticationErrorPage.SuspendLayout();
this.LoginDeniedErrorPage.SuspendLayout();
this.GeneralErrorPage.SuspendLayout();
this.ESITokenFailedErrorPage.SuspendLayout();
this.CachedWarningPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
this.SuspendLayout();
//
// GuideLabel
//
this.GuideLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.GuideLabel.Location = new System.Drawing.Point(3, 3);
this.GuideLabel.Name = "GuideLabel";
this.GuideLabel.Size = new System.Drawing.Size(267, 79);
this.GuideLabel.TabIndex = 3;
this.GuideLabel.Text = "Ensure that the character shown is the correct character to import.\r\n\r\nCharacters" +
" can be imported and hidden later through the ESI keys management window.";
//
// ButtonNext
//
this.ButtonNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.ButtonNext.Location = new System.Drawing.Point(337, 177);
this.ButtonNext.Name = "ButtonNext";
this.ButtonNext.Size = new System.Drawing.Size(75, 23);
this.ButtonNext.TabIndex = 1;
this.ButtonNext.Text = "&Next >";
this.ButtonNext.UseVisualStyleBackColor = true;
this.ButtonNext.Click += new System.EventHandler(this.ButtonNext_Click);
//
// ButtonPrevious
//
this.ButtonPrevious.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.ButtonPrevious.Enabled = false;
this.ButtonPrevious.Location = new System.Drawing.Point(256, 177);
this.ButtonPrevious.Name = "ButtonPrevious";
this.ButtonPrevious.Size = new System.Drawing.Size(75, 23);
this.ButtonPrevious.TabIndex = 0;
this.ButtonPrevious.Text = "< &Previous";
this.ButtonPrevious.UseVisualStyleBackColor = true;
this.ButtonPrevious.Click += new System.EventHandler(this.ButtonPrevious_Click);
//
// ButtonCancel
//
this.ButtonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.ButtonCancel.CausesValidation = false;
this.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.ButtonCancel.Location = new System.Drawing.Point(435, 177);
this.ButtonCancel.Name = "ButtonCancel";
this.ButtonCancel.Size = new System.Drawing.Size(75, 23);
this.ButtonCancel.TabIndex = 2;
this.ButtonCancel.Text = "&Cancel";
this.ButtonCancel.UseVisualStyleBackColor = true;
this.ButtonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// MultiPanel
//
this.MultiPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.MultiPanel.Controls.Add(this.CredentialsPage);
this.MultiPanel.Controls.Add(this.ResultPage);
this.MultiPanel.Location = new System.Drawing.Point(0, 0);
this.MultiPanel.Name = "MultiPanel";
this.MultiPanel.SelectedPage = this.CredentialsPage;
this.MultiPanel.Size = new System.Drawing.Size(522, 171);
this.MultiPanel.TabIndex = 0;
//
// CredentialsPage
//
this.CredentialsPage.CausesValidation = false;
this.CredentialsPage.Controls.Add(this.LabelShiftClick);
this.CredentialsPage.Controls.Add(this.Throbber);
this.CredentialsPage.Controls.Add(this.ButtonESILogin);
this.CredentialsPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.CredentialsPage.Location = new System.Drawing.Point(0, 0);
this.CredentialsPage.Name = "CredentialsPage";
this.CredentialsPage.Size = new System.Drawing.Size(522, 171);
this.CredentialsPage.TabIndex = 0;
this.CredentialsPage.Text = "credentialsPage";
//
// Throbber
//
this.Throbber.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.Throbber.Location = new System.Drawing.Point(249, 76);
this.Throbber.MaximumSize = new System.Drawing.Size(24, 24);
this.Throbber.MinimumSize = new System.Drawing.Size(24, 24);
this.Throbber.Name = "Throbber";
this.Throbber.Size = new System.Drawing.Size(24, 24);
this.Throbber.State = EVEMon.Common.Enumerations.ThrobberState.Stopped;
this.Throbber.TabIndex = 1;
this.Throbber.TabStop = false;
this.Throbber.Visible = false;
//
// ButtonESILogin
//
this.ButtonESILogin.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.ButtonESILogin.Image = ((System.Drawing.Image)(resources.GetObject("ButtonESILogin.Image")));
this.ButtonESILogin.Location = new System.Drawing.Point(126, 12);
this.ButtonESILogin.Name = "ButtonESILogin";
this.ButtonESILogin.Size = new System.Drawing.Size(270, 45);
this.ButtonESILogin.TabIndex = 0;
this.ButtonESILogin.UseVisualStyleBackColor = true;
this.ButtonESILogin.Click += new System.EventHandler(this.ButtonESILogin_Click);
//
// ResultPage
//
this.ResultPage.Controls.Add(this.KeyTableLayoutPanel);
this.ResultPage.Controls.Add(this.CharactersGroupBox);
this.ResultPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.ResultPage.Location = new System.Drawing.Point(0, 0);
this.ResultPage.Name = "ResultPage";
this.ResultPage.Size = new System.Drawing.Size(522, 171);
this.ResultPage.TabIndex = 2;
this.ResultPage.Text = "resultPage";
//
// KeyTableLayoutPanel
//
this.KeyTableLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.KeyTableLayoutPanel.AutoSize = true;
this.KeyTableLayoutPanel.ColumnCount = 2;
this.KeyTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 8.141962F));
this.KeyTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 91.85804F));
this.KeyTableLayoutPanel.Controls.Add(this.KeyLabel, 1, 0);
this.KeyTableLayoutPanel.Controls.Add(this.KeyPicture, 0, 0);
this.KeyTableLayoutPanel.Location = new System.Drawing.Point(12, 12);
this.KeyTableLayoutPanel.Name = "KeyTableLayoutPanel";
this.KeyTableLayoutPanel.RowCount = 1;
this.KeyTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.KeyTableLayoutPanel.Size = new System.Drawing.Size(498, 38);
this.KeyTableLayoutPanel.TabIndex = 0;
//
// KeyLabel
//
this.KeyLabel.AutoSize = true;
this.KeyLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.KeyLabel.Location = new System.Drawing.Point(43, 0);
this.KeyLabel.Name = "KeyLabel";
this.KeyLabel.Size = new System.Drawing.Size(452, 38);
this.KeyLabel.TabIndex = 1;
this.KeyLabel.Text = "Short description on info retrieval procedure.";
this.KeyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// KeyPicture
//
this.KeyPicture.Image = ((System.Drawing.Image)(resources.GetObject("KeyPicture.Image")));
this.KeyPicture.Location = new System.Drawing.Point(3, 3);
this.KeyPicture.Name = "KeyPicture";
this.KeyPicture.Size = new System.Drawing.Size(32, 32);
this.KeyPicture.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.KeyPicture.TabIndex = 0;
this.KeyPicture.TabStop = false;
//
// CharactersGroupBox
//
this.CharactersGroupBox.Controls.Add(this.ResultsMultiPanel);
this.CharactersGroupBox.Location = new System.Drawing.Point(12, 50);
this.CharactersGroupBox.Name = "CharactersGroupBox";
this.CharactersGroupBox.Size = new System.Drawing.Size(479, 118);
this.CharactersGroupBox.TabIndex = 3;
this.CharactersGroupBox.TabStop = false;
this.CharactersGroupBox.Text = "Characters exposed by API key";
//
// ResultsMultiPanel
//
this.ResultsMultiPanel.Controls.Add(this.CharactersListPage);
this.ResultsMultiPanel.Controls.Add(this.AuthenticationErrorPage);
this.ResultsMultiPanel.Controls.Add(this.LoginDeniedErrorPage);
this.ResultsMultiPanel.Controls.Add(this.GeneralErrorPage);
this.ResultsMultiPanel.Controls.Add(this.ESITokenFailedErrorPage);
this.ResultsMultiPanel.Controls.Add(this.CachedWarningPage);
this.ResultsMultiPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ResultsMultiPanel.Location = new System.Drawing.Point(3, 16);
this.ResultsMultiPanel.Name = "ResultsMultiPanel";
this.ResultsMultiPanel.SelectedPage = this.ESITokenFailedErrorPage;
this.ResultsMultiPanel.Size = new System.Drawing.Size(473, 99);
this.ResultsMultiPanel.TabIndex = 5;
//
// CharactersListPage
//
this.CharactersListPage.Controls.Add(this.CharactersListView);
this.CharactersListPage.Controls.Add(this.GuideLabel);
this.CharactersListPage.Controls.Add(this.WarningLabel);
this.CharactersListPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.CharactersListPage.Location = new System.Drawing.Point(0, 0);
this.CharactersListPage.Name = "CharactersListPage";
this.CharactersListPage.Size = new System.Drawing.Size(473, 99);
this.CharactersListPage.TabIndex = 0;
this.CharactersListPage.Text = "charactersListPage";
//
// CharactersListView
//
this.CharactersListView.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.CharactersListView.FullRowSelect = true;
this.CharactersListView.HideSelection = false;
listViewItem1.StateImageIndex = 0;
listViewItem2.StateImageIndex = 0;
listViewItem3.Checked = true;
listViewItem3.StateImageIndex = 1;
this.CharactersListView.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3});
this.CharactersListView.Location = new System.Drawing.Point(276, 3);
this.CharactersListView.Name = "CharactersListView";
this.CharactersListView.Size = new System.Drawing.Size(197, 76);
this.CharactersListView.TabIndex = 2;
this.CharactersListView.UseCompatibleStateImageBehavior = false;
this.CharactersListView.View = System.Windows.Forms.View.List;
//
// WarningLabel
//
this.WarningLabel.AutoSize = true;
this.WarningLabel.ForeColor = System.Drawing.Color.DarkRed;
this.WarningLabel.Location = new System.Drawing.Point(3, 82);
this.WarningLabel.Name = "WarningLabel";
this.WarningLabel.Size = new System.Drawing.Size(402, 13);
this.WarningLabel.TabIndex = 4;
this.WarningLabel.Text = "Beware! When you remove characters, all their data and plans will be definitely l" +
"ost !";
//
// AuthenticationErrorPage
//
this.AuthenticationErrorPage.Controls.Add(this.AuthenticationErrorGuideLabel);
this.AuthenticationErrorPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.AuthenticationErrorPage.Location = new System.Drawing.Point(0, 0);
this.AuthenticationErrorPage.Name = "AuthenticationErrorPage";
this.AuthenticationErrorPage.Size = new System.Drawing.Size(473, 99);
this.AuthenticationErrorPage.TabIndex = 1;
this.AuthenticationErrorPage.Text = "authenticationErrorPage";
//
// AuthenticationErrorGuideLabel
//
this.AuthenticationErrorGuideLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.AuthenticationErrorGuideLabel.Location = new System.Drawing.Point(0, 0);
this.AuthenticationErrorGuideLabel.Name = "AuthenticationErrorGuideLabel";
this.AuthenticationErrorGuideLabel.Padding = new System.Windows.Forms.Padding(54, 0, 0, 0);
this.AuthenticationErrorGuideLabel.Size = new System.Drawing.Size(473, 99);
this.AuthenticationErrorGuideLabel.TabIndex = 0;
this.AuthenticationErrorGuideLabel.Text = resources.GetString("AuthenticationErrorGuideLabel.Text");
this.AuthenticationErrorGuideLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// LoginDeniedErrorPage
//
this.LoginDeniedErrorPage.Controls.Add(this.LoginDeniedLinkLabel);
this.LoginDeniedErrorPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.LoginDeniedErrorPage.Location = new System.Drawing.Point(0, 0);
this.LoginDeniedErrorPage.Name = "LoginDeniedErrorPage";
this.LoginDeniedErrorPage.Size = new System.Drawing.Size(473, 99);
this.LoginDeniedErrorPage.TabIndex = 2;
this.LoginDeniedErrorPage.Text = "loginDeniedErrorPage";
//
// LoginDeniedLinkLabel
//
this.LoginDeniedLinkLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.LoginDeniedLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(149, 49);
this.LoginDeniedLinkLabel.Location = new System.Drawing.Point(0, 0);
this.LoginDeniedLinkLabel.Name = "LoginDeniedLinkLabel";
this.LoginDeniedLinkLabel.Padding = new System.Windows.Forms.Padding(40, 0, 0, 0);
this.LoginDeniedLinkLabel.Size = new System.Drawing.Size(473, 99);
this.LoginDeniedLinkLabel.TabIndex = 0;
this.LoginDeniedLinkLabel.TabStop = true;
this.LoginDeniedLinkLabel.Text = resources.GetString("LoginDeniedLinkLabel.Text");
this.LoginDeniedLinkLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.LoginDeniedLinkLabel.UseCompatibleTextRendering = true;
this.LoginDeniedLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoginDeniedLinkLabel_LinkClicked);
//
// GeneralErrorPage
//
this.GeneralErrorPage.Controls.Add(this.GeneralErrorLabel);
this.GeneralErrorPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.GeneralErrorPage.Location = new System.Drawing.Point(0, 0);
this.GeneralErrorPage.Name = "GeneralErrorPage";
this.GeneralErrorPage.Size = new System.Drawing.Size(473, 99);
this.GeneralErrorPage.TabIndex = 3;
this.GeneralErrorPage.Text = "generalErrorPage";
//
// GeneralErrorLabel
//
this.GeneralErrorLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.GeneralErrorLabel.Location = new System.Drawing.Point(0, 0);
this.GeneralErrorLabel.Name = "GeneralErrorLabel";
this.GeneralErrorLabel.Padding = new System.Windows.Forms.Padding(50, 0, 50, 0);
this.GeneralErrorLabel.Size = new System.Drawing.Size(473, 99);
this.GeneralErrorLabel.TabIndex = 0;
this.GeneralErrorLabel.Text = "An error occurred while retrieving the information.\r\n\r\nThe error message was: {0}" +
"";
this.GeneralErrorLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// ESITokenFailedErrorPage
//
this.ESITokenFailedErrorPage.Controls.Add(this.ESITokenFailedLabel);
this.ESITokenFailedErrorPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.ESITokenFailedErrorPage.Location = new System.Drawing.Point(0, 0);
this.ESITokenFailedErrorPage.Name = "ESITokenFailedErrorPage";
this.ESITokenFailedErrorPage.Size = new System.Drawing.Size(473, 99);
this.ESITokenFailedErrorPage.TabIndex = 5;
this.ESITokenFailedErrorPage.Text = "";
//
// ESITokenFailedLabel
//
this.ESITokenFailedLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ESITokenFailedLabel.Location = new System.Drawing.Point(0, 0);
this.ESITokenFailedLabel.Name = "ESITokenFailedLabel";
this.ESITokenFailedLabel.Padding = new System.Windows.Forms.Padding(35, 0, 0, 0);
this.ESITokenFailedLabel.Size = new System.Drawing.Size(473, 99);
this.ESITokenFailedLabel.TabIndex = 0;
this.ESITokenFailedLabel.Text = "EVEMon did not receive a valid response from the CCP SSO server.\r\n\r\nTry again in " +
"a few minutes.";
this.ESITokenFailedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// CachedWarningPage
//
this.CachedWarningPage.Controls.Add(this.CachedWarningLabel);
this.CachedWarningPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.CachedWarningPage.Location = new System.Drawing.Point(0, 0);
this.CachedWarningPage.Name = "CachedWarningPage";
this.CachedWarningPage.Size = new System.Drawing.Size(473, 98);
this.CachedWarningPage.TabIndex = 6;
this.CachedWarningPage.Text = "cachedWarningPage";
//
// CachedWarningLabel
//
this.CachedWarningLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.CachedWarningLabel.Location = new System.Drawing.Point(0, 0);
this.CachedWarningLabel.Name = "CachedWarningLabel";
this.CachedWarningLabel.Size = new System.Drawing.Size(473, 98);
this.CachedWarningLabel.TabIndex = 0;
this.CachedWarningLabel.Text = "Due to the fact that the cached timer has not yet expired,\r\nyour query attempt wi" +
"ll result in getting the same data you already have.\r\nTry again after: {0}";
this.CachedWarningLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// errorProvider
//
this.errorProvider.ContainerControl = this;
//
// LabelShiftClick
//
this.LabelShiftClick.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.LabelShiftClick.AutoSize = true;
this.LabelShiftClick.Location = new System.Drawing.Point(111, 60);
this.LabelShiftClick.Name = "LabelShiftClick";
this.LabelShiftClick.Size = new System.Drawing.Size(301, 13);
this.LabelShiftClick.TabIndex = 2;
this.LabelShiftClick.Text = "SHIFT+Click will copy ESI authentication URL to the clipboard";
this.LabelShiftClick.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// EsiKeyUpdateOrAdditionWindow
//
this.AcceptButton = this.ButtonNext;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.ButtonCancel;
this.ClientSize = new System.Drawing.Size(522, 212);
this.Controls.Add(this.ButtonCancel);
this.Controls.Add(this.ButtonPrevious);
this.Controls.Add(this.ButtonNext);
this.Controls.Add(this.MultiPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "EsiKeyUpdateOrAdditionWindow";
this.Text = "ESI Key Import";
this.MultiPanel.ResumeLayout(false);
this.CredentialsPage.ResumeLayout(false);
this.CredentialsPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.Throbber)).EndInit();
this.ResultPage.ResumeLayout(false);
this.ResultPage.PerformLayout();
this.KeyTableLayoutPanel.ResumeLayout(false);
this.KeyTableLayoutPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.KeyPicture)).EndInit();
this.CharactersGroupBox.ResumeLayout(false);
this.ResultsMultiPanel.ResumeLayout(false);
this.CharactersListPage.ResumeLayout(false);
this.CharactersListPage.PerformLayout();
this.AuthenticationErrorPage.ResumeLayout(false);
this.LoginDeniedErrorPage.ResumeLayout(false);
this.GeneralErrorPage.ResumeLayout(false);
this.ESITokenFailedErrorPage.ResumeLayout(false);
this.CachedWarningPage.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
this.ResumeLayout(false);
}
#endregion
private MultiPanel MultiPanel;
private MultiPanelPage CredentialsPage;
private System.Windows.Forms.Button ButtonNext;
private System.Windows.Forms.Button ButtonPrevious;
private System.Windows.Forms.Button ButtonCancel;
private MultiPanelPage ResultPage;
private System.Windows.Forms.PictureBox KeyPicture;
private System.Windows.Forms.GroupBox CharactersGroupBox;
private System.Windows.Forms.ListView CharactersListView;
private System.Windows.Forms.Label WarningLabel;
private System.Windows.Forms.TableLayoutPanel KeyTableLayoutPanel;
private System.Windows.Forms.Label KeyLabel;
private MultiPanel ResultsMultiPanel;
private MultiPanelPage CharactersListPage;
private MultiPanelPage AuthenticationErrorPage;
private System.Windows.Forms.Label AuthenticationErrorGuideLabel;
private System.Windows.Forms.ErrorProvider errorProvider;
private MultiPanelPage LoginDeniedErrorPage;
private System.Windows.Forms.LinkLabel LoginDeniedLinkLabel;
private MultiPanelPage GeneralErrorPage;
private System.Windows.Forms.Label GeneralErrorLabel;
private MultiPanelPage ESITokenFailedErrorPage;
private System.Windows.Forms.Label ESITokenFailedLabel;
private MultiPanelPage CachedWarningPage;
private System.Windows.Forms.Label CachedWarningLabel;
private System.Windows.Forms.Label GuideLabel;
private System.Windows.Forms.Button ButtonESILogin;
private Throbber Throbber;
private System.Windows.Forms.Label LabelShiftClick;
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyUpdateOrAdditionWindow.cs
================================================
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.Controls.MultiPanel;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.CCPAPI;
using EVEMon.Common.Helpers;
using EVEMon.Common.Models;
using EVEMon.Common.Properties;
using EVEMon.Common.Serialization;
using EVEMon.Common.Service;
using EVEMon.SettingsUI;
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EVEMon.ApiCredentialsManagement
{
public partial class EsiKeyUpdateOrAdditionWindow : EVEMonForm
{
private readonly SSOAuthenticationService m_authService;
private readonly bool m_updateMode;
private bool m_keyValid;
private ESIKey m_esiKey;
private ESIKeyCreationEventArgs m_creationArgs;
private readonly SSOWebServerHttpListener m_server;
private readonly string m_state;
///
/// Constructor for new ESI credential.
///
public EsiKeyUpdateOrAdditionWindow()
{
InitializeComponent();
m_keyValid = false;
m_server = new SSOWebServerHttpListener();
m_state = DateTime.UtcNow.ToFileTime().ToString();
m_authService = SSOAuthenticationService.GetInstance();
}
///
/// Constructor for editing existing ESI credentials.
///
///
public EsiKeyUpdateOrAdditionWindow(ESIKey esiKey)
: this()
{
m_esiKey = esiKey;
m_updateMode = m_esiKey != null;
}
///
/// Starts the SSO server.
///
private void StartServer()
{
try
{
m_server.Start();
WaitForToken();
}
catch (IOException)
{
MessageBox.Show(string.Format(Properties.Resources.ErrorSSOStartup,
SSOWebServerHttpListener.PORT), @"Cannot start authentication", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
}
///
/// Starts waiting for a token in the background, calling UpdateTokens when it arrives
/// or fails.
///
private void WaitForToken()
{
m_server.BeginWaitForCode(m_state, UpdateTokens);
}
///
/// Receives the result and updates the code text box if needed.
///
///
private void UpdateTokens(Task results)
{
string code;
if (results.IsFaulted)
{
// Retry and log
ExceptionHandler.LogException(results.Exception, true);
WaitForToken();
}
else if (!results.IsCanceled && !string.IsNullOrEmpty(code = results.Result))
{
// If a token is received, use SSOAuthenticationService to convert to a token
// null is returned if the user cancels
m_authService.VerifyAuthCode(code, GoToResults);
Throbber.State = ThrobberState.Rotating;
Throbber.Visible = true;
}
}
///
/// Update the controls visibility depending on whether we are in update or creation mode.
///
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode)
return;
if (m_authService == null)
{
MessageBox.Show(Properties.Resources.ErrorSetClientID, @"Client ID not set",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Close();
// General > Network...
using (SettingsForm form = new SettingsForm(0, 1))
{
form.ShowDialog(this);
}
}
WarningLabel.Visible = m_updateMode;
CharactersListView.Items.Clear();
MultiPanel.SelectedPage = CredentialsPage;
MultiPanel.SelectionChange += MultiPanel_SelectionChange;
UpdateButtons(CredentialsPage);
}
///
/// When we switch panels, we update the "next", "previous" and "cancel" buttons.
///
///
///
private void MultiPanel_SelectionChange(object sender, MultiPanelSelectionChangeEventArgs args)
{
UpdateButtons(args?.NewPage ?? MultiPanel.SelectedPage);
}
///
/// When we switch panels, we update the "next", "previous" and "cancel" buttons.
///
/// The page selected.
private void UpdateButtons(MultiPanelPage newPage)
{
bool nextPrev = false;
if (newPage == CredentialsPage)
StartServer();
else
{
nextPrev = true;
ButtonNext.Text = m_updateMode ? "&Update" : "&Import";
ButtonNext.Focus();
}
ButtonPrevious.Visible = nextPrev;
ButtonPrevious.Enabled = nextPrev;
ButtonNext.Visible = nextPrev;
// Disable "Import" on error
ButtonNext.Enabled = nextPrev && (newPage != ResultPage || m_keyValid);
Throbber.State = ThrobberState.Stopped;
Throbber.Visible = false;
}
///
/// Previous.
/// When the previous button is clicked, we select the first page.
///
///
///
private void ButtonPrevious_Click(object sender, EventArgs e)
{
if (MultiPanel.SelectedPage == ResultPage)
MultiPanel.SelectedPage = CredentialsPage;
}
///
/// Cancel.
/// Closes the window.
///
///
///
private void ButtonCancel_Click(object sender, EventArgs e)
{
m_creationArgs = null;
Close();
}
///
/// Next / Import / Update.
///
///
///
private void ButtonNext_Click(object sender, EventArgs e)
{
// Only works on the last page
if (MultiPanel.SelectedPage == ResultPage)
Complete();
}
///
/// Goes to the results page once the key has been received from the server.
///
private void GoToResults(AccessResponse response)
{
// Fail if an empty response is received
bool failed = string.IsNullOrEmpty(response?.AccessToken) || string.IsNullOrEmpty(
response?.RefreshToken);
// If the arguments have not been invalidated since the last time...
if (m_creationArgs != null)
MultiPanel.SelectedPage = ResultPage;
else if (failed)
{
// Error when fetching the key
KeyPicture.Image = Resources.KeyWrong32;
KeyLabel.Text = Properties.Resources.ErrorNoToken;
CharactersGroupBox.Text = @"Error report";
ResultsMultiPanel.SelectedPage = ESITokenFailedErrorPage;
MultiPanel.SelectedPage = ResultPage;
m_keyValid = false;
}
else
{
long newID = DateTime.UtcNow.ToFileTime();
// Are we updating existing API key?
if (m_updateMode)
m_esiKey.TryUpdateAsync(response, OnUpdated);
else
ESIKey.TryAddOrUpdateAsync(newID, response, OnUpdated);
}
}
///
/// Validates the operation and closes the window.
///
private void Complete()
{
if (m_creationArgs == null)
return;
m_esiKey = m_creationArgs.CreateOrUpdate();
// Closes the window
Close();
}
///
/// When ESI credentials have been updated.
///
///
private void OnUpdated(object sender, ESIKeyCreationEventArgs e)
{
m_creationArgs = e;
var error = e.CCPError;
CharactersGroupBox.Text = "Characters exposed by ESI key";
// Updates the picture and label for key type
if (error != null)
{
string message = error.ErrorMessage;
KeyPicture.Image = Resources.KeyWrong32;
KeyLabel.Text = message;
CharactersGroupBox.Text = "Error report";
ResultsMultiPanel.SelectedPage = GetErrorPage(e, message);
m_keyValid = false;
}
else
{
var id = e.Identity;
KeyPicture.Image = Resources.DefaultCharacterImage32;
KeyLabel.Text = "This is a character ESI key.";
ResultsMultiPanel.SelectedPage = CharactersListPage;
// Updates the characters list
CharactersListView.Items.Clear();
CharactersListView.Items.Add(new ListViewItem(id.CharacterName)
{
Tag = id,
});
m_keyValid = true;
}
// Issue a warning if the ESI key has no scopes
if (e.AccessMask == 0UL)
{
WarningLabel.Text = Properties.Resources.ErrorNoScopes;
WarningLabel.Visible = true;
}
// Issue a warning if the ESI key does not have the basic scopes
else if (e.AccessMask < (long)CCPAPIMethodsEnum.BasicCharacterFeatures)
{
WarningLabel.Text = Properties.Resources.ErrorFewScopes;
WarningLabel.Visible = true;
}
else
WarningLabel.Visible = m_updateMode;
// Selects the last page
MultiPanel.SelectedPage = ResultPage;
}
///
/// Gets the error page.
///
/// The instance containing the
/// event data.
/// The error message.
/// The error page to display.
private MultiPanelPage GetErrorPage(ESIKeyCreationEventArgs e, string message)
{
if (e.CCPError.IsAuthenticationFailure)
return AuthenticationErrorPage;
if (e.CCPError.IsLoginDeniedByAccountStatus)
return LoginDeniedErrorPage;
GeneralErrorLabel.Text = string.Format(CultureConstants.DefaultCulture,
GeneralErrorLabel.Text, message);
return GeneralErrorPage;
}
///
/// On the first page, when a textbox is changed, we ensure the previously generated
/// is destroyed.
///
///
///
private void IDTextBox_TextChanged(object sender, EventArgs e)
{
m_creationArgs = null;
}
///
/// On the first page, when a textbox is changed, we ensure the previously generated
/// is destroyed.
///
///
///
private void VerificationCodeTextBox_TextChanged(object sender, EventArgs e)
{
m_creationArgs = null;
}
///
/// Handles the LinkClicked event of the LoginDeniedLinkLabel control.
///
/// The source of the event.
/// The
/// instance containing the event data.
private void LoginDeniedLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Util.OpenURL(new Uri(NetworkConstants.CCPAccountManage));
}
///
/// Starts a browser with the ESI login page.
///
/// The source of the event.
/// The instance containing the event
/// data.
private void ButtonESILogin_Click(object sender, EventArgs e)
{
if (ModifierKeys.HasFlag(Keys.Shift)) {
if (m_authService != null)
Clipboard.SetText(m_authService.GetAuthenticationURL(m_state,
SSOWebServerHttpListener.PORT).ToString());
} else
m_authService?.SpawnBrowserForLogin(m_state, SSOWebServerHttpListener.PORT);
}
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeyUpdateOrAdditionWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
iVBORw0KGgoAAAANSUhEUgAAAQ4AAAAtCAYAAABf/oWJAAAABGdBTUEAALGPC/xhBQAADFFJREFUeF7t
ndmLFUcbh4dcfH+MQYioQRAENReKxgu9cblQiMuFASN8omBgIK6j457FcUvUjGiiYBKXJGrivuAurtEk
Jrf5E76L/ubp4Xd4T83by8zpidNaAw/dVfWrt5aufruqTp8zbe3t7W/t2rWr86uvvkoOHjwYqRj6dd++
fW5aJFInevzE/7q6upa08dcTWPvrr78mf/75Z/LHH39EKoL+fPnyZfLjjz8mu3fvdjWRSJ3466+/krNn
z+JAZrV9+eWXaeTTp08jFfLs2bPk77//Tk6cOJE6Dk8TidSN3377LemZdbxs+/rrr5MnT55EKoZOxkPL
cXiaSKSO9Mw4kjbWLl5ipDWs42CPw9NEInWDcZ06ju7ublcQaQ06mKXK6dOnkz179riaSKRuMK6ZQbcd
OHAgefz4caRi6GQcx08//ZQ6Dk8TibTKo0eP3PjBgnHd1dUVHcdgQQfzyQozjr1797qaSKRuNDkOvFak
Wuhk9jiYcbDH4WkikbrBuN65c2fStn///tSLRKqFtaDe4+AlME8TidQNxnV0HIMIHcxS5eeff05iH0de
J7744otex8HLSlXAyyFe/JsIfcFS5cyZMwnLQU8TKSaOqaFH6jh4c9RLjLQOSxUcBx95e+mRSB35/PPP
kzY27uyuaaQ6WKrIcXjpkUgdaTgObx0TaR2+A/TLL78khw8fdtMjkbrB3l3qOHjHwBMUMWzYsEqYN29e
am/lypVN8ceOHetTZh5Hjx5tyo894rFv41tBZbHGe//999Oj4jxYquA4jhw54qZHInUDx/HZZ58NHcdx
586dZOzYsY34KVOmpNOisFwPPl+ePHlyIy927t69m6YNhuNYunRp6phWr17diAthLchShZ8s+Oabb1xN
JFI3mhwHgf7i3VgDgRtbNpkC2bTt27c3lZkFOpsPO0qr0nHIJjONNWvWpEfFheA4mHFcuHAh+fbbb11N
HuRbt25dCueeBnBKH330UTJz5swU9Ldu3eqjo4/mz5+fajgW9S3p2JKOclQfzqVTfJG9spw8ebLRFi9d
qC55fWOx9Q/BBuXasPKF10H94mHLCyl7nTx0w6ps9T8PL2xV1fdlYFynjoPvUXiCIuwN9cknn6SvVg8E
e5HooGnTpjXsjhkzJp2J2HJDbt++neqUh/zqaLCOg+WFV4ey2HKLeP78eTrjuHjxYrrs8jR5MDhUbw2U
EAaMNBbaaQdluAwUeYOdAYlGNzBa5cO+dIqXrhW4brbdilddbH2lyeqbEFv/EGzYcu2NaPPRp6qLhy3P
UvY6FRH2g9cvgw2O49NPP+3dHOWz8v5if1LsypUrroZCvPg8vv/++6bOXbFihasTy5cvb9KT36bztXbV
87vvvmtKG0xwHGyO4hiPHz/uavJglqI2ce5p3n333TR9wYIFaRjnpjzr16/PjENPmPyyFTJr1qxUw5Ew
eWUHLl261BQvXavwoKC9ts2qi+oPqkdW34TY+nNuUVtsuvKpr7jJCasu48eP72NHeULKXKcyhP2AHdqv
+v9bpJujA/2RmVOnTlUCN1Zoe+HChY2OHT58eHLu3Lk+GuCjTtKlXbRoUR8N9r1yB0JoOw+8MzMOysdh
eZo82FBVu7zN1ax0PYU4El67dm1D5+U9f/58I96SZwcI23jpLDht0qUFnr6EOSpOGuoCNg9HblKVoXyq
B0ttTdmXLFmS2R7sKI+XDmGbAYdBHLazNHmUvU7qFzScE8+S0sujvrF5ytoANKQB5zdv3mxKL2LHjh0J
vznqJhahzmgVbY5aLl++nLzzzjsNzZw5c/poYPbs2Q3NiBEj0nyhZjA2R8uA42DWwVKFWZCnyYOLrXLD
Cw9ccK9eiucpR5iBQ5gbwOqK0CDlSFh2dRNztPHSWXAcpIFuaIVVPxuHxrbbpgmVo7Ce5mF6SFZ/WbSk
8+rGjUg47Jciyl4n2Q3bQ1g3tjTkzQvn2dB4sJRti6AvUsfBkqK/hIUPFG5szz77JlZ36NChpnTCNn3V
qlVN6aJKx+HZz4Ip3e+//54u43AcniYPu+bmPEy3a++8eE1vOVpdEWE+2SWspzCzMBsf2gDSgDbgRBUG
wmongxu9bbfCKo/NRcq0dj/++OM0nNUfwqZzbpGGt6ilYe/M1kXlql8mTJjQZIOnsOxYSJONvHjb35RN
eUqnHlZD3rxwlg0b5jwMY6MMqeOoYnO0FbixPfsPHjxIxo0b19C99957ycOHD9M0jhMnTmykoUMf2oAq
HYdnPws5DmZB7Nh7mjzsoOU8TLcDLy9eTyGOhDWFFVl1C/PJLmGdcyPb+NAGyA46tUlPRMLUx+a37fZs
KE4a9Y2Xz6J6ekjDslJx2FMe6iuN6hKS1X5bbl58mTaGmqJwaENl2rp6efJochzedKQIdoOr4N69e659
YP9FDYeOjo40ns0hG5/XBux75Q4Ez34WdDCbozgOvlrvafJodamieA0MjmE6eLYhKx9hpr2cc0PZ+NCG
zccyQOf2aM/Rh0sVUF2kAWlUfy+fReWAyhVWp6UY8exrcG7bprqgsza4mawdQZrKzYsv08ZQUxQObahM
rhtakBO3efLAeWzbtq13c9ROQ8rCOwyCtamnaRUqOX369EbjR40alX5NnaPiZsyY0fCEHrxRqnry6ren
GQw047h69Wq6ietp8rBPUM7DdD09IC/eTl+tThrPNoT5ZFdhu3di40M0/SedGQrnWrJgQ+Xoy5a23bIh
DXVQnDSqv5fPktVfIWoXR7XNlqu6ZLU3JKvcML5MG0NNUTi0oTJxFmgtWUutEMZ16jjYlfYERahCsGzZ
svSr4wPhhx9+cO0L1l5vv/12o6yRI0c2zonnIykvn7BLlUmTJrl1KItnPws6+MWLF8mNGzfSXwHzNHnY
G0EDx2LX49yIitfNyRORMHsAhBks0oDyerZBg5AjYQ06hRlosmHjQ+QkNFhVD47cmHrCqw223bKhumTd
EFn5LKp/VrqQTk4DbB+pLlntDSl7ncq0MdQUhUMbalvZunswrhufqoTffiuDKtQqc+fOde1bFi9e7Ob9
8MMPXb0F+17egeDZz4JpHZ+q4DiYJXmaPJgdqVzOw3T7iQVPAMXrRvzggw/SsKan1k6RbdC0lyNh2VFY
yxWheI/Ro0f30ck+UGdpbd0UJy11UJw0Xpv0E3cW2w9hmsXaEbRV6apL2N6wTIXLXqcybQw1ReHQBuVz
PnXq1EY650pXXB6M661bt/Y6Dm189AdVqFWyNkct169fb5ppAGHiPb3lVW2O4p1xHAw6/m2ep8nDPkFD
eHKg0UDh6U2cptlAfjR2w4/Big59qAuRbY6E9bRSGPTUDONDZAvY6yDOvs1KvaW17Q7zU2/ll0b19/JZ
VH8P9aewacw8FM9NY9sSUtSXeddJGluXIk1ROLTBPp3CaEBh0pSniNRx8IvFXmIR7DNUAS9tefZDbCPV
cE8Xgn2v3IHg2c8Cx8FSBcfBF908TR72RghR27nYGiyCwclGnbWlTy4EDkQ3fdFg50hY/a8w8NaxbNr4
EHvtVHdbJ3stbbsVRzlydipHGtXfy2exdQix5YPaDjgqbQqGaSFZfVnmOind1kVa2Q01RWHPBmWqL0U4
XorYsmVLr+Owa5ihCh/BanrHZ+hMBT3dUILNURwHn6x46VXB2pmBAV466L2EPE1kcClznf4N7Fjg3NNk
wR5HrRwHsEGJ4+jvRuWrgGUKMw4uDN8l8DSRSN1oOA5+6twTDFX4OrsXP9TAcQCOg49kPU0kUjdwHJs3
b+51HBrkkepgmcILYPyg0LVr11xNJFJHGo7D2wDxsJtEA6UKG3WAduKd+Zo4Mw5PE4nUkU2bNiVtvFHp
JUZaA8eBd75//36pj42HAm+KU4+0RsNx8GSMVIvWg3z6wz5HmB6J1JXOzs5exxFugERaB89MJ/MxMl+0
8zSRSN1oOA5+Bizc/Ii0Dh3Mkek/ziNMj0TqCK8YNByHpiBlkNd5E+lP29HSyTgOliue5nXnTR4rrys4
j40bNyZt/NS5J4i0BjcNncyShS8HeRpLvMnebOpy/ZscB5WOVAsOQ0dmHWF6JFJHcB6p4+Crtp4g0jqa
cciJRIYu3BBefKQZxnJHR8c/bZ2dnQf4vQgGeaRaNLWLRF4X+I3aHp/x37b29vb/bNiw4SS/VMQvh0ci
r5Lu7m43vj9UYSPSF37eoGe2sau9vf2t/wPbtfoAS6Ir0gAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQg
djMuMzap5+IlAAAD2ElEQVRYR+3TbUxbVRwG8BZ1iZlAYnz5sA+GRDrDBxUdb6OFhPJW+sLEbdlWoIVB
w6SD4oD1FRgwpzJ1REOyoRkDTJxM3SJjbsCWbZbKGJRNhFJC3XQbzpjFxEhcYnx8ermswY+yj32SX+69
555z/ufk3iMJJ5xwwgnnv4mXSNeQgpoSH1vjtqSm3t8WKwvw+VOqJSU9KXZ/eEmSSLekSCO+sSQk/NVV
YsRw7R5MOR2Ytdvhdzgw7XJi1GHH2fo69Fbu+of99eLQ1UcukW5qlafCW1+L6RoL5t8+gF/7+rDo9eK+
zydYnJjAvdOn8UvnxxhXa6CQRpwQh68+aRJpZdurr+BmWxsW3e6QkZGVPB6BV6OFcu3a2xxnEBVTkaiQ
9KIdou20jQrocbFsKGysbk9Ogn9vPfw1NZirq8Pdw4fxR39/CHe/7HttPoZLSzFoNArOGow4w+sAP11/
iQFf8/6k0YCTBgO+NBTjBPUZitBTqIcmMmqc9Z4SSy+FDW92KOQYY8fPOcknRYW4ykl+O3IEv3d3L+np
eWDhrQNYaN2PO62tuN3cglstLfipuRk36QYF9jVhnuaaGuGn2aYGzDQ2wF1RhlPFepTLZLdYM0YsLyyg
vjM9DZeqd4P3RjId32VCoKoK9w4dWtLeLrjQ0IhBpxODjiVD/EHP8wc977STAxfoosuBSy674HKDHW6X
DSPkcVkxWFWBU0VboX3m2Z/F8sICbF3KDEy9dxDqqOixdGnEuWG7FTfMZiywgIBFg6ZtNkxbrZjh6fDx
VCyfkjkWnrJUw1NqgN9uQ6DBiWtVZlws3o4JcwV+dNjwQ201vtqSD7N8Y3CjH4jlhQW4erMzMWUyYfbo
Ufi6j2FmZznmS3divqzsgUB5eQj7+viNJze/jvGCAoy+tgkDGhU6VDk4p8rGsE6NXrLy036Yl43PVEr0
5inxxsaUYPGDYumlsKHpeG42rqnVuK7R4DqP2RSvAq02RKcTrpN872XfUVUujum0aGSRvSnJ0Mc+H5z8
sik2FvuylMiOjLrL593UqY6O/rNQJgu+bxXLhhJs/EKdi6tpabiyYQOuJCSEJCZibFlSEsYUaTjDosGd
vpuZgR0xMX9zfAXl0YvifCraQ1FCAYb3kRQnPq4MX7R8lJWBb/N1mMzhQuQKjMbHw73+BYzExcHz0ssY
5QK+S5XDk5mJd/i5OKaXKilRnOb/h5M8Rz3pEY8Etq5bB1dyIrpyczDEnQ7o8tGjUeN9FrYmJ6NkvQxZ
T0TeYf+VZ/lhhRM/TVraT0OiDrKQmmLpUbF7OOGEE84qI5H8C2HafbcrbFdPAAAAAElFTkSuQmCC
Either the ID or the Verification Code (or both) you provided was wrong.
Select the "Previous" button and retry, entering the correct credentials.
If this account was freshly created, you have to wait, at least one hour,
for CCP to include it in the API.
The subscription of the account, this API key belongs to, has expired.
If the API key belongs to one of your accounts, consider re-subscribing at :
https://secure.eveonline.com/AccountManMenu.aspx
17, 17
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeysListBox.cs
================================================
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
using EVEMon.Common.Properties;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace EVEMon.ApiCredentialsManagement
{
///
/// Displays a list of API keys.
///
public sealed class EsiKeysListBox : NoFlickerListBox
{
private readonly Font m_smallFont;
private readonly Font m_smallBoldFont;
private readonly Font m_strikeoutFont;
private readonly Font m_middleFont;
private readonly Font m_boldFont;
private readonly List m_esiKeys = new List();
private bool m_pendingUpdate;
///
/// Constructor.
///
public EsiKeysListBox()
{
DrawMode = DrawMode.OwnerDrawFixed;
DrawItem += OnDrawItem;
m_smallFont = FontFactory.GetFont(Font.FontFamily, 6.5f);
m_smallBoldFont = FontFactory.GetFont(m_smallFont, FontStyle.Bold);
m_strikeoutFont = FontFactory.GetFont(m_smallFont, FontStyle.Strikeout);
m_middleFont = FontFactory.GetFont(Font.FontFamily, 8.0f);
m_boldFont = FontFactory.GetFont(Font, FontStyle.Bold);
}
///
/// Releases the unmanaged resources used by the
/// and its child controls and optionally releases the managed resources.
///
/// true to release both managed and unmanaged resources; false to release only unmanaged resources.
protected override void Dispose(bool disposing)
{
DrawItem -= OnDrawItem;
base.Dispose(disposing);
}
///
/// Gets or sets the enumeration of displayed ESI keys.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable ESIKeys
{
get { return m_esiKeys; }
set
{
m_esiKeys.Clear();
if (value != null)
m_esiKeys.AddRange(value);
UpdateContent();
}
}
///
/// Gets the size of the check box.
///
/// The size of the check box.
internal static Size CheckBoxSize => new Size(12, 12);
///
/// Updates the content.
///
private void UpdateContent()
{
if (!Visible)
{
m_pendingUpdate = true;
return;
}
m_pendingUpdate = false;
int scrollBarPosition = TopIndex;
ESIKey oldSelection = SelectedItem as ESIKey;
BeginUpdate();
try
{
Items.Clear();
foreach (ESIKey apiKey in ESIKeys)
{
Items.Add(apiKey);
if (apiKey == oldSelection)
SelectedIndex = Items.Count - 1;
}
}
finally
{
EndUpdate();
TopIndex = scrollBarPosition;
}
}
///
/// When the visibility changes, we check whether there is an update pending.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (Visible && m_pendingUpdate)
UpdateContent();
}
///
/// Draws the ESI key info.
///
/// The sender.
/// The instance containing the event data.
private void OnDrawItem(object sender, DrawItemEventArgs e)
{
ItemHeight = m_boldFont.Height + m_middleFont.Height + m_smallBoldFont.Height * 2;
// Background
Graphics g = e.Graphics;
bool isSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
Brush fontBrush = isSelected ? SystemBrushes.HighlightText : SystemBrushes.ControlText;
e.DrawBackground();
if (e.Index < 0 || e.Index >= Items.Count)
return;
ESIKey esiKey = (ESIKey)Items[e.Index];
Image icon = GetIcon(esiKey);
Margin = new Padding((ItemHeight - icon.Height) / 2);
int left = e.Bounds.Left + Margin.Left;
int top = e.Bounds.Top + Margin.Top / 4;
// Draws the checbox
CheckBoxRenderer.DrawCheckBox(g, new Point(left, (ItemHeight - CheckBoxSize.Height) / 2),
esiKey.Monitored ? CheckBoxState.CheckedNormal : CheckBoxState.UncheckedNormal);
left += CheckBoxSize.Width + Margin.Left * 2;
// Draws the picture of the API key type
g.DrawImage(icon, new Rectangle(left, top + Margin.Top, icon.Width, icon.Height));
// Texts drawing
DrawTexts(g, esiKey, left, top, fontBrush, icon);
e.DrawFocusRectangle();
}
///
/// Draws the texts.
///
/// The top.
/// The g.
/// The ESI key.
/// The left.
/// The font brush.
/// The icon.
private void DrawTexts(Graphics g, ESIKey esiKey, int left, int top, Brush fontBrush, Image icon)
{
// Draws the texts on the upper third
left += icon.Width + Margin.Left;
// Api key ID
string apiKeyId = esiKey.ID.ToString(CultureConstants.InvariantCulture);
g.DrawString(apiKeyId, m_boldFont, fontBrush, new Point(left, top + 2));
int indentedLeft = left + g.MeasureString(apiKeyId, m_boldFont).ToSize().Width + Margin.Left * 2;
// Api key verification code
string tokenText = string.IsNullOrEmpty(esiKey.AccessToken) ? "No access token" : "Access token present";
g.DrawString(tokenText, Font, fontBrush, new Point(indentedLeft, top));
indentedLeft += g.MeasureString(esiKey.AccessToken, Font).ToSize().Width + Margin.Left * 2;
// Draw the texts on the middle third
top += g.MeasureString(apiKeyId, Font).ToSize().Height;
#if false
// Account header
string accountHeader = "Account";
g.DrawString(accountHeader, m_boldFont, fontBrush, new Point(left, top));
indentedLeft = left + g.MeasureString(accountHeader, m_boldFont).ToSize().Width + Margin.Left * 2;
// Account created
string accountCreatedText = esiKey.AccountCreated != DateTime.MinValue
? esiKey.AccountCreated.ToLocalTime().ToString(CultureConstants.DefaultCulture)
: "-";
string accountCreated = $"Created: {accountCreatedText}";
g.DrawString(accountCreated, m_middleFont, fontBrush, new Point(indentedLeft, top));
indentedLeft += g.MeasureString(accountCreated, m_middleFont).ToSize().Width + Margin.Left * 2;
// Account paid until
string accountPaidUntilText = esiKey.AccountExpires != DateTime.MinValue
? esiKey.AccountExpires.ToLocalTime().ToString(CultureConstants.DefaultCulture)
: "-";
string accountPaidUntil = $"Paid Until: {accountPaidUntilText}";
g.DrawString(accountPaidUntil, m_middleFont, fontBrush, new Point(indentedLeft, top));
indentedLeft += g.MeasureString(accountPaidUntil, m_middleFont).ToSize().Width + Margin.Left * 2;
// Account status header
string accountStatusHeader = "Status: ";
g.DrawString(accountStatusHeader, m_middleFont, fontBrush, new Point(indentedLeft, top));
indentedLeft += g.MeasureString(accountStatusHeader, m_middleFont).ToSize().Width;
// Account status body
string accountStatusBody = esiKey.AccountExpires != DateTime.MinValue
? esiKey.AccountExpires > DateTime.UtcNow
? "Active"
: "Expired"
: "-";
Brush accountStatusBrush = esiKey.AccountExpires != DateTime.MinValue
? new SolidBrush(esiKey.AccountExpires > DateTime.UtcNow ? Color.DarkGreen : Color.Red)
: fontBrush;
g.DrawString(accountStatusBody, m_middleFont, accountStatusBrush, new Point(indentedLeft, top));
// Draws the texts on the lower third
top += g.MeasureString(accountCreated, m_middleFont).ToSize().Height;
#endif
bool isFirst = true;
foreach (CharacterIdentity identity in esiKey.CharacterIdentities)
{
// Draws "; " between ids
if (!isFirst)
{
g.DrawString("; ", m_smallFont, fontBrush, new Point(left, top));
left += g.MeasureString("; ", Font).ToSize().Width;
}
isFirst = false;
// Selects font
Font font = m_smallFont;
CCPCharacter ccpCharacter = identity.CCPCharacter;
if (ccpCharacter != null && ccpCharacter.Monitored)
font = m_smallBoldFont;
// Draws character's name
g.DrawString(identity.CharacterName, font, fontBrush, new Point(left, top));
left += g.MeasureString(identity.CharacterName, font).ToSize().Width;
}
}
///
/// Gets the icon.
///
/// The API key.
///
private static Image GetIcon(ESIKey apiKey)
{
Image icon;
if (apiKey.HasError)
icon = Resources.KeyWrong32;
else
icon = Resources.DefaultCharacterImage32;
return icon;
}
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeysManagementWindow.Designer.cs
================================================
using EVEMon.Common.Controls.MultiPanel;
namespace EVEMon.ApiCredentialsManagement
{
partial class EsiKeysManagementWindow
{
///
/// 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.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
"",
"CCP",
"987654321",
"John Doe",
"123456",
"Auto",
"(none)"}, 0);
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EsiKeysManagementWindow));
this.esiKeysLabel = new System.Windows.Forms.Label();
this.charactersLabel = new System.Windows.Forms.Label();
this.esiKeyListLabel = new System.Windows.Forms.Label();
this.charactersListLabel = new System.Windows.Forms.Label();
this.closeButton = new System.Windows.Forms.Button();
this.tabControl = new System.Windows.Forms.TabControl();
this.charactersTabPage = new System.Windows.Forms.TabPage();
this.charactersPagePanel = new System.Windows.Forms.Panel();
this.charactersMultiPanel = new EVEMon.Common.Controls.MultiPanel.MultiPanel();
this.charactersListPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.charactersListView = new System.Windows.Forms.ListView();
this.columnMonitored = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnESIKeyID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnUri = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.noCharactersPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.charactersToolStrip = new System.Windows.Forms.ToolStrip();
this.importCharacterMenu = new System.Windows.Forms.ToolStripButton();
this.deleteCharacterMenu = new System.Windows.Forms.ToolStripButton();
this.editUriMenu = new System.Windows.Forms.ToolStripButton();
this.groupingMenu = new System.Windows.Forms.ToolStripButton();
this.esiKeysTabPage = new System.Windows.Forms.TabPage();
this.esiKeysPagePanel = new System.Windows.Forms.Panel();
this.esiKeysMultiPanel = new EVEMon.Common.Controls.MultiPanel.MultiPanel();
this.esiKeysListPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.esiKeysListBox = new EVEMon.ApiCredentialsManagement.EsiKeysListBox();
this.noESIKeysPage = new EVEMon.Common.Controls.MultiPanel.MultiPanelPage();
this.esiKeysToolStrip = new System.Windows.Forms.ToolStrip();
this.addESIKeyMenu = new System.Windows.Forms.ToolStripButton();
this.deleteESIKeyMenu = new System.Windows.Forms.ToolStripButton();
this.editESIKeyMenu = new System.Windows.Forms.ToolStripButton();
this.tabControl.SuspendLayout();
this.charactersTabPage.SuspendLayout();
this.charactersPagePanel.SuspendLayout();
this.charactersMultiPanel.SuspendLayout();
this.charactersListPage.SuspendLayout();
this.noCharactersPage.SuspendLayout();
this.charactersToolStrip.SuspendLayout();
this.esiKeysTabPage.SuspendLayout();
this.esiKeysPagePanel.SuspendLayout();
this.esiKeysMultiPanel.SuspendLayout();
this.esiKeysListPage.SuspendLayout();
this.noESIKeysPage.SuspendLayout();
this.esiKeysToolStrip.SuspendLayout();
this.SuspendLayout();
//
// esiKeysLabel
//
this.esiKeysLabel.AutoSize = true;
this.esiKeysLabel.Dock = System.Windows.Forms.DockStyle.Top;
this.esiKeysLabel.ForeColor = System.Drawing.SystemColors.Highlight;
this.esiKeysLabel.Location = new System.Drawing.Point(3, 3);
this.esiKeysLabel.Name = "esiKeysLabel";
this.esiKeysLabel.Size = new System.Drawing.Size(50, 13);
this.esiKeysLabel.TabIndex = 1;
this.esiKeysLabel.Text = "ESI Keys";
//
// charactersLabel
//
this.charactersLabel.AutoSize = true;
this.charactersLabel.Dock = System.Windows.Forms.DockStyle.Top;
this.charactersLabel.ForeColor = System.Drawing.SystemColors.Highlight;
this.charactersLabel.Location = new System.Drawing.Point(3, 3);
this.charactersLabel.Name = "charactersLabel";
this.charactersLabel.Size = new System.Drawing.Size(58, 13);
this.charactersLabel.TabIndex = 5;
this.charactersLabel.Text = "Characters";
//
// esiKeyListLabel
//
this.esiKeyListLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.esiKeyListLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
this.esiKeyListLabel.Location = new System.Drawing.Point(0, 0);
this.esiKeyListLabel.Name = "esiKeyListLabel";
this.esiKeyListLabel.Size = new System.Drawing.Size(796, 318);
this.esiKeyListLabel.TabIndex = 0;
this.esiKeyListLabel.Text = "First add your ESI key using the above buttons.";
this.esiKeyListLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// charactersListLabel
//
this.charactersListLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.charactersListLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
this.charactersListLabel.Location = new System.Drawing.Point(0, 0);
this.charactersListLabel.Name = "charactersListLabel";
this.charactersListLabel.Size = new System.Drawing.Size(796, 318);
this.charactersListLabel.TabIndex = 10;
this.charactersListLabel.Text = "First add your ESI key at ESI Keys section, characters will then appear in this l" +
"ist.\r\nYou can also import XML character sheets from files or URLs.";
this.charactersListLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// closeButton
//
this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.closeButton.CausesValidation = false;
this.closeButton.Location = new System.Drawing.Point(732, 406);
this.closeButton.Name = "closeButton";
this.closeButton.Size = new System.Drawing.Size(90, 23);
this.closeButton.TabIndex = 9;
this.closeButton.Text = "&Close";
this.closeButton.UseVisualStyleBackColor = true;
this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
//
// tabControl
//
this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl.Controls.Add(this.charactersTabPage);
this.tabControl.Controls.Add(this.esiKeysTabPage);
this.tabControl.Location = new System.Drawing.Point(12, 12);
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
this.tabControl.Size = new System.Drawing.Size(810, 388);
this.tabControl.TabIndex = 12;
//
// charactersTabPage
//
this.charactersTabPage.Controls.Add(this.charactersPagePanel);
this.charactersTabPage.Controls.Add(this.charactersLabel);
this.charactersTabPage.Location = new System.Drawing.Point(4, 22);
this.charactersTabPage.Name = "charactersTabPage";
this.charactersTabPage.Padding = new System.Windows.Forms.Padding(3);
this.charactersTabPage.Size = new System.Drawing.Size(802, 362);
this.charactersTabPage.TabIndex = 1;
this.charactersTabPage.Text = "Characters";
this.charactersTabPage.UseVisualStyleBackColor = true;
//
// charactersPagePanel
//
this.charactersPagePanel.Controls.Add(this.charactersMultiPanel);
this.charactersPagePanel.Controls.Add(this.charactersToolStrip);
this.charactersPagePanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.charactersPagePanel.Location = new System.Drawing.Point(3, 16);
this.charactersPagePanel.Name = "charactersPagePanel";
this.charactersPagePanel.Size = new System.Drawing.Size(796, 343);
this.charactersPagePanel.TabIndex = 16;
//
// charactersMultiPanel
//
this.charactersMultiPanel.Controls.Add(this.charactersListPage);
this.charactersMultiPanel.Controls.Add(this.noCharactersPage);
this.charactersMultiPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.charactersMultiPanel.Location = new System.Drawing.Point(0, 25);
this.charactersMultiPanel.Name = "charactersMultiPanel";
this.charactersMultiPanel.SelectedPage = this.charactersListPage;
this.charactersMultiPanel.Size = new System.Drawing.Size(796, 318);
this.charactersMultiPanel.TabIndex = 15;
//
// charactersListPage
//
this.charactersListPage.BackColor = System.Drawing.SystemColors.Window;
this.charactersListPage.Controls.Add(this.charactersListView);
this.charactersListPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.charactersListPage.Location = new System.Drawing.Point(0, 0);
this.charactersListPage.Name = "charactersListPage";
this.charactersListPage.Size = new System.Drawing.Size(796, 318);
this.charactersListPage.TabIndex = 0;
this.charactersListPage.Text = "charactersListPage";
//
// charactersListView
//
this.charactersListView.CheckBoxes = true;
this.charactersListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnMonitored,
this.columnType,
this.columnID,
this.columnName,
this.columnESIKeyID,
this.columnStatus,
this.columnUri});
this.charactersListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.charactersListView.FullRowSelect = true;
this.charactersListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
listViewItem1.StateImageIndex = 0;
this.charactersListView.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1});
this.charactersListView.Location = new System.Drawing.Point(0, 0);
this.charactersListView.MultiSelect = false;
this.charactersListView.Name = "charactersListView";
this.charactersListView.Size = new System.Drawing.Size(796, 318);
this.charactersListView.TabIndex = 12;
this.charactersListView.UseCompatibleStateImageBehavior = false;
this.charactersListView.View = System.Windows.Forms.View.Details;
this.charactersListView.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.charactersListView_ColumnWidthChanging);
this.charactersListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.charactersListView_ItemChecked);
this.charactersListView.SelectedIndexChanged += new System.EventHandler(this.charactersListView_SelectedIndexChanged);
this.charactersListView.DoubleClick += new System.EventHandler(this.charactersListView_DoubleClick);
this.charactersListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.charactersListView_KeyDown);
//
// columnMonitored
//
this.columnMonitored.Text = "";
this.columnMonitored.Width = 36;
//
// columnType
//
this.columnType.Text = "Type";
this.columnType.Width = 49;
//
// columnID
//
this.columnID.Text = "ID";
this.columnID.Width = 84;
//
// columnName
//
this.columnName.Text = "Name";
this.columnName.Width = 117;
//
// columnESIKeyID
//
this.columnESIKeyID.Text = "Key ID";
this.columnESIKeyID.Width = 75;
//
// columnStatus
//
this.columnStatus.Text = "Status";
//
// columnUri
//
this.columnUri.Text = "Uri";
this.columnUri.Width = 358;
//
// noCharactersPage
//
this.noCharactersPage.Controls.Add(this.charactersListLabel);
this.noCharactersPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.noCharactersPage.Location = new System.Drawing.Point(0, 0);
this.noCharactersPage.Name = "noCharactersPage";
this.noCharactersPage.Size = new System.Drawing.Size(796, 318);
this.noCharactersPage.TabIndex = 1;
this.noCharactersPage.Text = "noCharactersPage";
//
// charactersToolStrip
//
this.charactersToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.charactersToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.importCharacterMenu,
this.deleteCharacterMenu,
this.editUriMenu,
this.groupingMenu});
this.charactersToolStrip.Location = new System.Drawing.Point(0, 0);
this.charactersToolStrip.Name = "charactersToolStrip";
this.charactersToolStrip.Size = new System.Drawing.Size(796, 25);
this.charactersToolStrip.TabIndex = 13;
//
// importCharacterMenu
//
this.importCharacterMenu.Image = ((System.Drawing.Image)(resources.GetObject("importCharacterMenu.Image")));
this.importCharacterMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.importCharacterMenu.Name = "importCharacterMenu";
this.importCharacterMenu.Size = new System.Drawing.Size(72, 22);
this.importCharacterMenu.Text = "&Import...";
this.importCharacterMenu.Click += new System.EventHandler(this.importCharacterMenu_Click);
//
// deleteCharacterMenu
//
this.deleteCharacterMenu.Enabled = false;
this.deleteCharacterMenu.Image = ((System.Drawing.Image)(resources.GetObject("deleteCharacterMenu.Image")));
this.deleteCharacterMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.deleteCharacterMenu.Name = "deleteCharacterMenu";
this.deleteCharacterMenu.Size = new System.Drawing.Size(69, 22);
this.deleteCharacterMenu.Text = "&Delete...";
this.deleteCharacterMenu.Click += new System.EventHandler(this.deleteCharacterMenu_Click);
//
// editUriMenu
//
this.editUriMenu.Enabled = false;
this.editUriMenu.Image = ((System.Drawing.Image)(resources.GetObject("editUriMenu.Image")));
this.editUriMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.editUriMenu.Name = "editUriMenu";
this.editUriMenu.Size = new System.Drawing.Size(74, 22);
this.editUriMenu.Text = "&Edit Uri...";
this.editUriMenu.Click += new System.EventHandler(this.editUriButton_Click);
//
// groupingMenu
//
this.groupingMenu.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.groupingMenu.Checked = true;
this.groupingMenu.CheckOnClick = true;
this.groupingMenu.CheckState = System.Windows.Forms.CheckState.Checked;
this.groupingMenu.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.groupingMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.groupingMenu.Name = "groupingMenu";
this.groupingMenu.Size = new System.Drawing.Size(101, 22);
this.groupingMenu.Text = "&Group characters";
this.groupingMenu.Click += new System.EventHandler(this.groupingMenu_Click);
//
// esiKeysTabPage
//
this.esiKeysTabPage.Controls.Add(this.esiKeysPagePanel);
this.esiKeysTabPage.Controls.Add(this.esiKeysLabel);
this.esiKeysTabPage.Location = new System.Drawing.Point(4, 22);
this.esiKeysTabPage.Name = "esiKeysTabPage";
this.esiKeysTabPage.Padding = new System.Windows.Forms.Padding(3);
this.esiKeysTabPage.Size = new System.Drawing.Size(802, 362);
this.esiKeysTabPage.TabIndex = 0;
this.esiKeysTabPage.Text = "ESI Keys";
this.esiKeysTabPage.UseVisualStyleBackColor = true;
//
// esiKeysPagePanel
//
this.esiKeysPagePanel.Controls.Add(this.esiKeysMultiPanel);
this.esiKeysPagePanel.Controls.Add(this.esiKeysToolStrip);
this.esiKeysPagePanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.esiKeysPagePanel.Location = new System.Drawing.Point(3, 16);
this.esiKeysPagePanel.Name = "esiKeysPagePanel";
this.esiKeysPagePanel.Size = new System.Drawing.Size(796, 343);
this.esiKeysPagePanel.TabIndex = 17;
//
// esiKeysMultiPanel
//
this.esiKeysMultiPanel.Controls.Add(this.esiKeysListPage);
this.esiKeysMultiPanel.Controls.Add(this.noESIKeysPage);
this.esiKeysMultiPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.esiKeysMultiPanel.Location = new System.Drawing.Point(0, 25);
this.esiKeysMultiPanel.Name = "esiKeysMultiPanel";
this.esiKeysMultiPanel.SelectedPage = this.noESIKeysPage;
this.esiKeysMultiPanel.Size = new System.Drawing.Size(796, 318);
this.esiKeysMultiPanel.TabIndex = 16;
//
// esiKeysListPage
//
this.esiKeysListPage.BackColor = System.Drawing.SystemColors.Window;
this.esiKeysListPage.Controls.Add(this.esiKeysListBox);
this.esiKeysListPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.esiKeysListPage.Location = new System.Drawing.Point(0, 0);
this.esiKeysListPage.Name = "esiKeysListPage";
this.esiKeysListPage.Size = new System.Drawing.Size(796, 318);
this.esiKeysListPage.TabIndex = 0;
this.esiKeysListPage.Text = "";
//
// esiKeysListBox
//
this.esiKeysListBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.esiKeysListBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.esiKeysListBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.esiKeysListBox.FormattingEnabled = true;
this.esiKeysListBox.ItemHeight = 46;
this.esiKeysListBox.Location = new System.Drawing.Point(0, 0);
this.esiKeysListBox.Name = "esiKeysListBox";
this.esiKeysListBox.Size = new System.Drawing.Size(796, 318);
this.esiKeysListBox.TabIndex = 0;
this.esiKeysListBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.apiKeysListBox_MouseClick);
this.esiKeysListBox.SelectedIndexChanged += new System.EventHandler(this.apiKeysListBox_SelectedIndexChanged);
this.esiKeysListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.esiKeysListBox_KeyDown);
this.esiKeysListBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.apiKeysListBox_MouseDoubleClick);
//
// noESIKeysPage
//
this.noESIKeysPage.Controls.Add(this.esiKeyListLabel);
this.noESIKeysPage.Dock = System.Windows.Forms.DockStyle.Fill;
this.noESIKeysPage.Location = new System.Drawing.Point(0, 0);
this.noESIKeysPage.Name = "noESIKeysPage";
this.noESIKeysPage.Size = new System.Drawing.Size(796, 318);
this.noESIKeysPage.TabIndex = 1;
this.noESIKeysPage.Text = "";
//
// esiKeysToolStrip
//
this.esiKeysToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.esiKeysToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addESIKeyMenu,
this.deleteESIKeyMenu,
this.editESIKeyMenu});
this.esiKeysToolStrip.Location = new System.Drawing.Point(0, 0);
this.esiKeysToolStrip.Name = "esiKeysToolStrip";
this.esiKeysToolStrip.Size = new System.Drawing.Size(796, 25);
this.esiKeysToolStrip.TabIndex = 3;
//
// addESIKeyMenu
//
this.addESIKeyMenu.Image = ((System.Drawing.Image)(resources.GetObject("addESIKeyMenu.Image")));
this.addESIKeyMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.addESIKeyMenu.Name = "addESIKeyMenu";
this.addESIKeyMenu.Size = new System.Drawing.Size(58, 22);
this.addESIKeyMenu.Text = "&Add...";
this.addESIKeyMenu.Click += new System.EventHandler(this.addESIKeyMenu_Click);
//
// deleteESIKeyMenu
//
this.deleteESIKeyMenu.Enabled = false;
this.deleteESIKeyMenu.Image = ((System.Drawing.Image)(resources.GetObject("deleteESIKeyMenu.Image")));
this.deleteESIKeyMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.deleteESIKeyMenu.Name = "deleteESIKeyMenu";
this.deleteESIKeyMenu.Size = new System.Drawing.Size(69, 22);
this.deleteESIKeyMenu.Text = "&Delete...";
this.deleteESIKeyMenu.Click += new System.EventHandler(this.deleteESIKeyMenu_Click);
//
// editESIKeyMenu
//
this.editESIKeyMenu.Enabled = false;
this.editESIKeyMenu.Image = ((System.Drawing.Image)(resources.GetObject("editESIKeyMenu.Image")));
this.editESIKeyMenu.ImageTransparentColor = System.Drawing.Color.Magenta;
this.editESIKeyMenu.Name = "editESIKeyMenu";
this.editESIKeyMenu.Size = new System.Drawing.Size(56, 22);
this.editESIKeyMenu.Text = "&Edit...";
this.editESIKeyMenu.Click += new System.EventHandler(this.editAPIKeyMenu_Click);
//
// EsiKeysManagementWindow
//
this.AcceptButton = this.closeButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Window;
this.CausesValidation = false;
this.ClientSize = new System.Drawing.Size(834, 441);
this.Controls.Add(this.tabControl);
this.Controls.Add(this.closeButton);
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(600, 400);
this.Name = "EsiKeysManagementWindow";
this.Text = "ESI Keys Management";
this.tabControl.ResumeLayout(false);
this.charactersTabPage.ResumeLayout(false);
this.charactersTabPage.PerformLayout();
this.charactersPagePanel.ResumeLayout(false);
this.charactersPagePanel.PerformLayout();
this.charactersMultiPanel.ResumeLayout(false);
this.charactersListPage.ResumeLayout(false);
this.noCharactersPage.ResumeLayout(false);
this.charactersToolStrip.ResumeLayout(false);
this.charactersToolStrip.PerformLayout();
this.esiKeysTabPage.ResumeLayout(false);
this.esiKeysTabPage.PerformLayout();
this.esiKeysPagePanel.ResumeLayout(false);
this.esiKeysPagePanel.PerformLayout();
this.esiKeysMultiPanel.ResumeLayout(false);
this.esiKeysListPage.ResumeLayout(false);
this.noESIKeysPage.ResumeLayout(false);
this.esiKeysToolStrip.ResumeLayout(false);
this.esiKeysToolStrip.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button closeButton;
private System.Windows.Forms.TabControl tabControl;
private System.Windows.Forms.TabPage esiKeysTabPage;
private System.Windows.Forms.TabPage charactersTabPage;
private System.Windows.Forms.ListView charactersListView;
private System.Windows.Forms.ColumnHeader columnType;
private System.Windows.Forms.ColumnHeader columnName;
private System.Windows.Forms.ColumnHeader columnESIKeyID;
private System.Windows.Forms.ColumnHeader columnUri;
private System.Windows.Forms.ColumnHeader columnMonitored;
private MultiPanel esiKeysMultiPanel;
private MultiPanelPage esiKeysListPage;
private MultiPanelPage noESIKeysPage;
private MultiPanel charactersMultiPanel;
private MultiPanelPage charactersListPage;
private MultiPanelPage noCharactersPage;
private System.Windows.Forms.ToolStrip charactersToolStrip;
private System.Windows.Forms.ToolStripButton importCharacterMenu;
private System.Windows.Forms.ToolStripButton deleteCharacterMenu;
private System.Windows.Forms.ToolStripButton editUriMenu;
private System.Windows.Forms.ToolStripButton groupingMenu;
private System.Windows.Forms.ToolStrip esiKeysToolStrip;
private System.Windows.Forms.ToolStripButton addESIKeyMenu;
private System.Windows.Forms.ToolStripButton deleteESIKeyMenu;
private System.Windows.Forms.ToolStripButton editESIKeyMenu;
private System.Windows.Forms.Panel charactersPagePanel;
private System.Windows.Forms.Panel esiKeysPagePanel;
private System.Windows.Forms.Label esiKeysLabel;
private System.Windows.Forms.Label charactersLabel;
private System.Windows.Forms.Label esiKeyListLabel;
private System.Windows.Forms.Label charactersListLabel;
private EsiKeysListBox esiKeysListBox;
private System.Windows.Forms.ColumnHeader columnID;
private System.Windows.Forms.ColumnHeader columnStatus;
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeysManagementWindow.cs
================================================
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations.CCPAPI;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
namespace EVEMon.ApiCredentialsManagement
{
public partial class EsiKeysManagementWindow : EVEMonForm
{
private readonly Dictionary m_monitoredCharacters = new Dictionary();
private int m_refreshingCharactersCounter;
///
/// Constructor.
///
public EsiKeysManagementWindow()
{
InitializeComponent();
esiKeysListBox.Font = FontFactory.GetFont("Tahoma", 9.75f);
charactersListView.Font = FontFactory.GetFont("Tahoma", 9.75f);
esiKeysLabel.Font = FontFactory.GetFont("Tahoma", 12F);
esiKeyListLabel.Font = FontFactory.GetFont("Tahoma", 12F);
charactersLabel.Font = FontFactory.GetFont("Tahoma", 12F);
charactersListLabel.Font = FontFactory.GetFont("Tahoma", 12F);
}
///
/// On loading, intialize the controls and subscribe events.
///
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode)
return;
ListViewHelper.EnableDoubleBuffer(charactersListView);
EveMonClient.ESIKeyCollectionChanged += EveMonClient_ESIKeyCollectionChanged;
EveMonClient.ESIKeyInfoUpdated += EveMonClient_ESIKeyInfoUpdated;
EveMonClient.CharacterCollectionChanged += EveMonClient_CharacterCollectionChanged;
EveMonClient.CharacterUpdated += EveMonClient_CharacterUpdated;
EveMonClient.AccountStatusUpdated += EveMonClient_AccountStatusUpdated;
Disposed += OnDisposing;
UpdateESIKeysList();
UpdateCharactersList();
AdjustLastColumn();
// Selects the second page if no API key known so far
if (EveMonClient.Characters.Count == 0)
tabControl.SelectedIndex = 1;
}
///
/// Occurs on disposing.
///
/// The sender.
/// The instance containing the event data.
private void OnDisposing(object sender, EventArgs e)
{
// Unsubscribe events
EveMonClient.ESIKeyCollectionChanged -= EveMonClient_ESIKeyCollectionChanged;
EveMonClient.ESIKeyInfoUpdated -= EveMonClient_ESIKeyInfoUpdated;
EveMonClient.CharacterCollectionChanged -= EveMonClient_CharacterCollectionChanged;
EveMonClient.CharacterUpdated -= EveMonClient_CharacterUpdated;
EveMonClient.AccountStatusUpdated -= EveMonClient_AccountStatusUpdated;
Disposed -= OnDisposing;
// Update the monitored status of selected characters
foreach (var monitoredCharacter in m_monitoredCharacters)
if (EveMonClient.Characters.Contains(monitoredCharacter.Key))
monitoredCharacter.Key.Monitored = monitoredCharacter.Value;
}
///
/// When the size changes, we adjust the characters' columns.
///
///
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
if (charactersListView != null)
AdjustLastColumn();
}
#region Global Events Handlers
///
/// When the ESI key collection changes, we update the content.
///
///
///
private void EveMonClient_ESIKeyCollectionChanged(object sender, EventArgs e)
{
UpdateESIKeysList();
}
///
/// When the ESI key info updates, we update the content.
///
///
///
private void EveMonClient_ESIKeyInfoUpdated(object sender, EventArgs e)
{
if (!Visible)
return;
esiKeysListBox.Invalidate();
}
///
/// When the characters collection changed, we update the characters list.
///
///
///
private void EveMonClient_CharacterCollectionChanged(object sender, EventArgs e)
{
UpdateCharactersList();
}
///
/// When the character changes, the displayed names changes too.
///
///
///
private void EveMonClient_CharacterUpdated(object sender, CharacterChangedEventArgs e)
{
UpdateCharactersList();
}
///
/// When the account status updates, we update the content.
///
///
///
private void EveMonClient_AccountStatusUpdated(object sender, EventArgs e)
{
if (!Visible)
return;
esiKeysListBox.Invalidate();
}
#endregion
#region ESI keys management
///
/// Updates the ESI keys list.
///
private void UpdateESIKeysList()
{
if (!Visible)
return;
esiKeysListBox.ESIKeys = EveMonClient.ESIKeys;
esiKeysMultiPanel.SelectedPage = EveMonClient.ESIKeys.Any() ? esiKeysListPage : noESIKeysPage;
}
///
/// Handles the MouseClick event of the apiKeysListBox control.
///
/// The source of the event.
/// The instance containing the event data.
private void apiKeysListBox_MouseClick(object sender, MouseEventArgs e)
{
bool itemClicked = false;
// Search for the clicked item
for (int index = 0; index < esiKeysListBox.ESIKeys.Count(); index++)
{
Rectangle rect = esiKeysListBox.GetItemRectangle(index);
// Did click occured generally on the item ?
if (!rect.Contains(e.Location))
continue;
itemClicked = true;
int yOffset = (rect.Height - EsiKeysListBox.CheckBoxSize.Height) / 2;
Rectangle cbRect = new Rectangle(rect.Left + esiKeysListBox.Margin.Left, rect.Top + yOffset,
EsiKeysListBox.CheckBoxSize.Width, EsiKeysListBox.CheckBoxSize.Height);
cbRect.Inflate(2, 2);
// Did click occured on the checkbox ?
if (e.Button == MouseButtons.Middle || !cbRect.Contains(e.Location))
continue;
ESIKey esiKey = esiKeysListBox.ESIKeys.ElementAt(index);
esiKey.Monitored = !esiKey.Monitored;
esiKeysListBox.Invalidate();
}
if (!itemClicked)
esiKeysListBox.SelectedIndex = -1;
}
///
/// When the selection changes, we update the controls.
///
///
///
private void apiKeysListBox_SelectedIndexChanged(object sender, EventArgs e)
{
deleteESIKeyMenu.Enabled = esiKeysListBox.SelectedIndex != -1;
editESIKeyMenu.Enabled = esiKeysListBox.SelectedIndex != -1;
}
///
/// On double click, forces the edition.
///
///
///
private void apiKeysListBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
// Search for the double-clicked item
int index = 0;
foreach (ESIKey esiKey in esiKeysListBox.ESIKeys)
{
Rectangle rect = esiKeysListBox.GetItemRectangle(index);
index++;
if (!rect.Contains(e.Location))
continue;
// Open the edition window
using (EsiKeyUpdateOrAdditionWindow window = new EsiKeyUpdateOrAdditionWindow(esiKey))
{
window.ShowDialog(this);
return;
}
}
}
///
/// API key toolbar > Edit.
///
///
///
private void editAPIKeyMenu_Click(object sender, EventArgs e)
{
ESIKey esiKey = esiKeysListBox.ESIKeys.ElementAt(esiKeysListBox.SelectedIndex);
using (EsiKeyUpdateOrAdditionWindow window = new EsiKeyUpdateOrAdditionWindow(esiKey))
{
window.ShowDialog(this);
}
}
///
/// ESI key toolbar > Add.
///
///
///
private void addESIKeyMenu_Click(object sender, EventArgs e)
{
using (EsiKeyUpdateOrAdditionWindow window = new EsiKeyUpdateOrAdditionWindow())
{
window.ShowDialog(this);
}
}
///
/// Accounts toolbar > Delete
///
///
///
private void deleteESIKeyMenu_Click(object sender, EventArgs e)
{
if (esiKeysListBox.SelectedIndex == -1)
return;
ESIKey apiKey = esiKeysListBox.ESIKeys.ElementAt(esiKeysListBox.SelectedIndex);
using (EsiKeyDeletionWindow window = new EsiKeyDeletionWindow(apiKey))
{
window.ShowDialog(this);
}
deleteESIKeyMenu.Enabled = esiKeysListBox.SelectedIndex != -1;
editESIKeyMenu.Enabled = esiKeysListBox.SelectedIndex != -1;
}
///
/// Handles the KeyDown event of the esiKeysListBox control.
///
///
///
private void esiKeysListBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
deleteESIKeyMenu_Click(sender, e);
}
#endregion
#region Characters management
///
/// Updates the characters list.
///
private void UpdateCharactersList()
{
if (!Visible)
return;
// Begin the update
m_refreshingCharactersCounter++;
// Update the list view item
UpdateCharactersListContent();
// Invalidates the API keys list
esiKeysListBox.Invalidate();
// Make a help message appears when no characters exist
charactersMultiPanel.SelectedPage = EveMonClient.Characters.Count == 0 ? noCharactersPage : charactersListPage;
// End of the update
m_refreshingCharactersCounter--;
}
///
/// Recreate the items in the characters listview
///
private void UpdateCharactersListContent()
{
int position = charactersListView.GetVerticalScrollBarPosition();
charactersListView.BeginUpdate();
try
{
// Retrieve current selection and grouping option
List oldSelection = new List(charactersListView.SelectedItems.Cast()
.Select(x => x.Tag).OfType());
charactersListView.Groups.Clear();
charactersListView.Items.Clear();
// Grouping (no ESI key, ESI key #1, ESI key #2, character files, character urls)
bool isGrouping = groupingMenu.Checked;
ListViewGroup noESIKeyGroup = new ListViewGroup("No ESI key");
ListViewGroup fileGroup = new ListViewGroup("Character files");
ListViewGroup urlGroup = new ListViewGroup("Character urls");
Dictionary apiKeyGroups = new Dictionary();
if (isGrouping)
ArrangeByGroup(fileGroup, apiKeyGroups, noESIKeyGroup, urlGroup);
// Add items
foreach (Character character in EveMonClient.Characters.OrderBy(x => x.Name))
{
ListViewItem item = new ListViewItem { Checked = character.Monitored, Tag = character };
// Retrieve the texts for the different columns
IEnumerable esiKeys = character.Identity.ESIKeys.OrderBy(esiKey => esiKey.ID);
string apiKeyIDText = esiKeys.Any()
? string.Join(", ", esiKeys.Select(esiKey => esiKey.ID))
: string.Empty;
string typeText = "CCP";
string uriText = "-";
UriCharacter uriCharacter = character as UriCharacter;
if (uriCharacter != null)
{
typeText = uriCharacter.Uri.IsFile ? "File" : "Url";
uriText = uriCharacter.Uri.ToString();
if (isGrouping)
item.Group = uriCharacter.Uri.IsFile ? fileGroup : urlGroup;
}
// Grouping CCP characters
else if (isGrouping)
{
if (!esiKeys.Any())
item.Group = noESIKeyGroup;
else
item.Group = apiKeyGroups[esiKeys.First()];
}
// Add the item and its subitems
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, typeText));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, character.CharacterID.ToString(
CultureConstants.DefaultCulture)));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, character.Name));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, apiKeyIDText));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, character.
EffectiveCharacterStatus.ToString()));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, uriText));
charactersListView.Items.Add(item);
if (oldSelection.Contains(character))
item.Selected = true;
}
// Auto-resize the columns
charactersListView.Columns.Cast().Where(
column => column.Index != charactersListView.Columns.Count - 1).ToList().ForEach(column => column.Width = -2);
AdjustLastColumn();
}
finally
{
charactersListView.EndUpdate();
charactersListView.SetVerticalScrollBarPosition(position);
}
// Forces a refresh of the enabled/disabled items
UpdateControlsUsability();
}
///
/// Arranges the by group.
///
/// The file group.
/// The ESI key groups.
/// The no ESI key group.
/// The URL group.
private void ArrangeByGroup(ListViewGroup fileGroup, Dictionary esiKeyGroups,
ListViewGroup noESIKeyGroup, ListViewGroup urlGroup)
{
bool hasNoESIKey = false;
bool hasFileChars = false;
bool hasUrlChars = false;
// Scroll through listview items to gather the groups
foreach (Character character in EveMonClient.Characters)
{
UriCharacter uriCharacter = character as UriCharacter;
// Uri character ?
if (uriCharacter != null)
{
if (uriCharacter.Uri.IsFile)
hasFileChars = true;
else
hasUrlChars = true;
}
// CCP character ?
else
{
if (!character.Identity.ESIKeys.Any())
hasNoESIKey = true;
else
{
foreach (ESIKey apiKey in character.Identity.ESIKeys.Where(
esiKey => !esiKeyGroups.ContainsKey(esiKey)))
{
esiKeyGroups.Add(apiKey, new ListViewGroup($"Key ID #{apiKey.ID}"));
}
}
}
}
// Add the groups
if (hasNoESIKey)
charactersListView.Groups.Add(noESIKeyGroup);
foreach (ListViewGroup group in esiKeyGroups.Values)
{
charactersListView.Groups.Add(group);
}
if (hasFileChars)
charactersListView.Groups.Add(fileGroup);
if (hasUrlChars)
charactersListView.Groups.Add(urlGroup);
}
///
/// Adjusts the last column width.
///
private void AdjustLastColumn()
{
ColumnHeader lastColumn = charactersListView.Columns[charactersListView.Columns.Count - 1];
int pad = Size.Width - charactersListView.Size.Width;
int width = charactersListView.Columns.Cast().Where(column => column.Index != lastColumn.Index).Select(
column => column.Width).Sum();
int lastColumnMaxWidth = charactersListView.Columns[lastColumn.Index].ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[lastColumn.Index].Text, Font).Width).Concat(
new[] { TextRenderer.MeasureText(charactersListView.Columns[lastColumn.Index].Text, Font).Width }).
Concat(new[] { charactersListView.ClientSize.Width - width - pad }).Max() + pad;
lastColumn.Width = lastColumnMaxWidth;
}
///
/// Updates the controls usability.
///
private void UpdateControlsUsability()
{
// "Edit uri" enabled when an uri char is selected
editUriMenu.Enabled = charactersListView.SelectedItems.Count > 0 &&
charactersListView.SelectedItems[0].Tag is UriCharacter;
// Delete char enabled if one character selected
deleteCharacterMenu.Enabled = charactersListView.SelectedItems.Count > 0;
}
///
/// We monitor/unmonitor characters as they are checked.
///
///
///
private void charactersListView_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (m_refreshingCharactersCounter != 0)
return;
// Add the character with changed monitoring status to the dictionary,
// we will deal with them on closing
Character character = (Character)e.Item.Tag;
m_monitoredCharacters[character] = e.Item.Checked;
}
///
/// Handle the "delete" button.
///
///
///
private void charactersListView_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
deleteCharacterMenu_Click(sender, e);
}
///
/// On double click, we edit if this is an uri character.
///
///
///
private void charactersListView_DoubleClick(object sender, EventArgs e)
{
editUriButton_Click(sender, e);
}
///
/// When the index changes, we enable or disable the toolbar buttons.
///
///
///
private void charactersListView_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateControlsUsability();
}
///
/// Characters toolbar > Import...
///
///
///
private void importCharacterMenu_Click(object sender, EventArgs e)
{
using (CharacterImportationWindow form = new CharacterImportationWindow())
{
form.ShowDialog(this);
}
}
///
/// Characters toolbar > Delete...
///
///
///
private void deleteCharacterMenu_Click(object sender, EventArgs e)
{
// Retrieve the selected URI character
if (charactersListView.SelectedItems.Count == 0)
return;
ListViewItem item = charactersListView.SelectedItems[0];
Character character = item.Tag as Character;
// Opens the character deletion
using (CharacterDeletionWindow window = new CharacterDeletionWindow(character))
{
window.ShowDialog(this);
}
}
///
/// Characters toolbar > Edit Uri...
///
///
///
private void editUriButton_Click(object sender, EventArgs e)
{
// Retrieve the selected URI character
if (charactersListView.SelectedItems.Count == 0)
return;
ListViewItem item = charactersListView.SelectedItems[0];
UriCharacter uriCharacter = item.Tag as UriCharacter;
// Returns if the selected item is not an Uri character
if (uriCharacter == null)
return;
// Opens the importation form
using (CharacterImportationWindow form = new CharacterImportationWindow(uriCharacter))
{
form.ShowDialog(this);
}
}
///
/// Characters toolbar > Group items
///
///
///
private void groupingMenu_Click(object sender, EventArgs e)
{
m_refreshingCharactersCounter++;
UpdateCharactersListContent();
m_refreshingCharactersCounter--;
}
#endregion
#region Local Events
///
/// Close on "close" button click.
///
///
///
private void closeButton_Click(object sender, EventArgs e)
{
Close();
}
///
/// Handles the ColumnWidthChanging event of the charactersListView control.
///
/// The source of the event.
/// The instance containing the event data.
private void charactersListView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
e.Cancel = true;
e.NewWidth = charactersListView.Columns[e.ColumnIndex].Width;
}
#endregion
}
}
================================================
FILE: src/EVEMon/ApiCredentialsManagement/EsiKeysManagementWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
33, 22
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAITSURBVDhPY8AB2OOAYNWqVVvjosK6uBkYxKHixAFubm6x
w4cP3v8PBEd2rf2vLie8AipFNOCqzEu9uWvd/P9F8d7/RbiYjgHFmICYBYhZoWy8QNRYRXqPrSLff2MJ
rv/yQtybgWKCUMwHxGxAzAjEWIFoiLvdieuXT/3ftnjS31g3k39BVnL/jZQkNgLlTIBYFog5gJgZiDEB
0OjAWZ21IO//v3Jmz59We/u/kQ7K/wuCnN8BpcOAWAuIgeEKNgDTFQIcDPErZ/f837Nz27/N9fV/8iOd
/3noS/3PSrL/CQyAXKASCyAGeQV7WPCyMsQvmNb2/8qVK3+2AQ2I8ND/Z6Mk/L/Wx+sX0IBqoBIfIAZ5
AxQOoEBFBRxMDFHT24r+b18/69/GJZP/RnsY/nPREgEaYPsLKN0KxIFADDIAZ2yIxwa7nrp9fs//eqAL
Ip11/qlr6/8XlY/5zSBvvhoo7w/EokCMPQxAQFVGtKQ1Peh/qr/1P2tV0f+cZj6/GLzq/zNYp54DSlsC
MS8Q404L+hoKqQdXTPnv7ev7T8Yl9j9Y886XEBqBVzB41HtBtaACIy3V+Cd3rvzXDStCaEbHMEOwAXZ2
dsXaytK99oHBTyVd0j7BDUHYDtGMwwUgv3GysbGpAmkDIDZkcC3dAtbkWbcKyMeZhJEBKIRBcQyKazYG
lwo/Bo+6lQzutd4gSQRgYAAAxhfLOmTc9f8AAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJBSURBVDhPjZJfSJNhFMbP5tzmPjZKXWrZ0tXKdtFiU8xK
F6yapBe1hehAV4H0B7IYFkmMj6gJRTdFVFhgf25soFLSQlvFMkJE6KJVRIE3devVbhzbd3pe2U24DR/4
wfuec97zvef5XiogXR8UjUZf9wW6bklEVbn42iRJ0obZ2cQiQ59mxnmHpWIsl1qzDEMD/T9nJkY5FOzg
SoP6M2JqoAGluXVRmV3bNsVb603sqjbwlnJpCrH1OUxAC1Qgr8zHvW1zP77Oc+z53Wzv4UbFt9fCTmv1
S+QawWagByVgtdD62MjNsBifkwvxTMTtzvYc2MoXfZ4lpLuAHcDXlQarb7FOT8EXj25zfDqmTMly5kKP
R2l3bORzp9zLMOA8SvYAMUp+L4ylFHxyf5iTyWQmhgbd7Q5lv7WCw51H0mhwFSWdQIwhfBCm/i+9mgIP
hkP8ZnJEmXh6Jxvw7lYO2ivRoDWNdAT4QT0o+Deqev2H5n99ifM1zC+bTeyskbjFKqVw4uEgUaKJ6Azq
8nsgZKs1D0ZO+/ho807lAxHLJepMDdF7mej7Ava7iEIoK/wWHA11/Ymxe+x2N2Xbao0sq1Wi0fIrorSL
aBQlFlDwHZDTbgv++Z3kGwMBPul18GOdJvsXX35LtISTHSgp/hJ1Op01PHTpnd+zb1GWpNRHFWW6ib6N
E6XAXB0umSvNK9G9TKvV2rYTXREeOImeIdbSQHR9Gntc4fJKZREJhzVw3YGHfxZrMbP45+VGohNlRM1Y
Q0T/AGCztFW8+bqAAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAImSURBVDhPY8AB2OOAYNWqVVvjosK6uBkYxKHixAFubm6x
w4cP3v8PBEd2rf2vLie8AipFNOCqzEu9uWvd/P9F8d7/RbiYjgHFmICYBYhZoWy8QNRYRXqPrSLff2MJ
rv/yQtybgWKCUMwHxGxAzAjEWIFoiLvdieuXT/3ftnjS31g3k39BVnL/jZQkNgLlTIBYFog5gJgZiDEB
0OjAWZ21IO//v3Jmz59We/u/kQ7K/wuCnN8BpcOAWAuIgeEKNgDTFQIcDPErZ/f837Nz27/N9fV/8iOd
/3noS/3PSrL/CQyA3BQ/v7h/Jib/b/Z2/wcqxwwLXlaG+AXT2v5fuXLlzzagAREe+v9slIT/1/p4/bKx
spiyurHx/7+IoP8gQ4DKQYGKCjiYGKKmtxX9375+1r/6+vp/0R6G/1y0RP53xrv/njRp0v9t27b9n1aQ
/393ba0pUDnW2BCPDXY9devc7v9AA/5EOuv8C7BW/L9zlsn/i7tM/jc0NPwvLy93AqrDHgYgoCojWtKR
E/k/1d/6n7+dOlzz8gkm/0ODPeKBSniBGHda0NdQSD24Ysp/e2AMrJiOpDnAKhUoDUrWeNMBg5GWavzN
y8f/r58H0Ty7w+S/lZVeM1BKBohBAYc/JbKzsyuumGrz/+j2nv+L+0z++7gabgEKWwExDxATTMYgBZwm
wGiaWAd0doR7JJCvAsSgZIzf6UgAFMIgp4I0gDAoA2FxOgMDADzw0XYSH3YFAAAAAElFTkSuQmCC
182, 24
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKtSURBVDhPYxgIwAHE7BAmYcAoISEhys/PLwjl8+rp6enI
yUloAdmcECFUwKgFBOLi4oogDojOycnJ83ZzzARxubi4JHU1NIzl5CSNQXyQGhQA1Ot048aN29N7my6y
MjDoykiI2OVmpjb4uto2sDAwWAGViPBzsRpzsTKADBADYiaQPjgwN9SuvnX5zP9ZXZX/OVgYSrhYWY1V
pPjqJfmZG5iZGZyUZGVNNJSVLYX5OE0EuFn1gFpEITqhQJCLNdVTXva3sRz7f05WxuZAX8/axMjQNmNN
2UZVacFGTTXlWA0NFXsJYT5ToFOM2dkZlKBaGRiYmZmdFi6Y8KG/sf5fRrD1f09DxbdeHi6bU+Ij+6z0
lJutdBV6dDSUKlRVFV2EeDktQAawsTGoQrUzMAjzc5W9enz7/8Nrp/+XJXr9zw+3/e9opXctLMh7io6C
aKuphnS3jppCrbKCrL8gD4cN2AAGBjWodqBnBLkqnt059//i4c3/Y9z0/qf7mfy3NdW44+1qu0hDXqTb
QFm4WdpOcINMqNA5CU++LlZWBn2gNnBsgQEfJ0vOvYt7/5/bu+p/pIvu/yQ3jf9qkkJ3LI11VqhICnTz
cTGVSwXyX/X+b/BfIpz/GNB2daA2YYhuCJCpyw5/snxK439/K9X/8sJsr0UE+E7oqsoulrXn2SYdwflJ
OlzwLMgA6Uj+o1IRggelogWyoHrBgDUj0v1EQ4b/f1c9kf9CXKxHtdRVZvu42k6SDxO8DdKIjqVi+bdD
9YIBc3NV4aHNiyb8Lwkz/y8nwrkLmPK8xUVEvMVc+CZKRfIdko4XfA3TCMJAfipULwQAk66vvrbGJAlh
nkmsTExhQCFQHgAmSgaglxlYZBKEtoEMANFAPlbACMSgTMIDxKBch5JUQTaCNCNsZmAAAM/Wv1R/XfPh
AAAAAElFTkSuQmCC
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
================================================
FILE: src/EVEMon/App.config
================================================
%appdata%/EVEMon/AccountInfo.xml
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterControl.Designer.cs
================================================
namespace EVEMon.BlankCharacter
{
partial class BlankCharacterControl
{
///
/// 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(BlankCharacterControl));
this.rbFemale = new System.Windows.Forms.RadioButton();
this.rbMale = new System.Windows.Forms.RadioButton();
this.tbCharacterName = new System.Windows.Forms.TextBox();
this.gbRace = new System.Windows.Forms.GroupBox();
this.tlpRaces = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.rbCaldari = new System.Windows.Forms.RadioButton();
this.rbAmarr = new System.Windows.Forms.RadioButton();
this.rbGallente = new System.Windows.Forms.RadioButton();
this.rbMinmatar = new System.Windows.Forms.RadioButton();
this.pbAmarr = new System.Windows.Forms.PictureBox();
this.gbBloodline = new System.Windows.Forms.GroupBox();
this.tlpBloodline = new System.Windows.Forms.TableLayoutPanel();
this.rbBloodline3 = new System.Windows.Forms.RadioButton();
this.rbBloodline2 = new System.Windows.Forms.RadioButton();
this.pbBloodline3 = new System.Windows.Forms.PictureBox();
this.pbBloodline1 = new System.Windows.Forms.PictureBox();
this.pbBloodline2 = new System.Windows.Forms.PictureBox();
this.rbBloodline1 = new System.Windows.Forms.RadioButton();
this.gbAncestry = new System.Windows.Forms.GroupBox();
this.tlpAncestry = new System.Windows.Forms.TableLayoutPanel();
this.lblAncestry1 = new System.Windows.Forms.Label();
this.rbAncestry2 = new System.Windows.Forms.RadioButton();
this.pbAncestry1 = new System.Windows.Forms.PictureBox();
this.rbAncestry1 = new System.Windows.Forms.RadioButton();
this.rbAncestry3 = new System.Windows.Forms.RadioButton();
this.lblAncestry3 = new System.Windows.Forms.Label();
this.lblAncestry2 = new System.Windows.Forms.Label();
this.pbAncestry2 = new System.Windows.Forms.PictureBox();
this.pbAncestry3 = new System.Windows.Forms.PictureBox();
this.ilAncestry = new System.Windows.Forms.ImageList(this.components);
this.gbGender = new System.Windows.Forms.GroupBox();
this.gbCharacterName = new System.Windows.Forms.GroupBox();
this.ilBloodline = new System.Windows.Forms.ImageList(this.components);
this.tlpGender = new System.Windows.Forms.TableLayoutPanel();
this.pbFemale = new System.Windows.Forms.PictureBox();
this.pbMale = new System.Windows.Forms.PictureBox();
this.lblFemale = new System.Windows.Forms.Label();
this.lblMale = new System.Windows.Forms.Label();
this.gbRace.SuspendLayout();
this.tlpRaces.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAmarr)).BeginInit();
this.gbBloodline.SuspendLayout();
this.tlpBloodline.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline2)).BeginInit();
this.gbAncestry.SuspendLayout();
this.tlpAncestry.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry3)).BeginInit();
this.gbGender.SuspendLayout();
this.gbCharacterName.SuspendLayout();
this.tlpGender.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbFemale)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbMale)).BeginInit();
this.SuspendLayout();
//
// rbFemale
//
this.rbFemale.AutoSize = true;
this.rbFemale.Checked = true;
this.rbFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbFemale.Location = new System.Drawing.Point(3, 3);
this.rbFemale.Name = "rbFemale";
this.rbFemale.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpGender.SetRowSpan(this.rbFemale, 2);
this.rbFemale.Size = new System.Drawing.Size(43, 94);
this.rbFemale.TabIndex = 0;
this.rbFemale.TabStop = true;
this.rbFemale.UseVisualStyleBackColor = true;
this.rbFemale.Click += new System.EventHandler(this.rbFemale_Click);
//
// rbMale
//
this.rbMale.AutoSize = true;
this.rbMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbMale.Location = new System.Drawing.Point(3, 103);
this.rbMale.Name = "rbMale";
this.rbMale.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpGender.SetRowSpan(this.rbMale, 2);
this.rbMale.Size = new System.Drawing.Size(43, 87);
this.rbMale.TabIndex = 1;
this.rbMale.UseVisualStyleBackColor = true;
this.rbMale.Click += new System.EventHandler(this.rbMale_Click);
//
// tbCharacterName
//
this.tbCharacterName.Dock = System.Windows.Forms.DockStyle.Fill;
this.tbCharacterName.Location = new System.Drawing.Point(13, 16);
this.tbCharacterName.Name = "tbCharacterName";
this.tbCharacterName.Size = new System.Drawing.Size(200, 20);
this.tbCharacterName.TabIndex = 4;
this.tbCharacterName.TextChanged += new System.EventHandler(this.tbCharacterName_TextChanged);
//
// gbRace
//
this.gbRace.Controls.Add(this.tlpRaces);
this.gbRace.Location = new System.Drawing.Point(13, 13);
this.gbRace.Name = "gbRace";
this.gbRace.Size = new System.Drawing.Size(470, 135);
this.gbRace.TabIndex = 5;
this.gbRace.TabStop = false;
this.gbRace.Text = "Race";
//
// tlpRaces
//
this.tlpRaces.ColumnCount = 4;
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.Controls.Add(this.pictureBox3, 3, 0);
this.tlpRaces.Controls.Add(this.pictureBox2, 2, 0);
this.tlpRaces.Controls.Add(this.pictureBox1, 1, 0);
this.tlpRaces.Controls.Add(this.rbCaldari, 1, 1);
this.tlpRaces.Controls.Add(this.rbAmarr, 0, 1);
this.tlpRaces.Controls.Add(this.rbGallente, 2, 1);
this.tlpRaces.Controls.Add(this.rbMinmatar, 3, 1);
this.tlpRaces.Controls.Add(this.pbAmarr, 0, 0);
this.tlpRaces.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpRaces.Location = new System.Drawing.Point(3, 16);
this.tlpRaces.Name = "tlpRaces";
this.tlpRaces.RowCount = 2;
this.tlpRaces.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 71.94244F));
this.tlpRaces.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 28.05755F));
this.tlpRaces.Size = new System.Drawing.Size(464, 116);
this.tlpRaces.TabIndex = 0;
//
// pictureBox3
//
this.pictureBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(351, 3);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(110, 77);
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox3.TabIndex = 7;
this.pictureBox3.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
this.pictureBox2.Location = new System.Drawing.Point(235, 3);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(110, 77);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox2.TabIndex = 6;
this.pictureBox2.TabStop = false;
//
// pictureBox1
//
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(119, 3);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(110, 77);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// rbCaldari
//
this.rbCaldari.AutoSize = true;
this.rbCaldari.Location = new System.Drawing.Point(168, 86);
this.rbCaldari.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbCaldari.Name = "rbCaldari";
this.rbCaldari.Size = new System.Drawing.Size(14, 13);
this.rbCaldari.TabIndex = 1;
this.rbCaldari.UseVisualStyleBackColor = true;
this.rbCaldari.Click += new System.EventHandler(this.rbCaldari_Click);
//
// rbAmarr
//
this.rbAmarr.AutoSize = true;
this.rbAmarr.Checked = true;
this.rbAmarr.Location = new System.Drawing.Point(52, 86);
this.rbAmarr.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbAmarr.Name = "rbAmarr";
this.rbAmarr.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.rbAmarr.Size = new System.Drawing.Size(14, 13);
this.rbAmarr.TabIndex = 0;
this.rbAmarr.TabStop = true;
this.rbAmarr.UseVisualStyleBackColor = true;
this.rbAmarr.Click += new System.EventHandler(this.rbAmarr_Click);
//
// rbGallente
//
this.rbGallente.AutoSize = true;
this.rbGallente.Location = new System.Drawing.Point(284, 86);
this.rbGallente.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbGallente.Name = "rbGallente";
this.rbGallente.Size = new System.Drawing.Size(14, 13);
this.rbGallente.TabIndex = 2;
this.rbGallente.UseVisualStyleBackColor = true;
this.rbGallente.Click += new System.EventHandler(this.rbGallente_Click);
//
// rbMinmatar
//
this.rbMinmatar.AutoSize = true;
this.rbMinmatar.Location = new System.Drawing.Point(400, 86);
this.rbMinmatar.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbMinmatar.Name = "rbMinmatar";
this.rbMinmatar.Size = new System.Drawing.Size(14, 13);
this.rbMinmatar.TabIndex = 3;
this.rbMinmatar.UseVisualStyleBackColor = true;
this.rbMinmatar.Click += new System.EventHandler(this.rbMinmatar_Click);
//
// pbAmarr
//
this.pbAmarr.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAmarr.Image = ((System.Drawing.Image)(resources.GetObject("pbAmarr.Image")));
this.pbAmarr.Location = new System.Drawing.Point(3, 3);
this.pbAmarr.Name = "pbAmarr";
this.pbAmarr.Size = new System.Drawing.Size(110, 77);
this.pbAmarr.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAmarr.TabIndex = 4;
this.pbAmarr.TabStop = false;
//
// gbBloodline
//
this.gbBloodline.Controls.Add(this.tlpBloodline);
this.gbBloodline.Location = new System.Drawing.Point(13, 156);
this.gbBloodline.Name = "gbBloodline";
this.gbBloodline.Size = new System.Drawing.Size(148, 212);
this.gbBloodline.TabIndex = 6;
this.gbBloodline.TabStop = false;
this.gbBloodline.Text = "Bloodline";
//
// tlpBloodline
//
this.tlpBloodline.ColumnCount = 2;
this.tlpBloodline.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpBloodline.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpBloodline.Controls.Add(this.rbBloodline3, 0, 2);
this.tlpBloodline.Controls.Add(this.rbBloodline2, 0, 1);
this.tlpBloodline.Controls.Add(this.pbBloodline3, 1, 2);
this.tlpBloodline.Controls.Add(this.pbBloodline1, 1, 0);
this.tlpBloodline.Controls.Add(this.pbBloodline2, 1, 1);
this.tlpBloodline.Controls.Add(this.rbBloodline1, 0, 0);
this.tlpBloodline.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpBloodline.Location = new System.Drawing.Point(3, 16);
this.tlpBloodline.Name = "tlpBloodline";
this.tlpBloodline.Padding = new System.Windows.Forms.Padding(0, 0, 0, 6);
this.tlpBloodline.RowCount = 3;
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.Size = new System.Drawing.Size(142, 193);
this.tlpBloodline.TabIndex = 0;
//
// rbBloodline3
//
this.rbBloodline3.AutoSize = true;
this.rbBloodline3.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline3.Location = new System.Drawing.Point(3, 127);
this.rbBloodline3.Name = "rbBloodline3";
this.rbBloodline3.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline3.Size = new System.Drawing.Size(43, 57);
this.rbBloodline3.TabIndex = 5;
this.rbBloodline3.UseVisualStyleBackColor = true;
this.rbBloodline3.Click += new System.EventHandler(this.rbBloodline3_Click);
//
// rbBloodline2
//
this.rbBloodline2.AutoSize = true;
this.rbBloodline2.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline2.Location = new System.Drawing.Point(3, 65);
this.rbBloodline2.Name = "rbBloodline2";
this.rbBloodline2.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline2.Size = new System.Drawing.Size(43, 56);
this.rbBloodline2.TabIndex = 4;
this.rbBloodline2.UseVisualStyleBackColor = true;
this.rbBloodline2.Click += new System.EventHandler(this.rbBloodline2_Click);
//
// pbBloodline3
//
this.pbBloodline3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline3.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline3.Image")));
this.pbBloodline3.Location = new System.Drawing.Point(49, 124);
this.pbBloodline3.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline3.Name = "pbBloodline3";
this.pbBloodline3.Size = new System.Drawing.Size(93, 63);
this.pbBloodline3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline3.TabIndex = 2;
this.pbBloodline3.TabStop = false;
//
// pbBloodline1
//
this.pbBloodline1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline1.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline1.Image")));
this.pbBloodline1.Location = new System.Drawing.Point(49, 0);
this.pbBloodline1.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline1.Name = "pbBloodline1";
this.pbBloodline1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.pbBloodline1.Size = new System.Drawing.Size(93, 62);
this.pbBloodline1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline1.TabIndex = 0;
this.pbBloodline1.TabStop = false;
//
// pbBloodline2
//
this.pbBloodline2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline2.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline2.Image")));
this.pbBloodline2.Location = new System.Drawing.Point(49, 62);
this.pbBloodline2.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline2.Name = "pbBloodline2";
this.pbBloodline2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.pbBloodline2.Size = new System.Drawing.Size(93, 62);
this.pbBloodline2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline2.TabIndex = 1;
this.pbBloodline2.TabStop = false;
//
// rbBloodline1
//
this.rbBloodline1.AutoSize = true;
this.rbBloodline1.Checked = true;
this.rbBloodline1.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline1.Location = new System.Drawing.Point(3, 3);
this.rbBloodline1.Name = "rbBloodline1";
this.rbBloodline1.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline1.Size = new System.Drawing.Size(43, 56);
this.rbBloodline1.TabIndex = 3;
this.rbBloodline1.TabStop = true;
this.rbBloodline1.UseVisualStyleBackColor = true;
this.rbBloodline1.Click += new System.EventHandler(this.rbBloodline1_Click);
//
// gbAncestry
//
this.gbAncestry.Controls.Add(this.tlpAncestry);
this.gbAncestry.Location = new System.Drawing.Point(165, 156);
this.gbAncestry.Name = "gbAncestry";
this.gbAncestry.Size = new System.Drawing.Size(166, 212);
this.gbAncestry.TabIndex = 7;
this.gbAncestry.TabStop = false;
this.gbAncestry.Text = "Ancestry";
//
// tlpAncestry
//
this.tlpAncestry.ColumnCount = 2;
this.tlpAncestry.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpAncestry.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpAncestry.Controls.Add(this.lblAncestry1, 1, 1);
this.tlpAncestry.Controls.Add(this.rbAncestry2, 0, 2);
this.tlpAncestry.Controls.Add(this.pbAncestry1, 1, 0);
this.tlpAncestry.Controls.Add(this.rbAncestry1, 0, 0);
this.tlpAncestry.Controls.Add(this.rbAncestry3, 0, 4);
this.tlpAncestry.Controls.Add(this.lblAncestry3, 1, 5);
this.tlpAncestry.Controls.Add(this.lblAncestry2, 1, 3);
this.tlpAncestry.Controls.Add(this.pbAncestry2, 1, 2);
this.tlpAncestry.Controls.Add(this.pbAncestry3, 1, 4);
this.tlpAncestry.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpAncestry.Location = new System.Drawing.Point(3, 16);
this.tlpAncestry.Name = "tlpAncestry";
this.tlpAncestry.Padding = new System.Windows.Forms.Padding(0, 0, 0, 6);
this.tlpAncestry.RowCount = 6;
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.32972F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33514F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33514F));
this.tlpAncestry.Size = new System.Drawing.Size(160, 193);
this.tlpAncestry.TabIndex = 0;
//
// lblAncestry1
//
this.lblAncestry1.AutoSize = true;
this.lblAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry1.ImageIndex = 0;
this.lblAncestry1.Location = new System.Drawing.Point(56, 44);
this.lblAncestry1.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry1.Name = "lblAncestry1";
this.lblAncestry1.Size = new System.Drawing.Size(104, 18);
this.lblAncestry1.TabIndex = 8;
this.lblAncestry1.Text = "Liberal Holders";
this.lblAncestry1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// rbAncestry2
//
this.rbAncestry2.AutoSize = true;
this.rbAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry2.Location = new System.Drawing.Point(3, 65);
this.rbAncestry2.Name = "rbAncestry2";
this.rbAncestry2.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry2, 2);
this.rbAncestry2.Size = new System.Drawing.Size(50, 56);
this.rbAncestry2.TabIndex = 5;
this.rbAncestry2.UseVisualStyleBackColor = true;
this.rbAncestry2.Click += new System.EventHandler(this.rbAncestry2_Click);
//
// pbAncestry1
//
this.pbAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry1.Location = new System.Drawing.Point(56, 0);
this.pbAncestry1.Margin = new System.Windows.Forms.Padding(0);
this.pbAncestry1.Name = "pbAncestry1";
this.pbAncestry1.Size = new System.Drawing.Size(104, 44);
this.pbAncestry1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry1.TabIndex = 2;
this.pbAncestry1.TabStop = false;
//
// rbAncestry1
//
this.rbAncestry1.AutoSize = true;
this.rbAncestry1.Checked = true;
this.rbAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry1.Location = new System.Drawing.Point(3, 3);
this.rbAncestry1.Name = "rbAncestry1";
this.rbAncestry1.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry1, 2);
this.rbAncestry1.Size = new System.Drawing.Size(50, 56);
this.rbAncestry1.TabIndex = 4;
this.rbAncestry1.TabStop = true;
this.rbAncestry1.UseVisualStyleBackColor = true;
this.rbAncestry1.Click += new System.EventHandler(this.rbAncestry1_Click);
//
// rbAncestry3
//
this.rbAncestry3.AutoSize = true;
this.rbAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry3.Location = new System.Drawing.Point(3, 127);
this.rbAncestry3.Name = "rbAncestry3";
this.rbAncestry3.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry3, 2);
this.rbAncestry3.Size = new System.Drawing.Size(50, 57);
this.rbAncestry3.TabIndex = 6;
this.rbAncestry3.UseVisualStyleBackColor = true;
this.rbAncestry3.Click += new System.EventHandler(this.rbAncestry3_Click);
//
// lblAncestry3
//
this.lblAncestry3.AutoSize = true;
this.lblAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry3.ImageIndex = 2;
this.lblAncestry3.Location = new System.Drawing.Point(56, 168);
this.lblAncestry3.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry3.Name = "lblAncestry3";
this.lblAncestry3.Size = new System.Drawing.Size(104, 19);
this.lblAncestry3.TabIndex = 9;
this.lblAncestry3.Text = "Religious Reclaimers";
this.lblAncestry3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// lblAncestry2
//
this.lblAncestry2.AutoSize = true;
this.lblAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry2.ImageIndex = 1;
this.lblAncestry2.Location = new System.Drawing.Point(56, 106);
this.lblAncestry2.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry2.Name = "lblAncestry2";
this.lblAncestry2.Size = new System.Drawing.Size(104, 18);
this.lblAncestry2.TabIndex = 7;
this.lblAncestry2.Text = "Weathy Commoners";
this.lblAncestry2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// pbAncestry2
//
this.pbAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry2.Location = new System.Drawing.Point(59, 65);
this.pbAncestry2.Name = "pbAncestry2";
this.pbAncestry2.Size = new System.Drawing.Size(98, 38);
this.pbAncestry2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry2.TabIndex = 10;
this.pbAncestry2.TabStop = false;
//
// pbAncestry3
//
this.pbAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry3.Location = new System.Drawing.Point(59, 127);
this.pbAncestry3.Name = "pbAncestry3";
this.pbAncestry3.Size = new System.Drawing.Size(98, 38);
this.pbAncestry3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry3.TabIndex = 11;
this.pbAncestry3.TabStop = false;
//
// ilAncestry
//
this.ilAncestry.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilAncestry.ImageStream")));
this.ilAncestry.TransparentColor = System.Drawing.Color.Transparent;
this.ilAncestry.Images.SetKeyName(0, "Liberal.png");
this.ilAncestry.Images.SetKeyName(1, "Wealthy.png");
this.ilAncestry.Images.SetKeyName(2, "Religious.png");
this.ilAncestry.Images.SetKeyName(3, "Free.png");
this.ilAncestry.Images.SetKeyName(4, "Border.png");
this.ilAncestry.Images.SetKeyName(5, "Navy.png");
this.ilAncestry.Images.SetKeyName(6, "Cyber.png");
this.ilAncestry.Images.SetKeyName(7, "Unionists.png");
this.ilAncestry.Images.SetKeyName(8, "Zealots.png");
this.ilAncestry.Images.SetKeyName(9, "Merchandisers.png");
this.ilAncestry.Images.SetKeyName(10, "Scientists.png");
this.ilAncestry.Images.SetKeyName(11, "Tube.png");
this.ilAncestry.Images.SetKeyName(12, "Entrepreneurs.png");
this.ilAncestry.Images.SetKeyName(13, "Mercs.png");
this.ilAncestry.Images.SetKeyName(14, "Dissenters.png");
this.ilAncestry.Images.SetKeyName(15, "Inventors.png");
this.ilAncestry.Images.SetKeyName(16, "Monks.png");
this.ilAncestry.Images.SetKeyName(17, "Stargazers.png");
this.ilAncestry.Images.SetKeyName(18, "Activists.png");
this.ilAncestry.Images.SetKeyName(19, "Miners.png");
this.ilAncestry.Images.SetKeyName(20, "Immigrants.png");
this.ilAncestry.Images.SetKeyName(21, "Artists.png");
this.ilAncestry.Images.SetKeyName(22, "Diplomats.png");
this.ilAncestry.Images.SetKeyName(23, "Reborn.png");
this.ilAncestry.Images.SetKeyName(24, "Sang.png");
this.ilAncestry.Images.SetKeyName(25, "Saan.png");
this.ilAncestry.Images.SetKeyName(26, "Jing.png");
this.ilAncestry.Images.SetKeyName(27, "Tinkerers.png");
this.ilAncestry.Images.SetKeyName(28, "Traders.png");
this.ilAncestry.Images.SetKeyName(29, "Rebels.png");
this.ilAncestry.Images.SetKeyName(30, "Workers.png");
this.ilAncestry.Images.SetKeyName(31, "Tribal.png");
this.ilAncestry.Images.SetKeyName(32, "Slave.png");
this.ilAncestry.Images.SetKeyName(33, "Drifters.png");
this.ilAncestry.Images.SetKeyName(34, "Mystics.png");
this.ilAncestry.Images.SetKeyName(35, "Retailers.png");
//
// gbGender
//
this.gbGender.Controls.Add(this.tlpGender);
this.gbGender.Location = new System.Drawing.Point(337, 156);
this.gbGender.Name = "gbGender";
this.gbGender.Size = new System.Drawing.Size(146, 212);
this.gbGender.TabIndex = 8;
this.gbGender.TabStop = false;
this.gbGender.Text = "Gender";
//
// gbCharacterName
//
this.gbCharacterName.Controls.Add(this.tbCharacterName);
this.gbCharacterName.Location = new System.Drawing.Point(135, 371);
this.gbCharacterName.Name = "gbCharacterName";
this.gbCharacterName.Padding = new System.Windows.Forms.Padding(13, 3, 13, 3);
this.gbCharacterName.Size = new System.Drawing.Size(226, 46);
this.gbCharacterName.TabIndex = 9;
this.gbCharacterName.TabStop = false;
this.gbCharacterName.Text = "Blank Character Name";
//
// ilBloodline
//
this.ilBloodline.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilBloodline.ImageStream")));
this.ilBloodline.TransparentColor = System.Drawing.Color.Transparent;
this.ilBloodline.Images.SetKeyName(0, "amarr.png");
this.ilBloodline.Images.SetKeyName(1, "ni-kunni.png");
this.ilBloodline.Images.SetKeyName(2, "khanid.png");
this.ilBloodline.Images.SetKeyName(3, "deteis.png");
this.ilBloodline.Images.SetKeyName(4, "civire.png");
this.ilBloodline.Images.SetKeyName(5, "achura.png");
this.ilBloodline.Images.SetKeyName(6, "gallente.png");
this.ilBloodline.Images.SetKeyName(7, "intaki.png");
this.ilBloodline.Images.SetKeyName(8, "jin-mei.png");
this.ilBloodline.Images.SetKeyName(9, "sebiestor.png");
this.ilBloodline.Images.SetKeyName(10, "brutor.png");
this.ilBloodline.Images.SetKeyName(11, "verokhior.png");
//
// tlpGender
//
this.tlpGender.ColumnCount = 2;
this.tlpGender.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpGender.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpGender.Controls.Add(this.rbFemale, 0, 0);
this.tlpGender.Controls.Add(this.pbFemale, 1, 0);
this.tlpGender.Controls.Add(this.rbMale, 0, 2);
this.tlpGender.Controls.Add(this.pbMale, 1, 2);
this.tlpGender.Controls.Add(this.lblFemale, 1, 1);
this.tlpGender.Controls.Add(this.lblMale, 1, 3);
this.tlpGender.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpGender.Location = new System.Drawing.Point(3, 16);
this.tlpGender.Name = "tlpGender";
this.tlpGender.RowCount = 4;
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpGender.Size = new System.Drawing.Size(140, 193);
this.tlpGender.TabIndex = 2;
//
// pbFemale
//
this.pbFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbFemale.Image = ((System.Drawing.Image)(resources.GetObject("pbFemale.Image")));
this.pbFemale.Location = new System.Drawing.Point(52, 3);
this.pbFemale.Name = "pbFemale";
this.pbFemale.Size = new System.Drawing.Size(85, 74);
this.pbFemale.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbFemale.TabIndex = 2;
this.pbFemale.TabStop = false;
//
// pbMale
//
this.pbMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbMale.Image = ((System.Drawing.Image)(resources.GetObject("pbMale.Image")));
this.pbMale.Location = new System.Drawing.Point(52, 103);
this.pbMale.Name = "pbMale";
this.pbMale.Size = new System.Drawing.Size(85, 66);
this.pbMale.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbMale.TabIndex = 3;
this.pbMale.TabStop = false;
//
// lblFemale
//
this.lblFemale.AutoSize = true;
this.lblFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblFemale.Location = new System.Drawing.Point(52, 80);
this.lblFemale.Name = "lblFemale";
this.lblFemale.Size = new System.Drawing.Size(85, 20);
this.lblFemale.TabIndex = 4;
this.lblFemale.Text = "Female";
this.lblFemale.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// lblMale
//
this.lblMale.AutoSize = true;
this.lblMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMale.Location = new System.Drawing.Point(52, 172);
this.lblMale.Name = "lblMale";
this.lblMale.Size = new System.Drawing.Size(85, 21);
this.lblMale.TabIndex = 5;
this.lblMale.Text = "Male";
this.lblMale.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// BlankCharacterControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.Controls.Add(this.gbCharacterName);
this.Controls.Add(this.gbGender);
this.Controls.Add(this.gbAncestry);
this.Controls.Add(this.gbBloodline);
this.Controls.Add(this.gbRace);
this.Name = "BlankCharacterControl";
this.Size = new System.Drawing.Size(497, 425);
this.Load += new System.EventHandler(this.BlankCharacterControl_Load);
this.gbRace.ResumeLayout(false);
this.tlpRaces.ResumeLayout(false);
this.tlpRaces.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAmarr)).EndInit();
this.gbBloodline.ResumeLayout(false);
this.tlpBloodline.ResumeLayout(false);
this.tlpBloodline.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline2)).EndInit();
this.gbAncestry.ResumeLayout(false);
this.tlpAncestry.ResumeLayout(false);
this.tlpAncestry.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry3)).EndInit();
this.gbGender.ResumeLayout(false);
this.gbCharacterName.ResumeLayout(false);
this.gbCharacterName.PerformLayout();
this.tlpGender.ResumeLayout(false);
this.tlpGender.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbFemale)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbMale)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox gbRace;
private System.Windows.Forms.RadioButton rbAmarr;
private System.Windows.Forms.GroupBox gbBloodline;
private System.Windows.Forms.GroupBox gbAncestry;
private System.Windows.Forms.GroupBox gbGender;
private System.Windows.Forms.GroupBox gbCharacterName;
private System.Windows.Forms.RadioButton rbCaldari;
private System.Windows.Forms.ImageList ilBloodline;
private System.Windows.Forms.TableLayoutPanel tlpRaces;
private System.Windows.Forms.RadioButton rbGallente;
private System.Windows.Forms.RadioButton rbMinmatar;
private System.Windows.Forms.PictureBox pbAmarr;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.RadioButton rbFemale;
private System.Windows.Forms.RadioButton rbMale;
private System.Windows.Forms.PictureBox pbBloodline1;
private System.Windows.Forms.PictureBox pbBloodline2;
private System.Windows.Forms.PictureBox pbBloodline3;
private System.Windows.Forms.TableLayoutPanel tlpAncestry;
private System.Windows.Forms.TableLayoutPanel tlpBloodline;
private System.Windows.Forms.RadioButton rbBloodline3;
private System.Windows.Forms.RadioButton rbBloodline2;
private System.Windows.Forms.RadioButton rbBloodline1;
private System.Windows.Forms.RadioButton rbAncestry1;
private System.Windows.Forms.RadioButton rbAncestry2;
private System.Windows.Forms.RadioButton rbAncestry3;
private System.Windows.Forms.Label lblAncestry2;
private System.Windows.Forms.ImageList ilAncestry;
private System.Windows.Forms.Label lblAncestry1;
private System.Windows.Forms.Label lblAncestry3;
private System.Windows.Forms.PictureBox pbAncestry1;
private System.Windows.Forms.PictureBox pbAncestry2;
private System.Windows.Forms.PictureBox pbAncestry3;
private System.Windows.Forms.TextBox tbCharacterName;
private System.Windows.Forms.TableLayoutPanel tlpGender;
private System.Windows.Forms.PictureBox pbFemale;
private System.Windows.Forms.PictureBox pbMale;
private System.Windows.Forms.Label lblFemale;
private System.Windows.Forms.Label lblMale;
}
}
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterControl.cs
================================================
using System;
using System.Drawing;
using System.Windows.Forms;
using EVEMon.Common.Constants;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Extensions;
namespace EVEMon.BlankCharacter
{
public partial class BlankCharacterControl : UserControl
{
///
/// A list of all of the bloodlines sorted by the order they appear in the picture
/// control.
///
private static readonly Bloodline[] BLOODLINES_BY_INDEX =
{
// Amarr 0-2
Bloodline.Amarr, Bloodline.Ni_Kunni, Bloodline.Khanid,
// Caldari 3-5
Bloodline.Deteis, Bloodline.Civire, Bloodline.Achura,
// Gallente 6-8
Bloodline.Gallente, Bloodline.Intaki, Bloodline.Jin_Mei,
// Minmatar 9-11
Bloodline.Sebiestor, Bloodline.Brutor, Bloodline.Vherokior
};
///
/// A list of all the ancestries sorted by the bloodline which uses them.
///
private static readonly Ancestry[] ANCESTRIES_BY_INDEX =
{
// Amarr
Ancestry.Liberal_Holders, Ancestry.Wealthy_Commoners, Ancestry.Religious_Reclaimers,
// Ni-Kunni
Ancestry.Free_Merchants, Ancestry.Border_Runners, Ancestry.Navy_Veterans,
// Khanid
Ancestry.Cyber_Knights, Ancestry.Unionists, Ancestry.Zealots,
// Deteis
Ancestry.Merchandisers, Ancestry.Scientists, Ancestry.Tube_Child,
// Civire
Ancestry.Entrepreneurs, Ancestry.Mercs, Ancestry.Dissenters,
// Achura
Ancestry.Inventors, Ancestry.Monks, Ancestry.Stargazers,
// Gallente
Ancestry.Activists, Ancestry.Miners, Ancestry.Immigrants,
// Intaki
Ancestry.Artists, Ancestry.Diplomats, Ancestry.Reborn,
// Jin-Mei
Ancestry.Sang_Do_Caste, Ancestry.Saan_Go_Caste, Ancestry.Jing_Ko_Caste,
// Sebiestor
Ancestry.Tinkerers, Ancestry.Traders, Ancestry.Rebels,
// Brutor
Ancestry.Workers, Ancestry.Tribal_Traditionalists, Ancestry.Slave_Child,
// Vherokior:
Ancestry.Drifters, Ancestry.Mystics, Ancestry.Retailers
};
private Font m_amarrFont;
private Font m_caldariFont;
private Font m_gallenteFont;
private Font m_minmatarFont;
///
/// Initializes a new instance of the class.
///
public BlankCharacterControl()
{
InitializeComponent();
}
///
/// Handles the Load event of the BlankCharacterControl.
///
/// The source of the event.
/// The instance containing the event data.
private void BlankCharacterControl_Load(object sender, EventArgs e)
{
ForeColor = SystemColors.GrayText;
m_amarrFont = FontFactory.GetFont("Niagara Solid", 10f);
m_caldariFont = FontFactory.GetFont("Impact", 8.25f);
m_gallenteFont = FontFactory.GetFont("Arial Rounded MT Bold", 8.25f);
m_minmatarFont = FontFactory.GetFont("Moolboran", 9f);
BlankCharacterUIHelper.Race = Race.Amarr;
UpdateBloodlineControl();
}
#region Update Methods
///
/// Updates the bloodline controls.
///
private void UpdateBloodlineControl()
{
int index = 0;
switch (BlankCharacterUIHelper.Race)
{
case Race.Amarr:
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_amarrFont;
break;
case Race.Caldari:
index = 3;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_caldariFont;
break;
case Race.Gallente:
index = 6;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_gallenteFont;
break;
case Race.Minmatar:
index = 9;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_minmatarFont;
break;
default:
throw new NotImplementedException();
}
// Calculate bloodlines based on image position (they used to match up in code,
// but the codes were remapped to match the SDE)
Bloodline bloodline1 = BLOODLINES_BY_INDEX[index], bloodline2 =
BLOODLINES_BY_INDEX[index + 1], bloodline3 = BLOODLINES_BY_INDEX[index + 2];
pbBloodline1.Image = ilBloodline.Images[index];
pbBloodline2.Image = ilBloodline.Images[index + 1];
pbBloodline3.Image = ilBloodline.Images[index + 2];
pbBloodline1.Tag = bloodline1;
pbBloodline2.Tag = bloodline2;
pbBloodline3.Tag = bloodline3;
if (rbBloodline1.Checked)
BlankCharacterUIHelper.Bloodline = bloodline1;
if (rbBloodline2.Checked)
BlankCharacterUIHelper.Bloodline = bloodline2;
if (rbBloodline3.Checked)
BlankCharacterUIHelper.Bloodline = bloodline3;
UpdateAncestryControl();
}
///
/// Updates the ancestry controls.
///
private void UpdateAncestryControl()
{
int index = 0;
switch (BlankCharacterUIHelper.Bloodline)
{
case Bloodline.Unknown:
case Bloodline.Amarr:
break;
case Bloodline.Ni_Kunni:
index = 3;
break;
case Bloodline.Khanid:
index = 6;
break;
case Bloodline.Deteis:
index = 9;
break;
case Bloodline.Civire:
index = 12;
break;
case Bloodline.Achura:
index = 15;
break;
case Bloodline.Gallente:
index = 18;
break;
case Bloodline.Intaki:
index = 21;
break;
case Bloodline.Jin_Mei:
index = 24;
break;
case Bloodline.Sebiestor:
index = 27;
break;
case Bloodline.Brutor:
index = 30;
break;
case Bloodline.Vherokior:
index = 33;
break;
default:
throw new NotImplementedException();
}
// Calculate bloodlines based on image position (they used to match up in code,
// but the codes were remapped to match the SDE)
Ancestry ancestry1 = ANCESTRIES_BY_INDEX[index], ancestry2 = ANCESTRIES_BY_INDEX[
index + 1], ancestry3 = ANCESTRIES_BY_INDEX[index + 2];
pbAncestry1.Image = ilAncestry.Images[index];
pbAncestry2.Image = ilAncestry.Images[index + 1];
pbAncestry3.Image = ilAncestry.Images[index + 2];
lblAncestry1.Text = ancestry1.ToString().ToUpper(CultureConstants.DefaultCulture).
UnderscoresToSpaces();
lblAncestry2.Text = ancestry2.ToString().ToUpper(CultureConstants.DefaultCulture).
UnderscoresToSpaces();
lblAncestry3.Text = ancestry3.ToString().ToUpper(CultureConstants.DefaultCulture).
UnderscoresToSpaces();
lblAncestry1.Tag = ancestry1;
lblAncestry2.Tag = ancestry2;
lblAncestry3.Tag = ancestry3;
if (rbAncestry1.Checked)
BlankCharacterUIHelper.Ancestry = ancestry1;
if (rbAncestry2.Checked)
BlankCharacterUIHelper.Ancestry = ancestry2;
if (rbAncestry3.Checked)
BlankCharacterUIHelper.Ancestry = ancestry3;
}
#endregion
#region Event Handlers
///
/// Handles the Click event of the rbAmarr control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAmarr_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Amarr;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbCaldari control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbCaldari_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Caldari;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbGallente control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbGallente_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Gallente;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbMinmatar control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbMinmatar_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Minmatar;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbBloodline1 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline1_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline1.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbBloodline2 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline2_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline2.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbBloodline3 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline3_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline3.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbAncestry1 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry1_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry1.Tag;
}
///
/// Handles the Click event of the rbAncestry2 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry2_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry2.Tag;
}
///
/// Handles the Click event of the rbAncestry3 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry3_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry3.Tag;
}
///
/// Handles the Click event of the rbFemale control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbFemale_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Gender = Gender.Female;
}
///
/// Handles the Click event of the rbMale control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbMale_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Gender = Gender.Male;
}
///
/// Handles the TextChanged event of the tbCharacterName control.
///
/// The source of the event.
/// The instance containing the event data.
private void tbCharacterName_TextChanged(object sender, EventArgs e)
{
BlankCharacterUIHelper.CharacterName = tbCharacterName.Text;
}
#endregion
}
}
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterControl.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
rkJggg==
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
0MbAg2HgfwFn37I1Hks2+gAAAABJRU5ErkJggg==
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
galotLtVDAAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAABCfSURBVHhe7VoJWI3b+j/t5rnd3lua5xSNGjRrHlBpIJWi0ohwIg0qRaQSytRJSpGpJBnCOZzj
EDokh5JZjoM/7r0Oh2Po+9Z9333b/bueQ2Ef9/7/T+t51tO3v7XWO/zWu973Xe/XV18NtSEEhhAYQmAI
gSEEhhAYQmAIgU9DQEBAQBC65Ket/rRVDAaDDSsFPm01n1c52I6JBZIqfCY7EDkJHU21uTBJdKCJf+n4
qJEGjg4WxpXARPkvZfQnxE31dQrk5GQDYYjxpXn38Zviad3CZrMy4IXElxZCSEjIauY0vzbgy/rSvLn8
REVFHDcuCqakpCSj/kO7IFG0MKhHWkoi9D/CX09NYU161PjHsjIyEwe7A+C8BIWhiUGTlpaWwS7X2yQk
JCRxDOcMlt407xEv/b3tDsN86cGu4ds8JzOVq4tmBjyRlZVx+BBRVAqVY0HT1tbWMTAwGDlmjJW1nZ2t
ff+O73F8GDQARhrXDSRsmJvWy/SZ036FeSMGmsvvcQl/2+FUVV4AzeGwg/6MOO4kKqKkrKQ2caJfeF5e
3orqmurdR44e/amj4/J17J1XOq93dXXdwH7ixPEzNVtrdhcU5BdHREREampp6g8AgkRauBm1bWUCBfw9
+a3gB+lB3Gd7jWZSa9MDKDU11dnwu/9uCaiqKNkmRgWXpCeFXNyzNplqLp9BWuqyyKXDmeRx20q65/cd
9NsXjfSbl0co+h9ryJvnP1B/vLxLvXl19X/771fpny+2XQueElykqqrq8a6jFRERtsyJsaIrcqZSggxG
xBf1A1wALIb1ZEea0u5OdtVwpGVRQHsL7YLlszwepIYY0NHuCnSctzKdFmZIF862o3fme5Pz+zNIx7eZ
9Ot7K0nP4xJCPa8i1N9KCYLx9tlhLjDYqadlhH5SQKh7i0jPw0LS8/IM3dXV2h0YGFgEfKRwd3TVOFmF
saPImrk2pBcAoS9mBTwLQAUr8uMei4uLawoKCkqY68pdnzueQ8Ic5GheT/BgkQWBamTjfCu6eZ0Paan0
Ive+jyVv7mZxFeQq+2wDV+G33RnkTWccubbHm1zZ4Uk6dnqT9ho3cufbGNK1L5hev9jzESg5FsH+Jtvn
yfoFDmRlki0BecK/qAUg0uZaEi9QybUL3YipsUExCCEN536sh4nMyygXeRqBQOVTJ6mSpRFa3N6QZ01a
ayaQU9WTSVvDDHL5UDTpOpZIbp1IIA/PxJKHP4SRO83BpHWjFTlVrE+acvTJkVJXsjN7NKlINaclxUSW
A2sFDWX5OVuzLMmKxDF02jSr58B73BfbfR4jjqzofgQgwVuRbliX/Lu0lJQ9Oj5ZGam4STay9MKJCiTK
hUV7m0hTFtqSdxXkhM/JSQrtHc6Rr9DWUCnUN9BfbmhkmDpylEGqjo5mkYoiZ7WUuFCtGkfkpKOh3N2U
EG16dYIeOVDiTVbPtaRkJIXLgbcBWJpq3Sq/J5sWWtFfB+nSLhZqN8FZ2n5sCP1kwDCGQxYmLCEqtMDZ
UIpCEIpmmtNby0o6IILpw3GQGjaME8aSFjopJMgoAUaYqGCoVAch2RAYOBAWZZhMJkdeXp6NHZ8xPRAR
EcFLFQfnomeHs53JkhY8LCosWIjKw05LVRZOunhsvSudH2dKzw82oNUVZRshldDj5RMfk0d8NAhSUlKc
xISYUnUNdT14HmaiKf0bOjs0+YZ8f7qubtPPOjo6lmw2exgopgHKKoJA743nHxrrFQ4dGyY5TK7ym1JP
3z+dRLbnOpJFIRokyF7pGdAIR0DDQiavBquyRiA+WrHBLpjkaXqw+2wd7eM7IUNWVpbJYkqvmO6uTM/z
VSYls43oS01R5McTTbecXZwDVNVU1VSgoUCY8eG1ebB83p0nIS6u17ynqPP20Sj64BpPsnKWBYnxUqJZ
MmJHGAICJhqaGqa7iqJ76nZtbYdkatRgkqiPloUpKxm2JG4M1bR2Mmls2HwV0LYA5OXVWFLXpjlz6MWh
6mRnrjV94/gs8vDO6d/TM9JLjU2MLTHDw64BDbM8BISX9qKgeJw+IIyQg535nK7Tpc/P1UeTA2u8uWEv
I8KEdjRm/0/v8RJ2Hq363cq5jvTtC3voyKjppYqKiny/ngv42+ndneevQX+T5kDuXiynI6aGrB0+fLgK
KONsrCr6Ii1Yi2RMUia7ltqS1i1e5Nndavrmzev3CwtXbIJMMKh/2msETU9PbwRaCAiriKCIioqK8YAA
s5aztjabda659N6x8gRSl+9KqhZ7kMIkBzor0pwOsFd90esXFGRlJMKiPFSoZYm29NHK2fTV9nNPR40a
5Qz+ROSjd/l9C0RFhAJD3bTeoNdd87U93VToQILGmZ9QVlYehWvAWfk4GbNe5EfrcY/CnsVG5Ob+QNLz
WzX9+tUD6vWb19RP585erNhcUZuTk7U8PDws2sfXhwuKk9NYLzc313FhoaHhSUmzl++uXf3dlVM1rxsK
3emtSzzIqtkW1JLYMXR2pNm/lLcd/lJMWHAdsNVD3pLiIgtdjVgUyrY8wZo+21RMh04JKgcfhM6UP01L
hVUe6qTYkzhBjc6bYUiHeRuCx+dMhYDAzcqgMeAs+lrpSj4qnWdBt+/wI79+H8lNdF4/v0Bhlvfq5WXq
9YtuCrM6bn96lH5+t5F+ensP/fcbdfS9U5Aq74shjStsSVmKNVkRa0hyZ5hxPf0C6LgBLqOH/9arvAHy
7OUtzJQSPRrmptGTClnn5lw/OnlW7E8KCgra/NEeqBjrDDsf6qL2NtFXm4rz1X/OYjEzwLENe4cBA460
nZku+0JdsR/15Oysf6WzkOlxc/7ebI/qTiGYCt8+HEYu1I4n53aGkFOVE8g2SGzWzzUkBZDeYgKFYCdN
1OKm1NPdlGhlpngXONJk4KnZT3meCCqWI5hPcT5aSdbsqb+Ak+ZaJ1+apYHijQgPTS4AeqrMJjivxn8i
BJgBgyEtLaWsq6mRnxbt+ehWSwqhHuQSXo7/9noS+duZeLprbyB9Aazk+AYXUp4ymntssC+ZPoIsCtUl
mGKjMlNdVCgTLZmHokJC24CfO3S59ykkJSGyPMhR7W2Ul2bPnFC7+yCjI1+URyKm6spX8AjMnTSSgl2Y
B6/eW4zERIQpz+To6una21iarJs+ybHjSEUM3X02mfxxNYc8+DGedNQHkOYSV7JlkQ1dPt+UXhlvQDBz
XDxVB5RXoT3NOJSWglgHKL4ZeE2GrvhngPdXEI6gqoeZPIUAJAZZ3hcUZLjyDQB9FfYZJDzRSR+LD04D
EQYrkJaRkZFVVlaC4KdupqOjPdnIaNQGF2v9Y5nxzs/O1IYQdKRVaeb0hnmmdHGiMW1nIPNIUoTxLWSP
64E+Zo+W0NGRDbroaaiu0IG+wstG6xasGz2QnIMeZ0qLlM/216PGORp0wKIBnQsmPeAgxUXFRMUxvAEY
GOlYgMYodXV1d29bjTubUq24O58XqU/8bJUwpmN5XQM6Zn6fdLXVVpY7iACY6rCOAQ1Mp/nT4AIyduIY
VcrbZjRWYQddAgcgwDIFIEoyhIGGUG++LyIjI+02y0+DC0BmmB4REhTMAboKnyutjqr8fgRAXEx0WS+Q
n0uybz1DnS3dFhvohKY1oAUMgitDjSNeh9dZB5PhCKrZINYMOMVQi3PS2ZiJ1oQlskEfnQEJ4wTYJS8A
4A/YUbdBLRhgEliEUXKoKQV0U2DqZ39XALnkfawVe3gZIj9kfJcGgy0n8Y2aMhuvpnz5JMWSZ+YCLWt+
CMuSk4rWVGbvA1o2fN/9fgJK6agqYGjCsMSPhkDyA0wBdUX22l7TH7Cc/rmCy4BTwyyLv2fsM6QCedRg
Od4NeKn5Z1Ab3NL/GuX7ifvfKNPg0ByaNYTAEAJDCPyfQQCKmPIQdvrqdyg4lN+k4fIjD7n+e8MQjEnC
xUgO1v9b1gcZnBC8/7fyFb6D7wtsoMlCurju3aoyvJPBcbhwMXH8Q7z5Cm5xcVEF1Hlj+ucB+vr6jkVF
K061t7feAAV13mUoKSmpdP16590N60t+gK/Jfv2TH7gyO5SUrGmCd3K8daCYckJCXM2VzvYHWZlpDTEx
kTv31O847+MzPg3mcBMdZ2en+Kam+mvNh/b9HBEeuiV/2eIfa6or94uJif51/yuASLecOfmkuLjwFMjQ
/39zGFCDC7v9y01q/PhxG97N7uYvSF7+6/07r0xMTXEMS2l9MTs7O2NT94PuP8TFxfCjZ18TExfTa/+5
9S0UXhfCSzWoqEfdudVFKSkp8T6ECiclJzXm5eWehXEzsBDdJYsz2opXFeNV+K/5v6GxYx2ipoRMruvs
bHspISHu1F9gCwuL6Tm5mW1nz558AvdfLJlxG4K2NG9p0+767b+MHm22Cl71HQEYY6akzN9Xv2fbU3d3
V6z09qXFUG7XaO9s6wGFsQ4IhiXE/OlCa4+ZmWkBb15q5sLGgoLlZ+A394oeHRNZ0bS/8R486veXjW/P
mysrjsBZ896ya8tDT0/3sv4CBwT6zxxtZpZ+4FD9M2vrMVkwxjVVsIgFRkaG6Xv21v9iYWmxuj8AHh7u
SaamJukeHq4VDQ11XTDWd8d4FwD4lODWcubMU/gkF98fgPz8pVwA0G9sq61t8Zvo2wi/+VcM4aHHYskb
Z2Vl7oPqjuXXyXMq3xU4JDQ0ZcQIvSQn17Ebv//heDcIpIrOsmJT2bdAY+yhw/vv97cAdGpbqqsOy8sz
J8FHEs+H97tfQS1/Eo8fAnDxSntPVHTkjtjYmMx9jQ1n2RxOOoz31SPQAvbv33tr/HjvtPr6uqbg4ElY
PMVaAP8vRHPmzsnPzspoSUyM3RsWNqW588q51/0Fjo+PWwblrnhJSQmzEyeO/gFfZ9Lt7e3i7exssDqj
iADY2trgjY17BDgcjkV1ddXl+LiYA9OnhzdUb6t4FBgYUMXbXZ4FmJqZlhqbmZS1tbf+Brvv09+cEYCy
8vU35ZjM5I1VGx5Pmxa+Hcbl+GbyPEK4k7t21bagRfeam1bhqvxL/QXOWJS+HhwWRgehqPioww1767q2
b9/2HZxdbnUGAbCzs9vIA2Bp3pJyXV0ddHBaSNPKxmJNr+Xg76/6HwGwFmZmdmr7unWlJ2Coz8EhAL1H
QAuiS1RH56VXYKkTkR9fQYAzHRQXN2MvEO0LMeZW5rntF1qfoPdFZiWlq+sBgEQEAD6aOJxsbemZMH5c
ba+CX313/Mj9sU5Om1A3AFS8ufnARfiLgHKFhbhv0H7p/FsonOIZZwAAatdudfU5QbA2/1OtLZSv74TV
MM418cVLFu9ZWVxwHgFEvtFx0aeOHj10DUDngsiX5unp4V++seRyTm5OK3xtseoVlp08f96W3bu392Rn
Zx4MD5+asn1rxa85S3KOwZk2hzmCEZHhB8FhRmCyEhI6ZXZ19aanZWUl3UFBAQtycjJrd+2qeezo6DCf
B4CXt9fUivK1/6iqLOsOCPCfy51TX00vW7b0NJMphzQZGloa6Vtqyv/u7uaS6evnM72qcsOD2rrtz8DR
YlkNC6868bPiO1eXFJ2D/2TlWz6A2Z0FdIzTWHjAHcOOz/gOP0DgtzosbeFvZIzjctB55jq8dxznYojE
jnORLi975PHhzUHLwmfsuKNIE3d+ZC8t/ESG673eoYPVZXvo6Cz5exSA4FAbQmAIgSEEhhAYQuD/EQL/
BEXWJdoXTfdOAAAAAElFTkSuQmCC
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
gg==
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
Ba4QkBKiAAAAAElFTkSuQmCC
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
126, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
+QAAAk1TRnQBSQFMAgEBJAEAASgBAAEoAQABMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABwAMAAeABAQIAAQEBAAEIBgABaAEBFwABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHA
AdwBwAEAAfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANC
AQADOQEAAYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/
ATMDAAFmAwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJm
AgABZgGZAgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEz
AgABzAFmAgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEA
AWYBAAEzAQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/
AQABMwFmAgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEA
ATMBmQFmAQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEA
ATMCzAEAATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEA
ATMBAAFmAQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEz
AZkBAAFmATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEA
AWYBmQFmAQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFm
AcwB/wEAAWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEz
AZkBAAGZAQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIA
AZkBZgEzAQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHM
AQACmQH/AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZ
Af8BMwEAAZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEA
AZkBAAHMAQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFm
AgABzAFmATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFm
AQABzAKZAQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/
AgABzAH/ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEA
AZkBAAHMATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEz
AQABzAJmAQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEA
Af8BmQHMAQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEA
Av8BMwEAAcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEA
Av8BZgEAASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4
AQAB8AH7Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA///AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/ACYAAf+8AAL/AQAC9AH/ZAAB/wH0Af9QAAT/AvMBvAEcAe8B8QH/YAAC/wHyAe0B8QH/TwAC/wHy
AfMC9AHxAZMB7QGSAfAB9AT/WgAB/wHzAfQBBwFEAbwC/1AAAfcB8AEHAfIB9AG8ARwB6wFtAZIC8gHv
AfEB/wMAAv9TAAH/AfIBBwHvAQcBbgG8AvEB9AT/SwAB7QHzAf8B8wG8AQcC7AHtAe8B7QH3Ae8B9wEH
AfIB8wHyArwB8wL/TQAC/wL0AfAB7wEHAe8BvAHxAfABBwHwAfID8AHyAfQB/xkAAv8BAA//HQAB7QHy
A/8B8AFuAesB7wH0AfEBBwH3AewB7QGSAe8DkgHvAfEB8wH/HAAR/x8AAf8B8QEHAe8C7AEHAbwB8AHy
AbwBBwLwBAcB8QH/FgAE/wH0Av8N9Ab/GAAB7AHxAf8BAAH/AfABbgHsAe0BvAH3AvMB7wLsAZIB9wPv
AgcB8wH/GQAC/wP0BfMG9Ab/HAAB/wHyAQcB7AFLARMB7AIHAusGBwHxAfIB/xQAA/8C9AfzAfIB8AIH
AfMB8gHxAvIB8QX0B/8SAAHsAbwB/wEAAf8BBwFuAe0B8AH0AW4B7wHyAfMB8AEHA5IB7wMHAfAB9AT/
EwAC/wH0AfMB8QHwAbwBBwHvAZMB7wEHAbwB8AHxAfIC8wX0Af8ZAAP/AQAB/wHzAewBcwFuAUoB7QHs
AUsBEwXvAbwC8gH0AQAE/w4AAv8B9AHzAfABBwG8AfEBBwLvAQcB7wHtA+wB7QHvBOsB8ALyAvMF9AP/
EQAB7AHwAf8BAAH/Ae8C7AHzAQAB7AHvAfEB8AG8AQcC8AQHAbwB8AH0Av8C9AH/EQAC/wHzAfABBwFz
AW4BFAFEAUMBIgFDARUBEgHrAewB7QHvAgcBvAEHAbwB8gH0GQAB8wHwAfMC9AG8AXMBwwGZAW4BkgHs
AXQBSgHtAW4BSwJuAe8B8AG8AfMC/wH0AfMB9AH/DQAB/wH0AfMB7wIVAesBkgHsARMB6gEVAeoCFALq
AfcB7AHrARIB6gHrAewBBwHvARQBBwHyBPMD9AL/DwABbgG8Af8BAAH0ARwC7AHzAfABbgHxAf8B8wHv
AUQBBwW8AfAB8QHyAfMB/wH0AfMB9AH/DwAC/wH0AfABbgkOAwsDEQFEAfcB8gH0Av8ZAAHzAQcB7wHq
AewB9wEcAsMBmQHvAQcBcwFEAXMBdAFKAREBFQFuAbwB8AHyAfQB/wH0AfIB8wH/DQAB8wG8Ae8B7AFt
AUMBEgFtAesB7AHrAeoB6wGSAusB9wHvAQcC7wHsAe0B6wFtARQBQwHqAQcBvAHvAQcB8QPzAvQD/wwA
AW0BvAH/AQAB9AHtAusB7QHrAZIB9AEAAf8B8AETAfcBvAHzAfQC8wHyAvMB8gLzA/QC/w0AAf8B9AHw
AW4GDgEQAUsBdAQcAgcBvAHxAvMB9AL/GQAB9AG8AW4DSwFEA24B9wEcAW4BSwFKAXQBSgJEAW4BBwHy
AfQC/wH0AvMB9AH/CwAB8QHtARIBFQFtAesBEgGSAuwBbQESAewB9wMHAbwBBwHwAQcC7wIHAe8B9wHr
AuwBFAJtAewBvALyAvMB9AL/DAABbgG8AgAB8wHtA+sBbQHsAe8B8AHvAewBFAHvAvEB8gH0BP8B9ALz
AvQD/w0AAf8B9AG8AREGDgFLAXQCkwSZAQcCvAHyAfMB9Af/FAAB/wHxARwBGgEHAUsBRAHvAfEB7QOT
AUsBbgFEARABQwFEAW4BBwH0A/8B9ALzAfQB/woAAfIB6gESAeoB9wHvAQcBvAHwAgcBvAEHAfcB7wG8
AfECvAEHBu8BBwG8Ae8BBwG8AewBFAHrAe8B6wHwAvEB8gHzAfQB/wwAAewB8AIAAfIBHALsAm0BbgES
AUMBEQFKARQB8QHyAvAB8QHyAfMB9AEAAv8E9AH/DgAB/wH0AfABFQUOAQ8BSwJ0AZMCdAFzAm4BdAGT
AQcB8gH0Bf8B9AP/EwAB8wH2ARsBBwFLAe8B8QFvApQCmQREAUMBRAHvAfEB8wH/AgAB/wPzAfQJAAH/
AfEC6gHvAfQB8wHyAvMB8gHxA/ABvAPwAQcBkgHtAuwC7QL3Au8BBwG8AQcBkgLsAesB9wG8AfEC8gHz
Af8LAAH/AW0BvAIAAfIBBwEcAewC6wHqARMBQwFEAUoB8QH/AfIBvAHyAfMC8gHxAfMD9AT/DAAD/wH0
AfEBkwFEBg4EEQEQBA4BEAESAbwD9ALzAfEB8gHzAvQC/xEAAf8BvAGTAe0B6wGSAXQBdQKaApkBRQJE
AUUB7QHvAbwB8QHyBPQB8wL0Af8KAAH0AuwBBwH3AvEBvAEHAbwE8gHxAfIB8AHtAeoBFQJDAeoBbQHr
Ae0BkgTvAwcB7wHtAewB9wHxAvMB9AH/CwAB/wHqAbwCAAHyAe8D7AH3ARMBFAFDAUQBbQHvAfIB/wHw
AbwB8wL0AfMB8QLyAvMB9AH/DAAC/wLzAfIB8QG8AZMBbgFEAQ8NDgHtAbwB8gHzAfIB8AG8Ae8BbQHs
AQcB8wL/DwAB/wIAAfQBvAHxAfIB7wEWAXUBlAGaApkBRQNEAe0BcwHvA/IC8wP0Av8LAAHyAewB6gES
Ae0BFAERAUMBbQHsAQcB7APqARUBEQEPBQ4BFQHrAZIF7wEHAfABvAHtAW0B6gHwA/QB/wwAAeoBBwIA
AfEBHAGTARwBbgEcARIBFQFDAUoB7wHsAe8B/wHxAfAB9AH/AfQB/wH0A/MC9AL/CwAC/wHyAewB7wEH
ArwBBwKTCEsBRAMOAUsBkwG8A/ABvAEHAZMBRAEOARMB8AH0Af8PAAHzAv8BBwFuAewB/wHwAXQDdQHD
ARoBbgNEARQBRAGSAfIB8wLwAvQD/w0AAfQB8AEHAm0BBwG8AZIBEwMVAUMFEQIQAg8BDgEVAewB9wEH
Ae0C7wG8AQcB7wHtAe8B7AHyBP8MAAHqAbwBAAH/AfEBcwEcAZMBHAHtAeoBQwFEAW4B7AFuAfQB/wLw
AfQB8wj0BP8IAAP/AfQB7wFDARUB7AHvAgcDkwF0BHkBdAEiAg4BSgJ0BW4BSgFEAg4BDwG8AfQB/w0A
Af8B8QG8Af8B9AGUAUsBRAH0AfABdAF1AZQBGwL2Ab0BdAFLAUUCRAHsAfEB8gHvARwB8wX/DQAB/wH0
AfAB7wFtARQB6wG8AfcB7AFDARUCQwERAkMDEQEQAg8BFQHsAesBFAFtAewBvAGSAfcB7AHrAQcB8gP/
DQABbgG8AQAB/wHwAW4B6gEcAXQBSgFtAUMBSgFzAW4B8gEAAfQBvAHxAf8B8QHyAv8C9Af/BgAD/wL0
AfMBvAEcAUoBbgFzARwCkwN0BHkBSwIOAUQCdAFEAg4BIgUOARAB7AHxAfQB/w0AAfQBHAEHAf8B8wGU
AUsBRAH0AfMBkwEaA/YBGgGaAZMBmgFvAkQB7QHzAfEBHAF0AfEG/w4AAf8B8wG8Ae8B8AH0AfIB8AHs
AREBQwYVAxECEAHqAewBFQLqAW0B7wHsAm0BvAH0EAABbgG8AgABBwFKAUQBbgF0AW4BSgETAXQBkwEH
AgAB8wEHAfEB/wHwAfMCAAHzAf8BAAL/CgAC/wH0AfMB8gHwAbwBkwFvAW4BSwJEAUMDIgMRAUQDDgFE
AksCDgFLAW8BbgFKAUQBSwFzAZMB8AH0Av8NAAHxAW4BHAHyAfMBbwFLAW4B/wG8AQcEGgGaAZQCkwFv
AUQBSwEcAfMBvAF0AXUBBwH0A/8UAAH/AfQB8wHxAe0CQwETBBIBEwIVAxEBEwHtARIBQwHsAfEB8wEH
AfcB8AHzEQABSgG8AgABHAEVAUQBSgFuAXMBSwFtAW4BmQG8AQAB/wHzAbwD8AH0Av8B8AH0DAAC/wHx
AQcB7wHtAW4BHAFEFA4BDwFLAW8BdAOTAQcBvAHyAfQC/w0AAbwBGgGTAbwB8wGTAZoBkwHwAW4BSgFu
ARwFkwFuAUsBbwF0AQcB8gK8AZoBmQH0FwAB/wLzAfIB7AEVARIB6gHrAuwB6wHqARMBFAEVAhEBEwHv
AQcB7wG8AvQB/wH0Af8SAAFKAQcCAAEcAkQBSgFLAW4BSwFuAUoBmQHwAQAB/wHyA7wD8AK8AfQMAAH/
AfQBBwESARABDgFEAW4GDgEiAhUBSgNLBEoBQwEPBA4BFQFuAZMBcwHtAQcBvAHzAfQC/w0AAe8BvAGT
AbwB9AKTAQcB7QJLAkQBbQFuARwB7QHvAewBbgF0AbwB8gH0AfMBvAGaARoB9A4AAfIBBwG8AfMC9AH/
AfQBvAEHAfcB7wHwAewBFAHqAewB9wIHAfcB6wESARQCFQERARMBvAHzAfQE/xQAAUoBvAIAARwERAJK
AW4BkgEHAZkC/wHzAfACvAIHAe8BBwHzDgAB/wH0AfEB7wESARwBcwEPAw4BSgF0AXoDmgN0AXMCmgJ6
AZkBSgQOAUQBkwEVAg4B6gHvAfEC/w0AAbwBdAGTAQcB9AP/AewCbghEAe0B8wL0AfMB7QJKARwB9A0A
AfQBBwHvA/cBEgGSAesCkgLsAQcBbQETAW0B7AEHAvIB7wHsAW0BEgEUARUBQwHqAfAZAAH/AW4BBwL/
AbwBSgFDAUQDSwHsAf8B8wGZAQcB/wHzA/ABvAIHAbwB8gH/DQAC/wH0AfMB8gHwAbwBHAFDAg4BbgJ0
AXoBeQFKBA4BQwF5AnoBmgFSAg4BAAEOAW4BHAESAesB7QEcAQcB8AH0Af8NAAHzAXQBbgEcAf8CAAH/
AW0BRAEjASIBQwMiARABIgERAW0B8QH/AQAB/wEHAksBHAHyDQAB8gHvAfEB8AIHAW0BEgHsAfMB8gHv
AfQB8QH3AeoB7AHtAQcB8QH0AbwB7QHrARIBEwEVARQB7AHyGQAB8wFLAW4B8wEAAfEB7AFDAUQBSgFL
AW4BvAEAAfMBHAHsAf8B8gK8AfABvAIHAvAB9A0ABP8C9AHzAfAB7wFzAUQBEQFzAXQBmgF0ASIEDgFD
AXkBmgKZAUoCDgFDAW4BkwK8AfEB8gHzAfQD/w0AAfMBcwFuARwB/wIAAfQFRAEVAUQBFQFDAiIBEQHw
Af8CAAHwAXMBFQEcAfINAAHzAfcB7wL/AfQC7AEHAbwB8wMAAfAB7AHrAe0B7wG8AfABBwHtAesBEgET
ARUBEwGSAfQZAAHyAUsCRAHzAfQBHAFEARUCRAFuAfIBAAHzAhwB/wHxBLwBBwG8AQcB8gH/EQAD/wH0
AfMCvAHvAesBSgFzAXQBIgMOAUoBdAGaAXQBbgFKAQ4BEQFuAZMBvAHyAfMD9AP/DwAB8AFzAW4BRAHt
Af8BAAHyASIBbghEARUBIgHxAgAB/wG8AUQBSgGTAfQNAAH/AfAC7wEHAe8BkgHxAQAB/wMAAf8B8wHv
AuwB7QP3AewBbQESAhMB7AHxGQAB/wG8AkoBcwEVAhwBcwFEARUBRAFKAfIBAAHxAW4BvAH/AfABBwO8
AQcBvAHxAf8UAAL/AfQB8wHyAfABvAEHAZkBdAFKAw4BIgJ0AXMCHAIHAbwB8AHzAfQG/xAAAQcBdAFL
AUQCSgG8Ae8BbgFLAkQBQwIiAUMBFQJEAUMBvAHwAe8B7AJEAUsBBwH/DgAB/wP0AfMB9AH/BgAB/wHy
Ae8B7AHrAewB7QHsAW0B6gISAesBBwH0GQAB/wEcAUoB7AGZAXMBRAFuAXQBSwFEARABRAHxAQABkgFK
Av8BvAMHAbwBBwG8AfIVAAP/AvQB8gHwAbwBmQFEAksBDwIOAUQBcwGTAQcBvAHwAfEB8wL0A/8UAAHy
ARwBbgFzAnQBbgFLAXQBSwJKAUQCDwEiBEQBEgNEAUoBSwFzAfAB/xwAAf8B8gHvAewCbQISARQB6gHt
AQcB9AH/GQAB9AEcAUoBBwHwAXQBRAFLAW4BdAFKARABQwG8AfEBSgFtAv8BvAQHA7wB/xUAA/8C9AHy
AbwBbgIPAXQBbgEQAg4BDwFzAZkBvAHxA/QC/xYAAf8B8wEHAZkBmgF6AXQBSwF0Am4BSwFEAw8BQwFK
AkQBFQFEAksBdAGaAQcB/x4AAf8B9AG8Ae0B7ALrAewBBwHyAf8bAAH0AW4BSgG8Af8BvAFzAW4CSwFz
AUQBFQHsAeoBSgGSAv8B8QQHAfAB/wG8AfIB/xQABP8B9AHyAQcBEwEOAUoBkwF0AW4BDwMOAewB8AHz
AfQE/xcAAf8B9AHxAbwBGgGZAZoDdAFLAiIBDwELARACRAFzAW4BSwGZAZoBmQG8AfQB/yAAAf8B8wHx
A/AB9AH/HAAB8gFuARIBvAH/AfMBcwFuAUoBFQFLAXMCRAIRAZIB8gH/AfMB7wMHAfMB/wHyAfAB/xYA
Av8B9AHxAe8BDwEUARwBmQGTAXQBRAMOAW0B8AH0Bf8ZAAH/AfMB8AGZARoBdAGZAZoBdAMiAQsBIgFE
AUoBdAEaAXQBmQEHAfIB8AH/RQAB9AEcAXMBvAEAAfMBmQF0AhUBRAGaAZkBbgFDARUB9wEHAfAB8gEH
Au8BBwHzAQAB8AHyAf8WAAL/AfQB8QHsAQ4BHAKZAZMBcwELAw4B7QHxAfQD/x4AAfABdAFLAZkBdAFL
AiIDCwFEApoBwwF0ARwBSgLtAf9FAAHzAXQBSgHwAQAB/wHyAbwCSgFEAUoBGgEbApkBBwHwAQcCvAEH
Au8B8wH/AQcB9BcAAv8B9AHwAW0BHAEHAZMBcwFLARACDgERAXMBvAHzA/8fAAHzAQcB7wGZAXQBbgNL
AUQBCwFLAXkBdAGZARwBvAEcAW4BvEYAAfIBBwFuAfADAAHyAUsBSgFEASIB8wH0AfMBBwHwAf8B8AQH
Ae8C8QEHAfQXAAL/AfQBvAHvAbwB7wFKASIBDgEPAUMBbgGTAfAB8wH0Av8hAAH/AfQB8wHwAQcBdAJv
AW4CRAJKAW4B7QHvAewB6wHsAbwB9EQAAf8B8AGZARoDAAEHAkoBRAFtAfQBAAH/AbwB8QEAAfQBvAMH
Ae8BBwHvAfAYAAP/AfMB8gHxARwCDgFLARwBBwG8AfIB8wP/JQAB8gGTBHQBbwNEAUoBRAFKA0QBSgFE
AfJEAAH/AeoBBwH/AQAB/wHtARwBSgFEAXQB9AEAAfQBvAHxAQAB9AG8AQcB7wEHAbwCBwHyGQAD/wH0
AfMB7wEQAREBkwEHAfAB8wH0A/8lAAH/AfABkwJ0AcMBmQFvAkoBbQZLAW4B8AH/RQAB6gG8AgAB9AHs
AkQBcwGZAfQBAAH0AbwB8QEAAf8B9AG8AQcB7wHyAvAB8hsAAv8B9AHwAewBIgHsAfAB8wH0A/8mAAH/
AfABdAFLAXQBwwFuAUsCSgFzAfAB8QEHAnMBvAH0Af9GAAFEAe8CAAH/AQcDGgGZAf8BAAH0AvACAAH/
AbwBBwHvAfMfAAH/AfQB8wHyAQcBbQHwAfQC/ygAAf8BvAFLAW4BdAHDAZkBbgFEAewB/04AAUoBvAMA
AfQBGgHxARoB8AMAAfQB8AH/AQAB9AMHAfMgAAL/AfQB8wHxAfIC/ykAAf8BvANEA0MBSwHzTwABbgG8
BAAB/wH0AfMB/wMAAfQB8QIAAfMDBwH0IQAD/wL0Av8pAAH/AfQB7wF0AZkCdAFuAe9PAAHyARwB8wsA
Af8B8QIAAf8B8AK8Af8kAAL/LAAB/wG8AXMDmgEcAfMB/00AAf8BBwG8DAAB/wHxAwAB/wHzAfRTAAH/
AfQBHAGTARsBBwHyTwAB/wHzAf8MAAH0AfNaAAH/AfQB8wH0AfYB/10AAf8B8gH/vQAC//8A/wD+AAT/
uwAD/wH0Av+IAAn/KAAD/wH0ARQD/4cADf8kAAP/Ae8BRAH0A/8VAAH/FQAE/wwAAv9GAAX/AvMB9AHz
Cv8hAAL/AfMB7AFLAe8B9AP/FAAB/xAAC/9QAAX/AfQB8wHwAewBvAHxAfIB8wL0Cv8aAAX/AfABEwFz
AXQB8wj/FQAc/0kABP8B9AHzAfIB8AH3AUQBSgGSAQcB8AHxAfIB8wL0CP8YAAT/AvQB7wFKARwBcwEH
AfIB9Aj/EgAN/wH0BPMB8QHyAfMB9A3/QgAE/wH0AfMB8AEHAe8B7AFKAUwBRAHrAe8BvAHwAfEB8gHz
AvQH/xYABP8B9AHyAfABFAFzAnkBBwHwAfIB8wP0Bv8PAA3/AfMB8gHwArwB7AEPAUMB8AHyAfMB9Az/
QAAD/wH0AfIB8AHvAZIB6wESARUBSwJSAkoBkgG8AfAB8gHzBfQG/xIAA/8B9AHzAfIB8AG8AQcBSgEa
ARwBmQFzAgcC8AHxAfIC8wH0Bv8KAAX/AvQC8wHyBPMB8gG8AfcB7AHrAW0BEQFKAUMBEgEHAfAC8wT0
C/87AAP/AfQB8gEHAfcBEgFDAUoBUQVSAVEBSgHsAbwC8gHzBvQF/xEAAv8B9AHyAfEC7wHsAesBbQG8
Ae0BbgFtAusB7wO8AvAB8QHzAfQE/woAA/8C9AHzAfEEBwO8AQcB7QESARQBEQEPAUoBHAFKAUMB6wHv
AQcB8ATyA/MC9Af/FwAC/yIAAv8B8gEHAewBQwFLBFgEWQF6AZoBGgG8AfEC8gHzAvQD8wL0BP8PAAL/
AfQB8gEHAe8B6wJDARABmQK8AeoBmQFEAhABbQHwAfEEvAHxAfMB9AT/CAAD/wHxAe8BBwGSARIBDgET
AesC7wHtAhAB7QGZAUoBFQFDARwBRAFDARMB7QHvBPcCBwO8AfIB8wH0Bf8WAAL/AfIXAAH/CQAC/wH0
AbwB6wFKAXkCmgIaAXQBWAF6AZoCGgK8AfED8wLxAvQB8wPyAfQE/w0AAv8B9AHzAfAB7AEUAUoBSwJ0
AZkB8AHyAfcBHAF5AXQBSwFEARUB7QLxAfACvAHwAfIB9AT/BwAB9AK8Ae0BFQFDARQBEwFKARUBEQEP
ARMBFQFDARUBDwEVAXMBSwEPAhEBEAEPARQB6wHsAesB7QHsApIC9wIHAfAB8gHzAfQD/wQABP8OAAH/
AfMB8QL/DwAD/wMAAf8JAAH/AfQB8wHtAXMBmQIbAfAC8QFKAZkBGgHwBAcB8AG8AfAB8QLvAfEB9AHz
AfIC8AHyAfQD/w0AAv8B8wHwAesBFAFLApkCGgEHAewB8gHrAe8BvAGZAXkBUgFLARUBbQG8AfIB8QHw
AbwB8AHyAfMD/wcAAfEB6gFKAW0BEgHsAUQBFQHqAW0BSwFKAUQBEQIVAUMBDgFDAUQBEQMPAUoB7QH3
Ae8CHAFzAUoBFAHrAvcC7wG8AfEB8wP/BAAB/wH0BP8CAAP/BwAB/wHyAQcB9AP/CAAG/wHzAfQB/wIA
Af8JAAH/AfQBBwHsARoBGwHzAbwB8AHyAfEBUgHzAgcC7wIHAbwCBwQcAfMB9AHyAfACvAHyAfQD/w0A
Af8B8gHrARUBeQEaAfMB8gG8AfABmQFuAewBbQG8AvAB7wGZAXQBUgFEARIB8QH0AfMB8QG8AfAB8QH0
A/8GAAHzARwBSgEVAUMBFAFzAXQBRAEVAeoBRAJRARABDwFDARAEDgEVAfIC8wEbAhoBmQF5AlgBRAES
Ae0C9wEHAfAB8gH0Av8EAALyC/8CAAT/AfABBwP0Av8DAAn/AfIBvAH0Av8BAAH/CAAC/wHxAe8BBwHw
AfIBBwG8AvMB8gEHAfEBBwHvAfcB7wG8AfADvAHvAxwBcwLzAfICvAHwAfME/woAA/8B7wFKARoBGwHw
AbwC8gHxARwBmQFzARoDBwG8AQcBHAJSAUoB6wHyAfQB8wHxAbwB8AHyAfQD/wQAAf8B8wHsAUoBSwJK
AUMBEgFzAXQBSgFEAUoCSwFEAREDDwFDAewB8gHzARsBmQEcBVECSwFEARUB7QLvAfAB8gH0Av8EAAH/
AfcB8wH/AfQB/wH0AfID9Aj/AQcB8AHyAfMB8gHzAfQG/wHzAfIC9AH/AfQBkgHxAvQB/wEAAf8IAAH/
AfQBvAIHAbwB9wEHAfEB9AH/AfMB8gHxAfABBwH3AQcB8AHxAfIB8QG8AQcB9wNzAQcB9AHyAfACvAHy
AfQD/woAAf8B9AHwAUoBHAH0AfAB7wHwAvMB8gG8AZkBGwG8Au8B9wHvAQcB9wFzAlIBSgHsAfMB9AHz
AfEBvAHwAfMD/wQAAf8BBwEUAUMBRAFKAXQBSwFEAUMBSgFuAUQBFQNDAREBDwEOAeoBBwHzARoBdAFR
AUsESgZEAW0B7wEHAfAB8gH0Av8EAAH/AbwB7wL/AfQB8wHvAfMK9AIHAfIB8QHwAfEB8wP0A/MBkgHw
AvMB9AG8Ae8B8gHzAfQB/wEAAv8HAAH/AfQB8AK8AgcB7wHwAfMB/wL0AfMB8AMHAfAD8gHwArwBHAJz
AXQB8wH0AfICvAHxAfQD/wkAAv8B8wEVAW4BGwH0Au8B8QHzAfQB8gHxAbwB8gIHAfcBkgHsAu8B9wFL
AlIBRAG8AvQB8wHwAbwB8gH0A/8DAAH/Ae8CRAEVAREBQwFzAXkB7AFKARUBDgEQAQ8CDgEPAUMB6gHz
ARsBHANKAVEEWAFKARUCEAFDARUBRAHtAbwB8QHyAfQC/wUAAf8B7AHyA/8C7wPzAfAB8QLzAfIC8wLv
AfEBvAEHAbwB8QHyAQcC8gHxAQcB9wPyAfEB7wHyAvMB9AX/BwAB9AHyAfEC8AHvArwB8gLzAbwB7ANK
AewBBwHwAvEC8AHxAbwCcwFMAZkB8wHxAvAB8QH0A/8IAAL/AfQBBwEVAZoB9AG8AQcBvAHxAfMB9AHz
AvECvAHvAfcC7wH3A+8BSwFSAUsBcwHzAfQB8wHxAfAB8gH0A/8EAAHzAQcB7AFKAUQBQwEVARMB6wEU
ARABFQFRAUoBEAIPAeoB8AEaAXkBUgFRB1gBUQFLAUoBEQEQAUMB6wHvAbwB8QHzAfQC/wYAAfAB9wP/
AfMB7AHyAvMBvAGSAfIC8QHyAfAB7ALvAgcBvAHxAu0C8AG8Ae0BvAHyAvEB7wEHAvIB8wH0Bf8HAAH/
AvQC8gHwArwC8QH3AW4BdAJ5AVIBUQFLAfcB8AHxAvIC8wFzAkwBHAHyAfEB8AHxAfIB9AP/CAAC/wHz
AesBUQEaAfAB8gHxAQcB7QG8AfMB9AHzAvIB8QHwAgcB9wEUAfcCBwHtAUsBUgFLAfEC9AHyAfAB8gH0
A/8EAAH/AfQB8wHvAewB6gFEAkoBRAFKAhwBUQFEAQ8BbQHyApkBGgdYAVEBWAF5AlEBRAERARMBHAEH
AfAB8QHzAfQC/wYAAf8B9wG8AQAC/wLvAvQB8QHtAbwB8QLwAZIB6wEHAesB7wEHAfABvAESAQcC8QLv
AfEB8gHxAQcB7wHwA/MB9AH/AQAD/wYAA/8D9AHyAfEB8AEHAfcBSwGaARoCGwGZAXkBUgFLAQcB8QHz
AvQB/wHvAkwBUgHxA/IB8wL0Av8IAAH/AfQB8AEUAVkBGwHwAfMBBwISAesB8QLzAfQD8QG8AQcBbQER
AUMBkgEHAe8BSwFYAVIBBwH0AfMC8gHzAfQD/wUAAv8B9AHzAe8BcwJKAUQBHAEaAUoBFQFDARIB8AHv
ArwBeQdYAVEBWAGZAVECSgFEAesB7wHwAfEB8gHzAfQC/wcAAfIB7AHyAgAB/wHsAfIB/wHzAQcB9wHw
AfEB7wFtAfcB7wHrAewC8AHtAbwC8gHxAesBvALyAfAB6gHwAfQC8wH0Av8BAAP/BgAH/wHzAfEBvAHs
AZkBGwG8Ae8B8AEHARwBeQFSARwB9AT/AfABSwFMAVIBvAHxA/MB9AP/BwAC/wH0Ae8BSgFZARoB8gH0
AfEB8AHyAQcB7wHxAQcB6wEVARMB9wEHAewB6gG8AZkB7wG8AQcBbQJSARwC8wLyAfQE/wYAA/8B9AHy
AbwBHAFKAXMBHAFEAhEB7wK8AfABmQhYAVEBUgEaAVEDSgFtAQcC8gLzAfQC/wcAAf8B7wFtAfMB/wEA
AQcBkgH0Af8B8wHvAbwB8QHsAe8CvAGSAesBvAEHAfcB8gHzAfEB7AH3AfIB8wHxAewB8AHzAf8C9AL/
AgAD/wYAAf8B9AX/AfQB8gHwAXMBGgHzAewBEgEUAeoB6wFRAVgBeQH0BP8B8QEVAUwBUgG8AfIB8wL0
BP8HAAL/AfQB7AFLAVgBGgHzAfQB/wH0AfMB8gEHAeoBFQFKAksBFQEUARwB7wS8AfEB7AFKAVIBdAHy
A/MB9AT/BwAD/wL0AfIB7wEcARIBFQERAe0BGgG8AfIBGgGaAXkDWAJ5AlgBUgFRARsBcwJKAXMBkgHx
AvMD9AL/CAAB9AHsAe0B8wEAAfIB6gHsAfQB/wHyAfMB9wEHAfAC9AHxAewB6wHzAfEB9AHzAZIBbQEH
AfQB8wH3ARwB8QX/AwAD/wYAAv8B9AX/AfQB8QGZARsBvAFmAosBswESARUCeQH0A/8B9AG8AUMBTAFS
AbwB8wH0Bv8HAAL/AfQB7AFLAXoBmQL0BP8B8wFzAVIBegFYAUwBdAG8AQcB8QTyAfEBkgEVAUwBcwHx
AfIB8wH0BP8LAAL/AfQB8wHwARwCEwH0AZkB8gEbARoBmgF6AZkCeQKZAnkCUQHzAXMBFQFKAXQBBwHy
AfME9AL/CQAB8gHtAewB9AHtAewBFAHsAfQBAAHzAQcB8gH/AgAB/wEHAW0B8gL/Ae0B6gHvAewB8ALs
AfAJAAP/BgAB/wLzAfQE/wH0AfMBmQHzAewBkQG1Ae8BtQGRARQBmQG8Af8B8wH0AvMBvAFDAUwBUgG8
AfMB9Ab/BwAC/wH0ARIBSwF0AZkB8wX/AfQBBwFKAXkBWAFSAUsB6gHxAfIB8wHyAfEC8wEHARABUgF0
AfMB9AX/DQAC/wH0AfMB8QHrAe8B8AHxAhsBGgWZAhoBvAGZAVIBUQHzAW4BFQFKARwB8AHzA/QE/woA
AfAC7AGSAfEBvAHrAfcB8wIHAfIBAAHzAfIBAAH0AQcBkgHyAe8B6wG8AfEB7wHtAesBvAH0CQAC/wcA
Af8B8QHwAfMC9AL/AfQB8wEHAfMBHAH3AbwB8QEJAbQBbQEaAbwC8wHxAfAB8gEHAUMBUgFYAbwB8wf/
BwAC/wH0AesBSwFSAZkB8wH0AfIBBwHxAQcB7AEVAUoBmgEaAXQBRAEOARMB7AH3AuwC9AEHARABUgF0
AfQF/w8AAv8B8wHyAe0B8QEcAxsCGgKZAbwD8AG8AZkBdAFYARsBSgEVAUQBcwHxAfQH/woAAf8BvAHs
AfEB/wEAAbwB7AGSAQcB8QL/AQcB9wL/AfEB7wHsAe8B8AL/AfEBkgEHAfQB/wkAAf8HAAH/AfQBvAEU
ARwC8wL0Af8B8wHwAhsB9wEHAbwBuwHrAZkC8QH0AfMB9wFDAQcB9wEVAVIBeQHyAfMD/wsAAv8B9AHs
AUsBTAEcAfMB9AHvARUBEQEcAZkBHAGZARoBBwFLAUUBEAEHARoBTAFKARwC/wHvAUMBdAGZBP8SAAH/
AfMB8gGSAfEBGwLzARsCGgK8AfACGwHxArwBdAGZARoBSgEVAUQBHAHzCP8MAAHwAfMDAAHxArwB9AEA
AfMB7AEcAbwBAAH/AfAB8QHwAf8CAAH0AfAD/xEAAf8B9AEHAUsBSgHsAfAB8wP0AfIB8QHyARsBBwG1
Ae0BBwHyAfAB8wH0AfMBkgFSAUsBSgFRAVgBmQHyAfMC/wwAAv8B9AHvAUsBUgF0AfAB8wHwAZkB8gHw
ARwBGwHxARoBSwF0AbwBdAGZAfEBvAGZAbwB/wH0Ae0BRAF0AZkB9AL/EwAB/wHzAfAB7wHwAvMCGwG8
AhoB8QTyAfABvAF0ARsBmQFKARUBSgGZAfQI/xEAAf8B8wHwAv8B7wHwAfIB7wHzAQAB8wHyAf8GAAL/
EQAB/wH0AQcBUQFMAksB9wHyAvQB8wHyAfEB8AHyAfMB8QHwAfEB8wL0AfMB7AJ5AVIBWAF5AbwB8gH0
Af8OAAH/AfQBvAFKAVIBTAG8AfMB9AHyAvQBcwJ0AUwBUQJMASsBUQHwAfQB8wH0Af8B8gFtAUsBmQG8
AfQB/xQAAf8B9ALwA/MCGwHwBBsB8gHxARsB8gGZAXkB8wGZAUoBFQFKAZkI/xMAAv8BAAH3AbwB/wEA
AfEBBwP/AgAB/xcAAf8B8wG8AVEBWAJMAUsB6gHwAvQC8wPyA/MD9AHyAXMBmgJ6AVkBUgG8AvMB/w4A
Af8B9AHxAesCUgF0AfIB8wL/AfMBSwEsASsBRAFSAUMBJQEsASMB7wH0Av8B9AEHARQBWAEaAfEB9AH/
FAAB/wH0AfIB8QEbAfMDGwHxAhsE8wIbApkB8wGZAUoBFQFuAbwF/xgAAfQB7AH0A/8BvAHyHAAB/wHz
AQcBUgFYA1IBdAEcAfEE9APzAfQD/wH0AfIBHAEaApoBegF5AXMBBwHyAfQB/w0AAv8B8wH3AVEBUgFK
AQcB8gH0Af8B8QEVAUwBSwFzAZkBeQJKASQBdAP0AfIB6wFLAZkBvAHzAv8UAAL/AfMB8AHyBRsB8gbz
ARsBvAEbAfMBdAFKAUQBcwHxHQAB8gHqAfIB/wEAAfQBBwHxAf8bAAH/AfMBBwFSAVkBWAJSAbwB8AHy
AfQK/wH0AfEBHAQaARsBGgG8AfMC/w4AAf8B9AHwAUQBTAFLAUoB8AHzAfQBBwFKBRoBGwF5AVMBUgLz
AfIB7QFEAXQBGwHwAfQB/xUAAv8B9AHxAfIGGwbzAfEBGgH0AfABUQJKAQcB8x0AAf8B7wHsAfQBAAGS
Ae8B/xwAAf8B9AHvAVIDegFYAXMB8AHzAfQK/wH0AfABHALzAvQB8AHzAfQC/w8AAf8B9AHzAQcBSwFS
AUsBbQHwAfIB7wFRAZoEGgL0AXoBeQLyAZIBQwFRAhoB8wH0Af8WAAH/AfQB8wHwAfQEGwfzAfAB9AHz
AXkCSgF5AfAB9B8AAe0B8QHyAe0B9B0AAf8B9AG8AZkBvAGZAXoBWAFRAesBBwHzCv8B9ALwAvIB8AHy
AfMB9AL/EQAB/wH0AfIBHAJSAUoBbQG8AfcBcwGaBRoB9AHzAZkB8AGSAUoBUgGaARoB8QH0Af8YAAH/
AfQB8gHwAfICGwfzAfIB8wH0ARoCSwFzAbwB8gH/HwAB9AH3ARwB8wH/HQAC/wG8AfAB8gHwAZkBegF5
AVIBSwHrAQcB8wj/AfME8QHzAvQD/xEAAf8B9AHzAfABdAJSAUoBEwHsAW4BegGaBBoB9AEbARwBbQFK
AXQBGgLxAfMB9AH/GAAC/wHzAfIB8AHyARsK8wF0AUsBdAHwAfEB9AH/HwAB/wHxAfAB/x8AA/8C9AHy
ARoBmgF6AVkBUgFKAusBHAG8AfAB9AH/AfQB/wLzAvID9AL/FAAB/wH0AfMBvAF6A1gBSgFDAUwBmgIa
ARsB9AEbAXkBFAFRAZoBGwH0AfAB8wH0Av8ZAAH/AfQB8wHxAfICGwTzARsC8wEbAZkBWAF5AfAB8QH0
Af9EAAX/AfMB8AEaAZoBegF0AhwC7wEHAfQC/wH0Av8B9AT/FwAB/wH0AfMB8QEHAZkBeQJ0AVgBmgIa
ARsC8wHwAhsB8wHyAfAB8gH0Av8bAAL/AfMB8QHyAfMBGwbzARoBmQEaAfAB8gH0Av9HAAP/AfQB8wHw
ARoBmQIcAQcCvAHzAv8B9AP/GwAC/wH0AfMB8gHwAQcCmQIaARsG9AHxAfAB8QHzAfQC/x0AAv8B9AHy
AfEH8wLyAfAB8gP/SwAC/wL0AfMDvAHwAfEB8wH0Av8gAAH/AvQB8wHyAfABvAHwARsB8gHzA/QCvAHx
AfIB8wH0Av8fAAL/AvQB8gG8AvEC9AHxAbwB8wH0Av9OAAP/BPQG/yEAAv8B9ALzAvIB8QPwAfED8gHz
AvQC/yIAAv8C9ATzAfQD/1EAC/8jAAP/AvQG8wP0A/8lAAr/gwAD/wP0Bf+4AAP//wD/AP8A/wD/AP8A
jQAQ/4EAAv8LAAb/GwAB/wHzDPID8wH/WAAE/yMAB/8FAAP/AfQB8wH0Av8bAAH/AfAN7wEHAbwB/yEA
Af8B9AH/CgAB/ygABv8iAAH/A/QJ/wL0AfMB7wH3AfQB/xwAAQcG7QfsAe0B7wHzHwAC/wHzAfIB8wL/
BAAC/wX0A/8aAAb/AgAK/xcAB/8BAAH/AvMF9AL/AvQD8wHwAewB7QEHAfQC/xcAA/8FSwRKBkQBcwHx
Bf8ZAAL/AfQB8gLwAfMC/wIAAv8B8wHyAvEB8gLzAfQD/xgAB/8BAAH/BvQD/xcACP8B8gHtAe8B8QHz
AfQE8wLyA/EBkgLvAbwB8wb/EgAB/wHzAfABvAFLAUoCSwREARUCQwREAXMBvAHxAvMB8gL/GAAB/wH0
AfMB8gEHAeoB8QHzAf8BAAH/AfQB8gTxAvID8wL/FwAB/wH0A/MC9AP/BfMC9AL/GAAC/wH0Af8C9AH/
AQcB7wH3AeoB7AHyAfMC8gHxAvACvAHsAe0BBwHyAvME9AT/DwAB/wHyAbwC7wJLA0QBQwIiAUMEIgFE
ARUBcwHwBPEB8wH0Af8VAAL/AvQB8wHyAe0BFAHtAfEB8wH/AfQE8QG8Ae8B9wHvAQcB8QHzAfQB/xcA
Af8B8wLwAfEB8gHzAfQB/wH0B/MB9AL/FwAD/wb0AfEB7wLqAe8B8AHyAfACBwHvAewBkgEHAfEC8gTz
BPQC/w4AAf8B8wG8AQcB7wFLAUoCRAFDCSIBFQFzAfEB8wTyAfMB9AH/FAAC/wL0AfMBBwFsARMBQwEH
AfEB8wHyAvEB8AEHAesB6gISAeoB7AHvAfQB/xcAAfQBvAMHAbwB8AHyAvMF8gPzAfQB/xUABP8B9AHz
AvQC8wH0Af8B9AEHAfcB6wFtAe0B7wHrAm0B6gEHAvEC8gfzAvQB/w8AAf8B9AHzAbwBSwEVAUQCQwQi
AhADIgEVAXMC9ATzAfQB/xUAA/8B9AHyARECbAEPAewF8QHwAewBEgGuAWwCEgEUAQ4B7wH/FgAB/wHz
Ae8BkgL3Ae8BBwG8A/EG8gLzAfQWAAH/AvQB8wHyAvQB8wHyAvMB9AH/AfQBvAHvARQBEQESAesB7wH3
AewBkgHxAvIB8wj0Af8PAAH/AQAC/wFEAUMCEAQiBxAB7AL0AvMC9AH/FgAD/wHzAewBQwFtARIBDwET
AbwE8QHvAW0B7AH3AewBEgFtAewBbQHqAfAB/xUAAf8B8gHtA+wB7QL3AgcBvAHxB/IB9AH/FQAC/wHy
AfEBvAHzAf8B9AHzAfICvAHxAfQB/wHyAbwB6wETAW0B7QLvAZIB7AGSAQcB8AHzBf8B9AL/DgAB/wHz
A/8CQwERASIBFQMiBRABQwEiAW0B8gHzAbwB8gL/FwAD/wG8ARQBQwHsAeoBDwFDAe8C8QHyAfABbQHs
AbwBBwHsAW0B7QHvAbUBbQHsAfQVAAH/AfIB7AFtAusD7AGSAfcB7wXxA/IB8wH/FgAB/wHyAbwB7wHx
AfQB/wH0AfIB8AL3AZIB8wH0AesB7AHvAesBEwHsAbwB8AEHAe8BkgH3Ae8BBwHxAfIB8wT/DgAB8wGS
AewBbQFEAkMDRAFKASIBQwJEA0oBRAEQASIBbQHzAewBBxoAAf8B9AESARUBQwGRARQBDwFDAW0C8QHz
ARIBkQH3Ae8B7QHsAesB7AHvAbsB6wESAfIVAAH/AfEBbQESAuoE6wHsAfcB8AbxAfIB8wH/FwAB8wEH
Ae8B8AP/AfQB8gHxAe8B7AHrAhUB7AHvAbwB9wETARIB7AEHAfMB8gHxAu8B9wHsAe8B/w8AAv8BvAEi
AUQCSgJLAkQBSgFRAUQBSgFLAUoBRAVKAUQB7AFKAZID/xcAAf8B6wETAUMBEwHsARQBDgFDARUB9wG8
AfcBbAL3Ae0B7AHrAewB6wHsAfcB7QHrAfEC/xMAAf8B8gISAhME6gFtAe0B8AfxAfMB/xcAAfQB7wHs
Ae8B8wIAAf8B9AHzAfEBBwHrAewB6gHtAbwD7wLsAfcBkgEHAfEC9AHzAbwB8xAAAfQBGgEcAQ8BRAFL
AXQBeQJ0AVIBSwFRAUsGdAJ5AXQBSgFEAUMB7AHzAfIB/xYAAf8BBwFmAkMBEwHrARUBDgERARQBEwEH
AesBrgPtAesBbQHrAuwB7QHvAewBvAL/EwAB/wHyAeoBFAFEARIBSgHqAhIBRAHrAfAH8QHzAf8XAAH/
AbwB7AHtAfACAAL/AfQB8gHsAeoB7AHtAvcC7wL3AuwCvAPvAQcBvAH0Af8PAAH/AZkBmgEVAUMBSwF5
ApoBdAFRAksBSgV5A6ABmgFLAUoBRAF5ARoB8hcAAfMBEgERAQ4BEAHtAQcB7AEOAQ8BEQEVAewB6wGR
AuwB7QLrAewB9wLsAe8C9wL/DgAC/wMAAf8B8gHqAkQBEgETAUQBFQFEARQB6wHwB/EB8gH/GAAB8wHs
AeoB7wH0AwAB/wG8AewBBwLvAewBBwLtAe8DBwHtAbwB/wH0AQcB7AESAZIB8w8AAgcBeQF0AUQBUQFL
AnkBcwFLAUoCRANKAksBdAJ5AXMBSwFDAUoBeQFzAfIB/xYAAe0CEQEQAeoBkgHvAZIBFAEOAQ8BEQET
AeoB7QHsAesBkQHtAfcB7QH3Ae8B7QP3Av8NAAHzAuwB8gH0AgAB8gHqAhECQwIVAkQB6wHwAfIG8QHz
AfQB8wL/FQAB9AH3ARMB7QG8Af8BAAL/AfQB8wHxAbwBBwHvAe0B9wGSAesB7AGSAbwB8gHzAfQCAAH0
AfABvAH/DwAB8AEHAZkBdAFLAXQBSgHvAXMDSwFKBEQBSgFLAnQBbgHsAUsBQwF0AXMB6wG8Af8VAAHw
AhUCEQESAeoC6wJDARQBDwEQARQB7QHrAeoB7wH3AQcB9wHtAZIB7QH3Ae8B9wL/DQAB/wHyARwBbgHs
Ae8B8wG8ARUCDwIRAUMCFQFEAW4B8AHyBvEB8wHyAvEB9AH/FQABvAEUAW0BBwHzA/8B9AHzAfEBvAMH
Ae8D7AHvAfAB9AL/BAAB/xAAAf8BvAEcAUoBSwF0AUsB8gEcAUQCSwFKAkQCSgFLAkoBkgH/AewBdAFD
AksBBwH/FQAB/wFDARQBDwJtARIBrgHqAWYBEQEOARQBFQEQAeoB9wHsAesB9AG8AfMB8QLvAfcCBwH3
Av8QAAHzAe0BEgJEAw8BEAIiAREBFQFEAesB8AHyCPEB8gHxAfIB/xYAAewBEwK8AfMC9AHzAfIB8QHw
AgcBvAHwAQcBkgH3AQcB8wL/FwAB/wHzARwBmQGaAXQBHAHyA0QBSgJEAkoBRAFKAUQBvAHwAUoBeQGZ
AUoBHAH/FQAB/wHsARABQwITAQ8BFQERBQ4BEAFtAewBBwHrAe0B8QG8AfAB8QG8AfcC7AH3AewC/xAA
AfQB8QG8AeoCbgJEAg8DIgEQAewB7wHrAQcBvAjxAfMB/xYAAQcBFAHsAbwB8wH0AfMC8gHwAwcBvAHw
AfECBwHyAfQB/xoAAfMBmQGgAXQBbgFKAUQBSwFuCEsB7QEUAXQBmgHDARwB9BYAAf8BBwHtAeoBEAMP
Aw4BEAIOARAB6wHvAfMC7AH3AewCkgHsAe0C7AHvAewC/xAAAbwCbgFtAW4BGgEcAW4BQwEiBA8B7AFt
AkQB7QHwB/EB9BcAAfMBbQEUAbwB8gH0AvMB8gHsA+sB7AEHAfIC8wH0Av8bAAEaAXkBdAFLAkQBSwFz
BHQBSwF0AXMBSwFtAUoBdAGaAUsB9BkAAfEBFAFDAewCBwL3AewBrgFtAhAB6gHwAf8B9wHsAZIB6wHt
AfcB7QEHAuwBvAHsAv8PAAHzAW4BSgFtAnQBSwVEAw8BFAMRAW0BvAHxAvIE8QH0FwAB/wHtAQ4B9wG8
AQAC9AG8AesB6gJtAeoBEgHxA/QB/xwAAfMBHAF0AXMCRAFLAXMBdAJ6AnQCSwFKAUQBSwJ0AfAZAAHz
AeoBFAHsAfAB9AHzAfABBwL3AZIBbQERAeoBBwK8AewB7QHrAfcBkgHsAe8BbQHtAbwB6wL/DwAB8gNu
AXMBHAREARQDRAFDAkQBQwFEAe0D8QHyBPEB8gH0Av8VAAHwAQ8BbQG8AfMB/wH0AW0B7QFtAesCbQHq
AfcB9AP/HAAB/wEHAXQBcwJEAUoCSwJ0AksDSgFLAnQBBxoAAfQB7AFtAfcBBwHxAe8BEwFDARIBrgHr
Aa4BEgFDAesB9AHwAewB7QHrAfcC7AHtAW0BkgHzAesC/w8AAfIBbgFKAUQB7QH/AW4FRAJDAUoBbgFE
AkMB7AfxAfMB8gHxAfIB9AH/FAAB9AETARUBBwG8Af8B8AEPAewB6wHqA20B7QHzAf8fAAH/AXQBcwFK
AUQBSgRLAVEBSgEVAUoDSwFzAfQaAAH0ARIB7AH3AuwBBwJtAe0BrgFsAa4BbQERARQB9AHwAZIB7wHs
AQcC7AH3AW0BBwH/AewC/w8AAfACbgFEAe0B9AJuAkoDRAFtAW4BdQFLAUMBFQHsB/EBAAH/AfMC8QHz
FQAB9wEOAewBuwHyAe0BFQHrAewBFAESAW0BEgHsAfIhAAHyAUsBSgJLAUoERANKAUsBUQFKAQcB/xkA
Af8B7wESAfcC7wFtAfcCBwGSAW0BEwHsAesBEwFtAfQB8gHvAfIB9wG8Au0BBwHqAQcB/wHtAv8QAAGT
AW4BSwFEAewBdAJuAUsBbgFKAhMBbQREAW4BkgG8AfAD8QHzBAAB9AHzAfEB9AH/EgABvAEOARMBvAHs
ARMBvAH3AuwB6gESAW0B9wHwIQAB/wHsAUMCRAFKAXMDRAJLAkoCRAHzGgAB9AHsARIB9wLvAbwB8gGS
AewC9wHtAfcB6wESAe8B9AHyAe8B8gH3AQcC7AH3AeoBBwHzAQcB/xEAAfQBBwFLAUQBbgF0AW8BSwJE
AUoBEgJKAQ4BDwFEAW4BbQJuARwB8QLyAf8FAAL/AfQB/xIAAbwBDwERAQcBvAHvAfQBEgFDAZIB7wH3
Ae8BvAHzIAAB/wG8AZkBmgOgAXQDRAFKAXkBegF0AUsBSgHzGgAB8wHqARIB9wLvAgcB6wIVAvcBkQHr
ARMB8AH0AfIB8AHyAe0BvAH3AewBBwHqAQcBvAH0EwABBwFLAUQBmQF0AW8BbgNEAUsCbgFEAUMBSgHx
AfABkgFuAUsB7QHyAf8cAAG8ARABQwFtAe8BuwHsAhEB6wP0AfAB/x8AAf8BBwSaAaABmgF5BEoBdAOg
AZoBmQG8AfQYAAHzAeoBbAGSAfcC7AG1BPcBkQHsAesBbAG8Af8B8wHyAfQB9wHxAbwB7wHxAfcB8wL/
FAACHAHDAXUBdAFLA0QBSgFLAm4BSgFuAfID8QEHARwBcwG8Af8bAAG8ARUBQwFtAeoB7wETARUBbQLz
AvAB/yAAAf8BvAEbAfMBGgGZAZoBmQFLAkoBSwFKAXMBmgKZAbwB8wG8AfAYAAH0AewBbAHtAfcB7AFt
AZEB8QHzAQcBkQHsAe0B7AFtAfAB/wH0AvMBvAHyAQcCvAHxA/8UAAH0ARwBmQF1AXQCRAFKAkQBbwGU
ApkBvAPxAfMBAAH/AfMB8AH0GwABvAERARABEQHqAe8BEQHtAfAB9AG8AfAB/yQAAv8B9AIHAUoBcwF5
AXQBSwFuAZMB8QP/GgAB/wHtAWwBrgFsAm0BkQG8AfMB9wJtAZEB7QFtAfAD/wH0AfEB8AH3AfMB9AP/
FQAB8AJzAXUBbgFEA0oBRAJ0AXMB8AHzBPEB/x4AAf8B7AEPAg4B9wFtAREB8ALvAfMB/yUAAv8C9AHz
AQcCdAF5ARwB8AHzAfQD/xoAAfQB7AFtARIDEwHrAfABBwHtAeoCEwGuAeoBvAT/AfMC8AT/GAAB/wHy
AQcBcwFLAkQBbgEHAfIBAAH/AfIE8QH0GAAB9AHxAfMB/wEAAfQB8QEVAhABEQH3AUMBFQHzAZIBvAH/
JgAC/wL0AfABHAFzAXQBcwF0AbwB8wL0Av8aAAH0AewBbQHqAusBkgEHAfAB8wG8Ae8B7AHrAa4B6gHv
Bf8B9AT/GwAB/wHvA0QB7QH/AgAB9ALxAfIC8QH0GAAB9ALsAfAC9AGSAUMCEQFDAZIBDwEVAfEB7AHw
JwAC/wL0AQcBcwF5ApoBeQEHAfMC9AL/GgAB9AHsARQB6wG1B/8B8gEHAfcBbQEHAf8DAAX/HAAB/wEc
A0QBSwH/AgAB8wHxA/IB8QH0GAAB9AHtARUB7AHvAZIBEgMRARQB9wEPAREBvAHrAfAnAAL/AvQBvAF6
AZoBwwGgAZoBmQHzAvQD/xkAAf8B7wFsAW0B9wH0Bv8B8wEHAe0B6wHxAf8kAAHzAnMCSwFuAbwCAAH0
AvEB8gLxAfQZAAHwAewCFQFDBBEB6wHvAREB7QH0AfAB8ScAAv8C9AG8AZkCwwGgAZoBvAHzAfQD/xoA
Af8B8gHrAW0B9wHxBv8B8QHvAe0B9wH0Af8kAAHwAXQBkwEaAnQBBwIAAf8B8gHxAfIC8QH0GQAB/wHy
Ae0BQwERAkMBFQHqAfIB7AH3AfQB8gHwAf8nAAP/AfQB8wGZAsMBoAGaAfAC9AP/GwAB/wG8AewB9wHw
Bv8BvAEHAe0B8QH/JQABBwEcAhoBmQF0AQcDAAH0AfEB8gHxAfIcAAHyAbwD7AHvAfMB7QHsAQcBvAHy
AfQoAAP/AvQB8AGZApoBvAHzAfQD/xwAAv8B8gEHAbwB9AX/AbwB7wG8AfQB/yUAAbwBcwFuAZoBdAFu
AQcEAAH0AfMB9B4AAfIB8QPyAbwB9wG8AfEB9CsABP8B9AHyAfAB8gHzAfQE/xwAA/8B9AHxBvAB8QHz
A/8lAAHzARwBdAGaAnQB8AUAAv8fAAH/BfQC/y4ABP8C9AX/HwAC/wP0A/MC9AP/JgAB/wEHAXQBmgF0
Ae0B/1wACv8gAAb/AfQG/ygAAbwBHAEHAf9gAAX/IgAM/ykAAf8B9AH/iwAG//8A/wD/AMAAB/+NAAP/
JgAO/4gAAf8B9AHzAfQB/yUAA/8B9AL/AfQI/1QAD/8jAAH/AfQB8gHsAfAB9AH/IwAD/wHzA/IC8QHy
AfEC8gH0BP9QAAP/BPQF8wT0A/8hAAH/AfQB8AERAewB8gH0Af8iAAP/AfIBvAH3A20CFAHqAfcBvAHz
AfQC/yIAC/8iAAL/AfQB8wHyAvEG8APxAfIB8wL0Av8bAAT/AfQB8gHtAREBcwEHAfIB9AT/HwAC/wHw
AewBFAMVARQBQwJKAewB7wHyAv8cABf/GwAB/wH0AfMB8QHwAgcB9wPtApIC9wHvAgcC8AHyAfMB9AP/
FwAC/wL0AfIB8QEHARIBRAFzARwBvAHyAfMC9AL/HgAB/wH0AfcB6gEVAUMBFQFEAksBdAF5ApkBvAH0
Af8bAAT/AvQG8wLyA/MB9Af/GQAB/wH0AfMB8AEHAfcC7AFtAeoBbQHrAW0C6wLsAe0BkgH3Ae8BBwHw
AfEB8wH0Av8VAAL/AfMB8gHwAbwB7wHtARUBSwJzAu8BvAHxAfIB8wH0Av8dAAH0ARwB6gFKAkQBSwFS
AXkBmgEaARsCvAHzAf8aAAP/AfQB8wHxAbwB9wFtARQGQwESAewBvAHxAvMB9AX/FgAB/wH0AfMBvAGS
Ae0BkQFtAmwBFAVsAm0C6wPtAu8BvAHxAfMC/xIAAv8B9AHyAbwBBwH3AZIB7AFtAUQBUQF0AUsB7AHt
AvcBBwHwAfEB8wH0Av8aAAL/AfIB7QFLAXMCSwFSAZoBGgEbAfIBvAHxAfQB/xkAA/8B8wHxAQcB7AHq
AUoBSwF0AXkCmQJ5AXQBUQFLAUoB6gGSAQcB8gHzAfQF/xQAAf8B8wHwAu0BkQGuAWwBFQIUAUMBFQJD
ARQBbAGuAeoC6wLsAe0BkgHvAQcB8AHzAfQC/xAAAf8B9AHyAQcB9wHsAesBEgEUARUBSgJ0AUsBFAFt
AesB7QGSAfcBBwHwAfIB9AL/GgAC/wHyARwBcwJLAVIBmgEbAfEBBwG8AfIB9AH/GAAD/wHzAfABkgES
AXMBmQMaArwB8AG8AQcDmQF0AVEBSwFtAe8C8AHyAfQE/xMAAfQBBwGRAfcBkQFsAhQBEQFDAhEBEAER
AhUCQwEVARIBbQHrAewC7QGSAe8BBwHwAfMB9AH/EAAB/wHzAQcB9wHrARABEQEVAUsBdAMcAXQBSgFD
ARMBFAHsAu0B7wEHAfEB8wH/GwAB/wH0AfMB7AMVAUsBmQLvAbwB8gH0A/8TAAX/AfMB8AFtAeoCGgIb
AfAB8gLzAfQB8wHyAfECBwKZAXkBUQFtAe8BvAEHAfEB8wH0A/8SAAG8AfcBuwGuARQBEAFsARMDFAEV
AQ8BDgEQAkMBDgEPAUMBbAFtAewB6wPtAe8BBwHwAfMB9AH/DQAC/wH0AfABkgETAUMBSgFzA5kEHAJ0
AUoBFQESAewC7QGSAQcB8QHzAv8ZAAL/AfQB7QFDAUQBeQEbAZkBHAHvAQcB8wX/DQAK/wHyAW0BcwEa
AfMB8gHwAfMD9AHzAfIC8QHwAbwDBwGZAXkBUQHsAQcB8AEHAfAB8gH0B/8MAAH0AfcBugGRAWwBFQEU
AW0C6wGSAewB6gEUAg8CEQEQAREBDwFDAeoBbQLsAu0B9wHvAQcB8QHzAv8LAAL/AfQB8gH3ARIBRAFz
ARoBmQFzAUoBFAIVARQBSgFuAhwBcwJKAewC7QGSAQcB8QHzAv8XAAP/AfQBFAFEAUsBdAGZAZoBmQGS
Ae8B8QH0Bf8MAAj/AfQB8wH3AewBGwH0AbwB8QHyAfQD8wHxAbwBBwLvAQcC7wIHARwBeQF0AXMCvAEH
AfAB8gH0Bv8LAAH0Ae0BkQGuARQCbAHsAe8BvAIHAe0B7AHqARUDEQEPARACEQEUAW0B6wPtAu8BBwHw
AfMB9AL/CAAC/wL0AfIBBwESAUoBmgEbARwBQwIRAUMDFQERASIBQwFuARwBcwFLAUQB7ALtAe8BBwHy
AfQD/xQABP8B9AHzAUQCQwHrAbwB7wHtAfcBBwHyCf8IAAj/AfQBBwFtARsB9AEHAbwB8AHxA/IB8AG8
Ae8B9wTvAvcCBwJ5AXQB7AG8AgcB8AHzAfQF/woAAf8BvAKRAWwBEQJsAewC9AHzAQcC7AFtARMBFQIR
AQ4CEQEQAUMBEgFtAewBkgLvAgcB8AHyAfMC/wcAAv8B9AHzAfEBBwESAUsBwwHyAewCEQFDBBUCFAIV
AUMBSgJzAUsBbQHtAZIB7wEHAbwB8gHzAfQE/w0ACP8B9AHzAe8BFQFLAZkBHAGSAe0BkgHvAbwB8gL0
B/8GAAj/AfMB8QHrAQcB9AG8AgcCvAHwAbwBBwL3AW0BFAHqARQB6wH3BAcBHAF0AXkBdAEcAbwC8AHx
AfMB9AT/CgAB8wH3ApEBbAETARQB7AH3AbwB8wG8Ae8B9wLsAW0BEwFDAQ4BFQIRAQ8BQwESAesB7QH3
Ae8CBwHwAfEB8gHzAfQB/wcAAf8B9AHzAfIB8AHrAUoBGgH0AewBEQEVARQEFQIUARMBFAEVAREBQwFE
AnMBbgHsAu8CBwHwAfIC8wL0Av8MAAf/AfQB8wHxAfcBFAF5ARsBHAKSAewBkgEHAbwB8QHyAfMB9Aj/
AwAI/wHyAZIB7AHzAfQCBwG8AQcBvAEHAe8B6wIUAUMBEQFDARMBHAFtAfcB8AG8AvABcwF0AXkBHAG8
AfAB8QHyAvME/woAAQcBtAGRAW0CFAETAesBbQHrAQcC9wHvAe0B7AHrARIBQwEOAg8CEAFDARIB6gHs
AfcCBwG8AvEB8wH0Av8HAAH/AvQB8wEHARUBHAH0AZkBEQFEAxIDFAQSARUBQwFEARUBSgF0AnMB7wIH
AvAC8gHzAvQC/wwABP8D9AHzAfABvAHtAUQBcwGZAewB9wGSAewC7wEHArwB8QHyAvMB9AX/AwAH/wH0
AfEBbQGZAfQDBwK8AQcB6wESAUMBEAESAUQBEAEPAUQB7wHtAW4B9wHyAfAB8QEHAXQBeQF0AQcE8gL0
A/8JAAH0AbsCkQFsAUMBEAEVAeoBEgHvAfIB9wLvAu0B6wFtARMBDwEOAQ8BQwERAUMCEgFtAe0CvAHx
AvIB8wH0Av8IAAL/AfQB7wFKAcMB8QFEAUoC6wJtAeoDEgJtARIBQwEVAeoCRAFKAXMBUQHvAbwC8AHy
AvMC9AP/DAAD/wH0AfMB8gLxAQcB9wEUAREBSwJKAvcE7wEHArwB8ALxAfIC9A7/AQcBbQEaAfABBwFt
AZICBwH3ARQBSgFEAUMCFQFDARIBSgFDAUoBHAHrAe0B8AHvAesBbgJ5AQcB8gHzAvIB8wH0A/8JAAHy
AfcBtAGuARQCFQJDARABvAEHAewB7wH3Ae0B9wHtAesBEgERAQ8CEQEQAUMBFAFtAesBkgHvAfAC8gHz
AvQC/woAAf8B7QFRAfQBcwFEAXMC7QLsAW0BEwEUAeoB6wFtARQBEQEVAhICRAFLAXMBHALxAfIB8wH0
Bf8OAAP/AfMB8AIHAe8B7AEiAUsBUQFLAUQD7wMHBLwC8ALyAfMB9An/AfQB8QHvAfIB7wF0ARsBHAHs
AQ8BFAHrARQB6gEUAewBcwESAREBEAETAW4BcwJKAUQCSgESARMBQwESAXQBeQEcAfMB7wH3AfIB9AT/
CQABBwK7AZEBbAESAWwBEwEUARMB9wHsAW0C7wIHAe0B7AFtAUMCEAIPAUMBFQFtAewBkQEHAfEB8gHz
AvQC/wkAAf8BvAHtARMBegEbAW4B7AEcAe8B9wHtAewB6wETAUMC6wEUARABEQETARIB6gJEAUoBUQFL
Ae8B8QHzAfQB/xMAA/8B8wG8AgcB7wEUAUsBeQGaAZkB6wHvAQcFvAXwA/IB8wH0B/8B9AHzAewBmQHx
Ae0BmQEaAW0BEAEOAQ8CSwFKAUMBbQFzAUQBFQFEAXMB7wEcAnMBSwFEAXMB6gEUAREBQwFLAXkBHAH0
AesBbgHwAfMB9AP/CQABBwK7AuwCkQH3Ae8B9wHrAeoB7AHzAfQB8gHvAe0B7AHrARUCEAEPARABFQET
AusB7AEHAfIC8wH0Av8GAAH/AfQB8gH3AeoBFQFEAVEBmgGZAUoBbgHvAbwB9wLtAewB7QHqAesBEwER
ARABQwFtAewB6wHqAkQBSwFRAewBBwHxAfQB/xMAA/8B8AHvA7wBbQFLARwBGgEcAeoBBwHwBfEH8gLz
AvQH/wHxAW4BGgHxAe0BmQEaARIBEAEOAQ8BRAF0ARwBbQEUAUoBcwEaAZkCHAOZARwBcwFKARQBQwEV
ARQBRAF0AXkB8wHvAXQB7wHzAvQC/wkAArsBtAHqAhUBFAETARQCQwEUAW0CvAP3AewBbQEUAUMBEQEQ
AREBQwESAusBkQEHAfMC9AP/BgAB/wEcA24DdAGaARwBSgEcAbwB8gH3Au8B7AHtARMBQwERASIBEAHq
AfcC7AFtARIBRAFLAXMBSwETAeoB7QHyAf8SAAP/AbwB6gHrAfEB8AETAUsBmQEaAZkBSgHvAvMB8AHz
AvIB8wr0B/8BvAFzAZkB8gHtAZkBBwESARABDgEQAewBSwFzAQcBbgFDAZkDGwGZARwDGgGZARwBbQES
AhMBFAFSAZkB8wEHARwBvAHyAfQD/wkAAbwBuwGRAeoCFAFDARECEAEVAhMB6wHvAfIBBwH3AuwBbQEV
AhEBQwEUAeoB6wHsAZEBvAL0A/8IAAH/AfABvAEaAZkDeQF0AW0BHAG8AfMB8AO7AfcBEQMiARUC9wHr
AewB6wFtAUQBSwJ0AlECSwFRAfMOAAL/AfQD/wHzAewBEgITARABSwF5ARoBmQFtAfMB7wFtAe8E9Aj/
AfQI/wHwAXMBmQHzAe0BmQEHARIBEAEPAREBcwFKAUMBHAGZAXMBmQIbAZkBSgFLAZkBGwMaARwBEgHq
ARMBbQFRAZkB8wEHARwBGgHyAfQMAAG8AbsBtAFsAkMBEQIQARUBFAEVAeoBFAGSAfQBvAH3Ae0B7AHr
ARUCEAERARUBEgLrAfcBvAH0Av8MAAH/AfQBGwGZA3QBEgHtAbwC8wHxAfAB8gFtBBEB7AEJAfcB7AHt
AewBbQEVAUsBdAKZAhoB8AHyAf8OAAP/AewBvAH0Af8B7wFKAm4BcwFLAZkBGwGZAUoBBwHsAe8B/wL0
AfIB8QH0EP8B8AFzAZkB8gHtApkB6gERARABQwNKAUQBHAHxAhsBvAFKAW4BHAEaAvMCGwEcARQBbQES
AeoBbgGZAfMB7wGZARoB8wH0Af8LAAG8AQkBuwFsARQBQwMRAUMBFQEUAeoBFAHsAfQBBwLtAewBbQEV
AhEBQwEUAeoC7AG7AbwC/xAAAbwBcwF0AXMBSgHsAQcB8gEHAbwC8wFDASIBEQEQAeoB8QEJAe8B9wLs
AeoBFQFzARoCvAHxAfQB/wwAA/8BAAP/AbwBSgHrAQcB7QESApkBdAFLAZkB8AEcAUsCHAGZAfQBBwLs
Ae8B9BD/AfIBHAGZAfEDHAFKA0MBSwEcAm4BSgHsAfABGgFuAe8B8gLzBPQB7wEUAewBbQESAXMBmQH0
Ae0BBwG8AfMB9AH/CwAB8AG8AbsB6wGRAWwBQwERARQBEQFDARQBFQESAfcB9AEHA+0B6wESAkMBFQES
AW0B7AH3AfAB8gH/EQAB/wEcAXQBcwFKAewB7wHwAe0BEwG8AfADIgEUAbwB8wEJAe8C7QHsAkQBHAG8
EQAC/wH3AesB9AL/AfIB6wEcAhMCGgF0AksBdAG8ARwBSgF5ApkBbQETAXMBmQH0BP8EAAn/AfMBHAEa
AfEB7wJ5AW0BFAFKAUMBcwEaApkBcwFKARQB7QEcAfQBGwEaBPQB8wHtARIB7AFtARUBdAEHAfQBHAEa
AfAB9AL/CwAB9AEJAbsBkQHtAWwBFAERAUMBFQEQARUBFAERAQcB9AEHAfcC7QHrARICEQEVAeoB6wGR
AbsB8AH/EwABvAFLAXMBSgHqAewBBwG8AesBFAEVASIBEQFKAe8B9AHyAfABBwH3Ae0BbQERAUoBmQHw
EgAB/wHxAW4BEgHvAfIB7wFKAZkBGgKZAXQBSgFEAUoBcwIcAUQBSgEcARoBGwG8AZkBHAHyAbwB7AEH
AfMC/wQACP8B8QHyAfMB7wF0AXkBcwFDARUBFAFuARoCGwEaAZkBSwGZARsB9AIaBPQB8QHsAW0B7AHq
AUoBmQEHAfQB8ALzAfQB/w0AAbwBCQKRAWwBEwEUA0MCDwEVAe8B9AG8Ae8C9wHsARQCEQETAW0CkQG7
AfAB/xMAAfMBSwFRAUsBRAFtAe0BvAHwAeoBIgFDAe0B8gP0AfIBBwH3Ae0BFAFDARwBvAH/EQAC/wH0
Ae8BbgFEAW0B6wEcARoBmQF0AXMBSwFEARUBcwF5ARwBmQFKARQBbgEcARoCGwGZAW4BEgFzAQcB9AL/
CAAH/wHxAXMCeQEVAREBFQEUAe8BBwEaBBsC8wEbAfMC9AHzARsBvAJtAZIBEwF0AZkBvAP/AfQC/w0A
AfIB8AK7AZEDFAERARABFAEVARAB6wHyAvABBwHtAW0CQwEUAW0BkQH3AbsBvAHzFQABvAJRAUoBFQHr
AfcCvAHrARwE9AHzAfABBwHvAW0BEQFLAZkB8RIAAf8B9AHzAesB6gFRBJkBdAJLAUQCFQEbApkB9AFz
ARUBRAFLAXkBmQEaARsBGgGZAUsBBwL0Av8HAAb/AQAB/wFzAnkBSwIUAewB9AHzAbwB7wEaARsCGgEb
A/MB8gK8AQcB6wHqAewBSgGZAbwB8wEAAf8B9AH/DwAB9ALwArsCkQFsARUCEAERARABQwFtAe8BBwHy
AewBFAEVARIBbQHsAfcBuwG8AfEB9BUAAfQBHAF0AUsCRAFtAe0B7wHwAfMD9AHzAfABvAEcAW4BFQFK
AZoBGwH0EQAC/wHzAZIBEQFzApkBcwFLAW0CRAJDAUoCGgEcARoB9AEaAUoBFQFEAUoBbgFzARwBmQEa
AXMBEwHvAfMB9AH/BwAG/wEAAf8B8AF0AXkBcwHvAfMF/wHzAfABvATwAfIB8wH0Av8B9AHyAW0BdAEa
AfAB/wEAA/8QAALzAfEB8wG7ApEB6gESARQBFQJDARUBEwESAhMCFAFsAZEB9wG7AbwB8gHzFwAB8wJ0
AUsBRAFDAUQB6wGSAQcB8AHyAfMB8gEaARwBSgEVAUsBGgEbAfIB/xEAAf8B9AEHARQBSgKZAUsBRAEV
AW0BSwJzARwBGgEbAQcBdAEaAvQBGgFLAUQBFQJEAUoBcwEcARoBcwHqAfAB9AH/BwAF/wMAAf8BHAF5
AXQBHAH0D/8C9AHzAe8BSwEaARsB8gH/BAAB/w8AAf8B8ALzAbsBkQG7AZEEbAIUARUBFAMTAeoBkQH3
AbsB8AHyAfAB/xgAAfACdAFLARUCIgFEAW0DcwFuAUoBRAEVAVEBwwHzAfESAAL/AfQB7QFKAZkBHAES
AUMBbQHxBPQB8gHwARsB7wFuAZkB8AG8AvQBGgGZAe0B6wESARUBRAFzAZkBcwESAfMB/xAAAfMBHAF5
AXQBkg7/AvQB8wEHARUBmQEbAbwC/xYAAfAB8wHyAQkBtAJsAesBuwFsAeoEbAFtAewDuwHwAfIB8AH/
GQAB/wHwAZkBHAFzAUoBFQERAyIBEQEVAUoBSwGZAfQB8QHyEwAC/wHzARUB7wEHAe0B6wGSAvIE8ALx
AfABBwFuAZkB8QHwAbwF8gG8Ae8C6wHsAZkBcwH3AfQB/w8AAf8B8gEcAXQBcwHsAfAE9AX/A/QB8wHx
AfcB6wEaARsB8AHzAv8WAAH/AfIB8wHxAQkBuwKRAa4GkQL3AbsB8AHxAvIB/xsAAf8B9AG8Ae8BmQFz
AW4BSwJKAUsBcwEaARsB8wHwAfMB/xMAAv8B8AHtArwB7wEHAfAB8gLzAvIE8wHvAUsB7wHwAfIC8QHw
A/EBvAHwAfEBBwLvAQcB7QHyAf8QAAH/AfABmQF5AXQBbgGSAfEB8gfzAfIB8AHvAesBHAEaAfQB8AHx
AfQC/xcAAf8D8QEJArsBtAK7AZEB9wK7AQkBvAHwAfMC8QH/HwAB8wG8A5kDeQEbAfIBvAHzFgAB/wH0
AewBvAHxAfIB9wHwAfMJ9AEHAXMB8AHxAfMB9ALzAvIB8QHzAfEB8AHzAfACvAHvAfEB/xIAAfEBBwGZ
AXkBUQEVAewBvAHwAfEC8gHxAbwBBwLrARoB8wH0AfAB8QHzAfQB/xoAAfQB8AHzAfEBCQLwAQkE8AHy
AvQB8AH0IwAB/wHzAbwCdAGZARsB8xgAAf8B9AHsAfAB8wG8AQcB8gr/AfMBvAHwAfIB9AP/BPQC8wG8
AfAC8gG8AfAB/xIAAf8B8QEHApkBeQFzAUoC7AHtARwB7AFuAewBmQEbAfMB8gHwAfIB8wL0Af8bAAH/
BPIB8wH0A/MD8gHzAf8mAAH0AXMBdAGZAbwB/xgAAv8B7wHxAfQC8wL/BwAH/wEAB/8B9AHzAfAB8gHz
AQcBvAH/EgAC/wHzAfABBwOZARwBcwJ0AZkBGgEbAfMB8gHwAfEB8gHzAfQC/x4AAv8H9AL/KQAB7wF0
AZkB8BkAAv8B8AL0Av8NAAH/BgAG/wP0AfMB9AH/EwAC/wH0AfMB8QG8AfAEGwHzAfEB8AG8AfEB8gHz
AvQC/1MAAfEBdAEaAfQZAAb/GAAC/wEABf8VAAP/AvQK8wL0Av9VAAH/AXQBGgH/GgAE/xwABf8WAAX/
B/QF/1cAAQcB8lsABv9dAAH/AfT/AP8A/wD/AP8AbgAI/7YADf+xAAT/CvQE/yIACv+BAAP/AvQK8wH0
A/8iAAb/AfQE/1YACv8gAAL/AfQB8wLyCfEB8gHzAfQC/xoACP8B9AHzAfID8QH0A/9UAA3/HgAC/wH0
AfMB8gLwArwBBwS8AvAB8QHyAfMB9AL/FwAF/wL0A/8B8QFLARoBmQF0AUQB7QHzA/8DAAj/FAAF/wkA
Av8jAAL/C/QC/x0AAv8B8wHyAfABBwH3Ae0C7AGSAfcC7QH3AQcBvAHxAfIB8wH0Av8WAAP/AfQC8gLx
AfMB9AHwAZkBGwGZAXMBSwHsAfAB8w3/FAAB/wPzAfQB/wYAAv8B9AHzAv8gAAL/AfQB8wTyBPEB8gHz
Av8dAAH/AfQB8gHwAe8BbQIUA2wD6gESAW0B7AEHAfAC8wL/FgAD/wHzAe8D9wG8AfIB8QGZARsBmQES
AUoB6gH3AfMB9A3/EgAB/wHzAe8BkgHvAbwB8wH0BAAB/wH0AfICBwHyAfQB/x8AAv8B9AHxAbwFBwHv
AQcBvAHxAfQB/xwAAv8B8wHxAfcBEgFDBGYCEwISARMCFAHqAe8B8QHzAv8WAAH/AfQB7QHrAW4BRAER
AesB9wIHAZkBGwGZAksB6gH3AbwB8gHzBP8E9AX/EQAB/wH3AREBFQFtAewB7wG8AfMD/wH0AfEB6gFD
AesB7wHzAf8fAAL/AfMBBwH3AZIC7QGSAu0BkgHvAfAB9AL/BQAB/xUAAf8B9AHyAe8BEgIVA0MBDQEV
AUMBFQEUARMBFAFmAREBEgHvAfMC/xUAAv8B8wFzARoBmQFzAUoBEwHsAe8B9wEaARsBmQJLAeoB7AH3
AQcB8QH0A/8B9AHzAfEB8wH0Bv8PAAHzAeoCSgEUAW0B7AHtAQcB8QLzAfEB7AEQAUQBbQHvAfMB/xkA
B/8B9AHyAZIC7AVtAuwBBwHzCf8TAAL/AfQB8AFtAUMCZgEVAUMBFQINAkMCFALqAWYBEQHqAfEB9AH/
FAAD/wHzAQcBGwGZARIBSgETAusB7AGZARsBmQJLARMB6wHsAfcBvAHwAfMB9wFtAUoBQwFtAfAB8gH0
Bv8OAAH0ARwBcwFLAUQBFQHsAu0B7wEHAbwB7QEVAUQBbgFzAQcB/xkAAf8B9AX/AfQB8gHwAewBbQQS
ARMBEgFtAesB7wHyAfQE/wP0Af8TAAL/AfMB7wEVAmYDbAFmAWwBZgESAmwCrgFtAWwCZgHvAfMC/xIA
A/8B9AHyAgcB7AETAUoBEwHqAesBbQGZAfMBmQFRAUsBSgFzAW0B7QH3AbwB8QHsARoBmQFzARIB7wHx
AfIB8wb/DQAB/wHzARwBcwFLAUQBEgLvAZIB7QHsAhUBSwEcAbwB/xoABPQD8wHyAfABBwHqAhIDEwEU
ARMB6gESAZIBvAHyAvMD9ALzAf8SAAL/AfQB8gHsARUBFAETAWwB6gFsAa4BuwEJArsBkQNsAa4BbAFm
AesB8gH0Af8SAAL/AvQB8QGZARwBbQEUARMBEgHtAQcBbQGZAfMBmQJzARIBmQFuAuwB9wEHAe8BGwGZ
AW0BbgHvAQcB8AHyAfMB9AT/DwAB9AEHAXMBSwFKAZIB8QHvAewBFQERAUsBHAG8AfQbAAPyAvEB8AG8
AQcB7wGSAW0BEgEUARUBQwMUARIBEwHrAe8BBwG8A/EB8gHxAfIB/xIAAv8B9AHzAesBFQFmARMBrgES
ARMCrgH3AbsBtAGuAmwBbQKuAWYBEgHxAfQB/xIAAv8B9AHzAfEBmQHwAXMBQwEUARUB7AEaAW0BmQHz
AZkBeQFzARIBGgFuAW0B7AGSAu8BGwGZAUsBbgHtAgcB8AHyAfMB9AP/EAAB/wEHAXMBbgFEAesB9wHr
ARABSgEcAe8B8AHzAfQOAAL/CgAD8AG8AQcB7wH3Ae0B7AHqARMBFAQVAhQBFQEUARIB7AHtAfcB7wEH
A7wB8AH/EgAC/wHzAbwBEgJmAWwBiwJsApEBtAG1AbQBbAFmAWwBiwFsAa4BbAFmAfEB9AL/EQAC/wHx
AXMCBwG8AfACFQFDAXMBmQFtAZkB8wEaARwBcwHrAbwBbgFtAesB7AH3AZkBGwGZAUsBbgL3AQcBvAHw
AfEB8gH0Av8FAAP/CgABvAJzAUoB6wEUAUMB7QEHAfABvALxAfMB9AL/CAAC/wH0Av8JAAHxArwBBwHv
AZIB7AHqARMBEQEVARQDFQJDAhUBFAEVARMB6gHrAe0B7wIHArwTAAL/AfMBBwNmA2wBZgFsAq4BkQGL
AUMBZgGLAa4BbAGLAWwBZgHxAfQC/xAAA/8BBwEaAQcCvAHwAe0BQwEUApkBbQHvAfMBGgGZAewB6wHv
AUoBbQHsAW0B9wHvARsBmQFLAW0B7AHrAe8BBwK8AfEB8wL/BAAC/wHzAv8HAAL/AfMBBwIcAW0BFQES
Ae8B9AHzAfEB8AG8AfAB8gHzAv8HAAH/AfMB8gH0Af8JAAH0A+8B9wHtAeoBFAERARABEwFsAW0BZgMQ
AREBtAHqAREBEAEVARIB6wHtA+8BBxMAAv8B8wFDA2YBbAGLAmwDZgFDAWYDbAGRAa4CbAFmAewB9AL/
EAAC/wH0AQcBGgG8AQcB8QEHAfMBEwEVAe8BmQESARwB8wEaAZkBbgHrAZkBbgHsAW0C7AHvARsBmQFL
AW4BcwF5AewBBwK8AfAB8wL/BAAB/wHzAvIB9AH/BgAB9AHzAbwB7wH3AhwBbQHtAf8BAAH/AfQB8wHy
A7wB8wH0Af8FAAH/AfMC8gH/CgAB8wLvAfcB7QHqAWwB6gGuA5EBtQFtAWYBEAEVARMBuwGRAq4B6gFt
AesB7QGSAu8BBxMAAv8B8gEUAUMCZgOuAZEBtAGuApEBtAEJAq4CkQGLAmwBrgHxAf8RAAL/AfQBBwG8
AgcB8wGZAfIBkgEVAe8BmQFEAZkB9AEbAZkBSwETAZkBcwLsAQcC7wHzAZkBcwHsAe8BmQH3AQcCvAHx
AfQC/wUAAf8B8wLyAfMB9AX/AfMBvAHvAgcB6gFzARwB7wH/AgAD/wHzAfEC8ALxAvQD/wHzAvIB8wH/
CgABvAP3Ae0B6wKuAbUBuwMJAa4BbAEQAq4BGQEJAfcEkQHtAZIB9wHvAQcTAAL/AfcBFAFDAWYB6gGu
AZEBrgGRAWwBZgNsAZEBrgGRAbUBuwGuAmwBrgHxAf8RAAP/AQcBGgIHAfMBvAEHAbwB6gHvARoB7QEa
AfQB8wEaARwBcwGZAXMC9wGZAu8B8wEaAXQB7AEHAZkB9wHwArwB8gH0Av8GAAL0AfMB8gLzAvQB8wHw
AbwB7wEHAfAB6wHqAQcBvAEcAQcB/wQAAf8B9AHzAfEB8AG8AfAB8gPzAvIB9AL/BQAB9ATvBPcB7QHs
Aa4BtQK7AwkCkQEQAbQBrgEJARkBCQO7AesB7QGSBPcCBwHyAf8PAAH/AesBFAFDAWYBrgGRArQBkQGu
AWYBDQFmA64BtQHcAbsBrgJsAa4B8QH/CwAB/wYAAf8B9AEHARoC7wHzARoBeQHxAfcBmQEaA/QDGwHz
ARoBcwHvAfcBmQLvAfMBGgGZARwBvAF5Ae8B8gHxAfAB8wH0Av8HAAH/AfQE8gHxAbwC7wEHAfIB7AHq
Ae8C/wEHAZkBBwYAAf8B9AHzAfIFvAHyAfMB9AcAAfQB7wL3Be8B9wHtAesBkQGuAWwBFAFmAWwBZgG7
AUMBuwESARMBEgFsAa4BtAGRAewBkgL3Au8E9wHxAf8OAAH/AW0BFAEVARIBrgGRArsCtAG1AbQBuwG0
ApEC4QG0Aa4CbAGuAfEB/wsAA/8EAAL/AQcBGgFKAXQB8wEbAZkBvAHvAZkBBwHzAfQB8AEcAXMBmQEa
AZkB7QHvAfcBvAGSAe0B8wEaAZkB7AHvARwBBwH0AfMC9AP/CAAC/wH0AfMB8AG8Au8BBwHxAZIBbgEH
Af8CAAH/AfABmQEHAf8FAAL/AfQB8gS8AfIB8AH0BwAB/wHwAfcG7wH3Ae0B7AGRAa4BbAEQARUBQwEV
Aa4BQwGuARUBEwERAmwBkQHsAZIB9wHvAfcF7wH3AfMPAAH/AfMB7AEUARIBbAKuAZEDtAHwARkCtAGR
AbsBtAGuA2wB9wH0DAAD/wQAAv8BvAEaAe8BGwH0AfMCGgG8AZkBHAG8AQcBdAFzAW4BSgFzARwD9wEH
AW0BcwHzARsBmQFKAW4BmQEHB/8CAAH/BwAB/wH0AfIB8AIHAfAB7wFzAbwB8wH/AwAB9AEaAZkBvAH/
BAAD/wHzAfID8QHwAe8B9AgAAfIG9wGSAe8BkgH3Am0BEwEVAeoDbQEQAhIBbAEVAW0BrgGRAe0C9wHv
BfcB7wH3Af8PAAL/AbwBFAISAWwBkQG0Aq4BtAG7ARkBuwGuAZEBuwGRAWwBZgJsAfAB/wwAA/8EAAL/
AfMBvAP0ARsBGgEbAfQBGgHtAfIBvAHvAZkBGwEcA+8EBwEbAfQBGwEaAQcBmQF5AQcH/wIAAfABBwcA
Af8B9AHzAvIBvAHsARoB8gX/AQAB9AEaAZkBBwMABP8C8wL0AfMB7AHwCQAB9AP3AZIG9wHrAWwBEgKu
AmwBrgEVAW0BrgKRAeoBrgHrAewB7wf3Ae8B8hAAAv8BvAEUAWwCZgFsAa4BbAFmAZEBCQEZAZEEbAJm
AWwB6gG8AfQMAAP/BAAC/wH0AfAB8gEbAfABdAESAXMBmQEcAesBBwG8AfEBGgEbARoE7wG8AQcD9AEa
AZkCGwF0AfAE/wIAAf8CAAH0AewB8gH/BgAD/wHzAewBHAG8Cf8BGgGTAbwB9Ab/AfQC/wG8Ae0B/woA
AQcC9wGSBfcBkgHsAeoBkQK7A5EBbAFtAbQBtQEJAfcBrgHsAe0I9wHvAf8QAAL/AbwBEwHqAWwFZgGu
AQkBGQGLBGYDbAHqAbwB/wwAA/8EAAL/AfQB8wHxAbwBmQIcAW4B7wLsAesB8wH0ARsBGgGZAe8BvAIH
AbwCBwHyARoBdAFLAXMBHAEHAfME/wIAAf8DAAHxAe8B9AgAAfQB7AEcAfAJ/wEAAfQBGgGZAe8B9Ab/
AQAB/wHvAfALAAH0CfcBkgHsAxkBuwGRAWYBQwETAbUDCQG1AewBkgj3AfASAAH/AfABEwHqAusDbAKR
AQkBGQauAmwB6gG8Af8MAAP/BAAC/wL0AfMCvAGZARsCvAEHAfAB6wHvAvQBGwEcAQcB8gPwAbwCBwEc
AZkBvAEcAfAB8wH0A/8DAAH/BAAB7wEHBwAB/wHvAXQB8AH/CwAB9AHvAXQBBwL/BQAB8QEHAf8MAAEH
AfcD7wX3Ae0B9wG7ARkBkQESAhUBEwFtAbUCCQKSBPcD7wH3AbwB/xIAAf8B8QETAW0BrgG0AbsBtQK7
ARkB/wEZArsDtAGRAYsBbAEUAfEB/xMAAv8C9AHyAfEB8wEaAbwBGgEHAfEBvAHtAeoBvAHyAfABvAHy
AfMC8gG8AfACvAHwARoBGwG8AfAB8gH0A/8DAAH/BAAB9AH3AQcB/wQAAf8BBwFuAbwB9AH/AwAC/wIA
AfQB/wMAAfQBBwHrAe0B8wH/AwAB8gHvAfINAAHxBe8D9wPvAu0CrgEUARUBrgFsAW0B9wPvBPcE7wEH
AfQTAAHyAeoBbQGRAbQBGQLiA/8D4gHcArsBkQFsAWYBbAH0Af8TAAP/AfQB8gHxAvQBGgHvAQcB8gG8
AQcBEwH3AbwB8AHxAe8B8gPzAvEB8AH0AfMBGgGZAfAB8wH0Af8FAAH/BAAB/wHxAbwB8AH/AgAB9AHv
ARIBHAHzAf8EAAH0ARwB8gK8Af8EAAH0AXMBRAHrAfECAAHzAe0B8gH/DQAB9AEHA+8F9wLvAfcB7AG0
AZEDrgG0Ae0BkgHvAQcF9wTvAQcB9A4AAv8DAAH/AewBbQGRAbQBCQLiA/8D4gHcAQkBtAGuAWwBZgHt
Af8VAAL/AvQB8AG8AfQB8gEHAfEC8wEHAusB8QHvARQB6gG8A/QB8wHyAfAB8wH0AfABHAHxAfQC/wUA
Af8GAAHwAgcC/wHvARABUQG8BwABmQFKAVEB8gYAAfQCSgESAe0BBwHsAfIB9BAAAfIB8AHvBfcB7wMH
ARIBbQGRAq4BbQG8AfMB8AG8BvcBBwHwAfEB/w4AAf8D9AH/AQAB/wEHAWwBrgGRAbsC4gX/AeIB4QG7
AbQBiwFsAWYBBwEAA/8B9AL/EAAC/wH0AfMB8gG8AfAB8gPzAe8BbQEUAeoB6wEcAQcBkgHyA/QC8wO8
AfIC9AL/BQAB/wcAAfEBkgFtAeoBEQFLAQcB9AUAAf8B8wKZAXkBBwH0Af8FAAEHAXMBFAEPAREB9wHz
EgAB/wHwBfcB8QL0AfADbQGuAWwBbQHwAfQC/wb3AfQB/w8AAf8B9AHyAbwB8gH0Af8BAAHyAeoBrgGR
AboBGQHiBP8B9AHiAeEBuwG0AYsCbAH/AQAB/wH0AfMB8QHzAv8PAAP/AvQE8wHyAbwC7AHtAQcB8AEa
AZkBHAEHBfQB8wHyAfMC9AP/DQAB/wHwAUMCEQESAfAB/wUAAfMCBwEbAbwBBwHwAf8FAAH/AZIBEQEV
ARQB7AH/EwAB8QT3Ae8B8wEAAf8BvAJtAZEBCQKRAfIC/wEAAe8E9wHvAf8QAAH/AfMBvAIHAfMB/wEA
Af8B7wFtAa4BugEZAeIB9AP/AuIB4QG7AbQBiwFsAfIBAAL/AfMBvAIHAfMB/xAAA/8D9AHzAQcBbQEU
ARwBvAHxARsB7wF0ApkB7AHwB/QD/xAAAfABEQFtARMBEgHzCAAB/wEaAfMJAAHwARQBEgGZAXMBBxIA
Af8B8AT3Ae8B9AEAAf8B8wGuAbsCGQEJAZIB8wP/Ae8E9wG8EAAC/wHwAQcB9AEHAfAB9AIAAf8BvAHt
AZEBuwHhBeIBGQK7Aa4B7AG8AgAB/wH0AfABvAHwAbwB8wH/EQAD/wH0AfEB7AHrARwB8gEbAfABBwHv
Am0BdAEaARwB7QHxA/QF/xAAAf8B7wFzAZkC7AG8Af8HAAH/AfIB9AgAAf8CkgEHARoBvAH/EgAB/wG8
AvcB7wH3Ae8B9AEAAf8B9AGuAbsCGQEJAfcB9AP/Ae8B9wLvAfcBBxAAAv8B8wG8AfABvAHyAf8DAAH/
AfQBvAH3AboBCQMZAQkBuwGRAfcB8gH0AwAC/wHzAfABvAHxAfQB/xIAAv8B9ALvAfIC8wG8ARwB6gH3
AfABcwOZAXMB7QHzAvQF/xEAAfQB8AG8AvIB8AG8AfIHAAL/BwAB9AH3AQcC9AHxAfQTAAH/AbwB9wTv
AfQBAAL/AewBkQEJARkBCQHwAf8CAAH/AfcF7xIAAf8B8gEHAfIB9AH/BgAB/wL0Av8LAAL/AfQB8gH0
Af8TAAL/AfQB8wLxAQcBEgHtAfABvAEaAfMB8AEaAZkBGgGZARIBBwL0Av8VAAP/AQAB9AHwAfQB7wH/
DQAB8wHsAfEB/xgAAfAC7wMHAfQCAAH/AfMB7wHsAfcBBwH0BAAF7wG8EgAC/wHzAfQB/woAA/8MAAH/
AfQB/xQAAv8B9AHzAfEB9AG8AZIB7wHwAfMB8AHxARIBHAGZARoBmQHsAe0B9AP/GgAB/wHyAfEB9wEH
AfIB9AcAAf8B8wHyAewB8QH/GQAB8gPvAQcBvAH/BAAB/wLzAv8EAAEHBO8B9BMAA/8JAAP/AfQD/woA
Av8VAAL/AfQB8wLyAfQB8gH0AfMBHAHrAbwB7QEcApkBvAEHAfAB9AP/HAAB/wH0AfIBBwG8AfMEAAH/
AfIB7wH3Ae8B9AH/GgAB9AEHAu8BBwH0DgAB8QPvAfEgAAH/AfQB8wHyAfMB9AH/IgAB/wH0AvMB8AHz
A/QBbQHvARwCGgEbAbwB8QHzAvQC/yEAAf8B8wMAAf8BvAH3AfAB/x8AAfMB8gH0EAAB9AHyAfMB/x8A
Af8B9AHyAfABBwG8AfIB9AH/IQAC/wH0AfMB8QT0AQcBGwHwAfEBBwG8AfIB8wL0Av8pAAH/VwAB/wHz
AfABBwG8AQcBvAHyAfQB/yAAAv8C9AHzAfAC9AHzAfQB8gHwAfEB9wHrAfMC9AP/gQAB/wHyAQcBvAH0
AgcB8AHzAf8gAAL/A/QB8wP0AfAC8wHyAfEBFAHzAvQC/4IAAf8B8wHxAQcBvAEHAbwB8wL/IQAD/wL0
AfIB8QHzBPQB8gG8AfQD/4MAAv8B8wHxAbwB8AHzAfQB/yMABP8D9An/hQAC/wH0AfIB8wL/JQAI/40A
Bf8pAAL//wD/AP8AkAAI/7MABf8J9Ab/GAAB/wMAAf8WAAP/dAAC/wL0AvMB8gHxB/AB8gLzA/QD/xYA
Af8BAAT/EwAF/1gAAv8ZAAH/AfQC8wHxAvABvAHvAewB6gQUAewB9wEHAfAD8gHzAvQB/xUAAv8B9AP/
EwAB/wH0AfMC9AH/RAAT/wH0A/8WAAH/AfQB8wHxAbwBBwHvAewBEgFDARUBEQQVAREBQwEUAe0B7wHw
A/EB8wH0A/8SAAL/AfQB/wH0A/8PAAL/AfQB8wHyAfEB8wH0Af9DAAH/AfEB8gHzDvQB8QG8AfIB9AH/
FQAB/wH0AfMB8AEHAe8B6wEUARIB6wFtAeoGEgHrAW0CEgHrAQcBvALwAfEB8wL0Af8RAAL/AfMB/wP0
Av8JAAb/AfQB8wHxArwB8QH0Av8VAAH/DgAD/xsAAfMBcwHvB/IC8QPyAfMB8gHwAesBRAHvAfIC/xQA
Af8B8wHwAe8B7QETARIBBwHyAbwB6wHqBRIB7AHvAfcB7QHsARIBFAGSBPAB8QHzAfQC/xAAAf8B8gH/
AfQC8wH0Af8FAAT/BPQC8wHyAfADBwHwAfMB9AH/FAAB/wH0Bv8DAAX/AvQB8xsAAf8BmQF5AQcBvAEH
A+8EBwS8AfcBRAGZAe8B8gH0Av8SAAL/AfIBBwHtARIB9wHwAbwB7wHwAe8BEgHqBBIB7QGSAbwDBwHs
ARMB7AEHBPAB8gH0Av8PAAH0AfAB/wH0A/MB9Af/AfQB8wHyBPEB8AEHAfcC7wEHAbwB8gH0Af8TAAH0
AfID8wHyAfMB9AUAAf8B8wHyAfMC8gLxAf8aAAHzAZkBeQHvAfcC7AHtApIB9wQHAe8BbQF0AgcB8QHz
AvQC/xAAAf8B9AHxAe0B6gEHAfMCBwHvAgcC6gMSAesC7QHvAbwBBwHvAQcB7AEVAewBBwLwAbwB8AHy
AfQB/w8AAfQBvAH0Af8B8wHyAfEB8gbzAfIB8QG8AgcE7wLsAfcB7wEHAbwB8gH0Av8RAAH0BbwBmQG8
AfMFAAH/AgcDvAEHAfcB8QH/GQAB/wHwAXoBcwHsAeoBEwIQAhEB6gHvArwBkgFuARoB9wEHAvAB8gHz
AfQC/xAAAf8BvAESAQcB9AIHAfcD7QHsAm0CEgHtAuwC7QHsAe8BkgHvAesBEwHtAQcB8AG8AQcBvAHy
AfQB/w4AAfQBBwL/AfMB8gfwAbwBBwPvAu0C7wGSAeoB7AH3AQcBvAHxAfIB8wH0Af8QAAH/AfcB7QH3
Au8BBwGgAZkB8gUAAfQBkwKZAe8CHALtAfMWAAT/AfEBGgF0AUoBRAVLAUoBRAFKARIBRAF0Ae8BBwPw
AbwB8AHyAfMH/woAAfQBEgGSAfMBBwG8Ae0B9wHtAewB7QHsAm0B6gFtAfcB7ALrAe0BbQHrAuwB6wHq
ARMB7wG8AfACvAHwAfMB9AH/DQAB9AEHAfQB/wH0AfIB8AK8AwcB7wL3AZIF7QHsARQB6gHsAfcBvAHw
AfEB8gHzAfQC/w4AAf8BBwFuAewB7QEcAe0BmQGgAZkB8gUAAfQBkwGaAZkB7QHsAe0B7AHrAZIB9BUA
Av8C9AHxAXMBegF5AXQEeQF0AXMESwFzAQcB8QLyAfABvAEHAbwB8AHyAfME9AL/CQABBwETAfABvAIH
AewB7wP3AewBEgJtAesB7AGSAuwBkgHsARQBkgHtAesB6gETAewBvALxAvAB8gH0Af8NAAH0AQcB8wL/
AfMB8QPwAQcB7wH3Au0C7AHtAuwBbQEUAW0B6gFtAZIB8QLyAfMC9AL/DgAB8AFuAusBbgFzAW4BmQGg
AZkB8wUAAf8BkwGaARoBcwFuAXMBbgFtAW4BHAH/FAAB/wH0AfMB8AHsAXkBoAGaARoB9wLvAbwBBwHv
AZIBcwFRAksBkgHwA/IB8AQHAfAC8gLzAfQC/wcAAfQBbQH3AbwCBwLtAe8C8AIHARICbQLqAZIC7wEH
Ae0BEQGSAgcB6wISAbwC8wHxAfAB8gH0Af8NAAHzAe8B8gEAAf8B9AHzA/EB8AEHAfcB7AQUARUBEQEV
AW0BcwESARQBkgHyA/MB9AP/DQAB/wHtAm0B6wFuAeoBbgGZAaABmQH0BgAB7wGaAcMBmQJuAW0CEgFt
AfAUAAH/AfQB8QFzAXkBoAEbAfcB7AHtAe8BvAPyAbwBBwH3AXMCSwHvAfED8gHwAQcC7wEHAbwB8QHy
AfMB9AL/BwAB8QETAQcB8AHyAbwB6wGSAbwBBwHyAfEBBwETAe0B7AHrAeoB9wLwAu8BEQHsAfEB8wEH
AW0BEwGSAfMB9AHyAfEB8gH0Af8NAAH0Ae8B8AH0Av8B8wPyAbwB7QFtBBQCFQEUAesBdAFzAeoBFAHs
AfID9AL/DwABvAHqAW0BSgHqAm4BmQHDAZoBmQH0BgABvAGZAsMBcwFuAW0BSgFtARIBkgH/EwAB/wH0
Ae8BdAGgAfQBBwHvAXMBHAHvAQcB8QHyAfMBBwEcAQcB7QJLAW4B8APzAfIB8AEHAu8B8AHyAfMB9AP/
BwAB7AFtAe8C9AG8AeoC7wH3AbwB7wH3Ae0BuwH3AewBbQHsAe8B8AGSAe0BEQFtAfAB/wH0Ae0BbQHs
AfMB9APzAfQB/w0AAfQB7wHsAe0BBwHwAfEB8AEHAfcBbQISAeoBbQESARQBFQEUAW4BeQJzARIBQwES
AfIB9AT/DgAB/wHtARIBbgFKARICbgIaAZoB8AH/BgAB/wGTAZkBwwGZAW4BbQFEAW4BbQHrAfITAAH/
AfIBSwF6AcMBvAH0AfIBBwGZAgcBvAHxAfIBHAG8AfABBwFzAksBHATzAfEBvAEHAbwB8QHzAfQC/wgA
Af8BFAHsAQcBAAH/AewB6wH3AewC7QH3AewBBwHwAbsB7QHrA+wBbQETAREBEgH3Af8BAAHxARIB6wG8
AfQC8wH0Af8NAAH/AfQB7wHrARQCFQLqARUBEgHqA20BEgEUARUBFAHqAZkBegFzAesBEgEVAUMB7wH0
Av8QAAHwARIBbgFzARQBEgFuAcMCmQEcAfQCAAHzAu8B9AH/AQABvAGTAZkBwwGTAW0BRAFuAZMBEgHv
EwAB/wEHAXQBoAHwAv8B9AHzAbwBmQHxAvABHAGZAfABvALwAW4BSwFzAfEC8wHyAfECvAHwAfMB9AL/
CQABBwEUAewB8wH/AfIBFAH3Ae8BvAHvAe0B9wHtAfMB9AHwAbsB7wHtAW0BFAISAeoBEgHsAfIB/wHy
ARUB6wEHA/QC/w0AAf8B9AEHAfcB7ALrAW0B6wHsAe0B7ALrAW0BFAITAeoBHAJ5AusBEgEUAUMB6wL/
EAAB/wHvAW4BmQFuAUQB6gSZAe0C/wG8AewB6wLqAQcBAAHyAZMBGgGTAZkBbgFEAUoBmgFzAW4B9BIA
AfQBcwF5ARoB8wEAA/8B8QGZAfAB8gEcAZkDBwG8AfEBBwJLAQcC8gLxAfAB8QHyAfQC/woAAewBFAHs
Av8B7QHsAe0BkgG7AbwB8QK8AvQB8wHwAbsBkgHrBG0BEgFtAQcB9AHzARIBbQHvAvQC/w4AAf8B9AEH
AfEB8wH3AZEB6wHsAfcBBwGSAewBbQETARIBSgFuAZkBGgHtAXMBbgFtARMCFAHqAfMRAAH0Ae0CmQHq
AUQBcwEaARwCkwHyAQAB8QETAeoC7AFtARMC9AEcAZkBHAKZAeoBRAEcAZkBcwHwEgAB8wFuAXkBGgH/
BAAB/wHxAQcB8wIHAfEBvAEHAbwB8QHyAXMBSwEcAvIC8QLyAfMB9AL/CgAB7AETAewB/wHzARQB7QHr
AewB9wG7AbwE9AHyAfMBvAHvAfcC6wFtAxIB6wHwAfMB7AFtAQcD/w8AAf8B9AEHAfIBAAH3AbsB7AGR
AbsBBwHsAW0BEwEUAUoCdAGZAQcB7QHsAesBEwIUAUsB7AHxEQAB9AHtAZoBkwISApMB8QHvAQcBAAH/
AZIBFAHqAe8B7AETAREBkgH/AfABkwG8AZMBmgFuAUQBbQGaARwBvAwAAf8B8QEHAbwB8QHzAbwBSwF0
ARoFAAH/AfMB9AHxAfIB8wHxArwB8AHyAfMBBwJLAe8BvAEHAu8BBwHzBP8JAAHsARIB7AH/Ae8BbQHs
AesB7AHtAe8BBwHyAfQB8gHxAfAB8QHyAbwBBwHvAe0B7ANtAewB8AHzAewBbQEHAv8QAAH/AfQB7wHy
AQAB8QG7Ae0B9wHvAfcBbQETARUBSgF0A3MBdAGZAe0B6gETARIBSwF0ARwB8wH/EAAB9AGTARoB6wEU
AW4BmQFzAfQBkwHwAf8B8wFtAeoB7QG8AQcB7AEUAW0B9AHyAZkBvAEcApkBSgEUApkBBwsAAf8B8QFt
AkoESwF0ARoB/wHzArwBBwG8AfQB7wEcAZkB8wEcBOwB8AHyAksFSgFzAfAE/wkAAewBEgHsAf8B8AKS
A+wB9wK8AfIB8QHvAfIB8wLwAbwBuwH3AuwB9wIHAfAB9AHsAW0BBxIAAf8B9AEHAfIC/wGSAbsC9wHt
ARIBFQEUAUoBSwFzAW0B7AF5AZkB7wHsAesBcwKZAfEB8wH/EAAB/wEHAW4CFAKZARwB/wGTAQcB/wHy
AW0B6gHsAbwB7QLqAesB9AHwAZkBvAEHAXMBmQHqAUMBSgF0AfMMAAHwARwEmQFzAVEBdAEaAQAB8wLw
ArwB9AG8AfQBwwH/AQcC7wMHAfMBbgFRBRwBmQHwBP8JAAHtARIBbQH/AgAB8gEHA/cBBwH/AQcBkgHr
AbwB8QG8AQAB9AEHAbwC8wHwAfMCAAH0AeoB6wG8EgAB/wH0Ae8B8gL/AbwB9wGRAewBbQEUAREBRAFK
ARIB6wHqAewBHAF0AXkCmQGgARoBmQH/AfMB/xAAAf8BvALrARwBmQFuARwB/wGTAQcB9AG8ARMB7QPz
AfAB6wESAfQBvAGZAbwBBwGTAXMBkwJuAXMB/wwAAf8D8wL0AQcBSwFzARoFAAL/AfQC8gEAAv8B9AIA
Af8B8wFLAXkB8wL/AfQC8wH0DQABBwHqAW0B8wQAAfQB8gHwAfEB/wHyAfEB8wHtAbwB8QIAAfEB8wHy
Av8CAAH/AfIBEQHtAfESAAH/AfQBBwHyA/8B6wLsARMBQwERARQBEwESAesBbQGRAe8BUgF5ApoBeQKZ
A/8QAAH/ApkBBwGZArwBkwHzAvEB9AHwAesCHAGZARoBCAEcAesB9AHzAbwB8wEHAZMBvAGZARwBvAGT
AfQNAAT/AQAB8wJLAZkB/wQAAf8B8QHzAf8BAAHxA/8CAAH/AZIBSwG8Af8FAAH/DQAB/wLqAe8GAAL/
AgAB/wH0AfMB8gHzAgAC/wYAAbwBQwH3AfQSAAH/AfQB7wHyAv8B9ALrAeoBFQIRARUBFAESAusBuwEc
AXQBeQF6AXkBvAHzAQcD/xAAAf8BBwGZAbwBHAHvAfMBkwEHA/QB8AEHA5kCGgGZAe8C8wH0AfEBkwHv
AfIBHAEHAbwBkwH/EgAB9AFzAUsBcwH0BAAB9AG8AfQBAAH0AQcB9AQAAfMBRAF0AfEVAAGSAW0BEgH/
FwAB/wHrARIBBwH0EgAB/wH0Ae8B8gL/AfQBbQHqARQBQwERAhUBFAESAW0B7AH3AXkBUgFMAVIBHAG8
Af8B8BQAAfEBdAEHARwBdAHxAgcD8wG8ARoDCAMaAbwB8gLzAfABkwHzAe8BkwEHAZMBBxMAAf8BHAJL
AZkB/wIAAf8BvAHzAwAC8QH/AgAB/wHrAUsBmQH0FQAB8QFtAeoBBxcAAfIBEgH3AbwB/xIAAf8B9AHv
AfIBAAL/AeoBEgEVAhEBFQEUARIB6wHvARoBmQF0AVIBSwF0AhwBAAHzFAAB9AGTAZkB7wGZAQcB8wH0
AfMB8gHxAbwBGwH0ARsBGgMbARoBvALyAvMB8QF0AZMBBwGZAfEUAAHzA0sB8AIAAbwB8AH/AwAB/wLx
Av8BHAFLAXkB8AH/FQAB9AHsAesB7AH0FQAB/wGSAesBBwHzAf8SAAH/AfQB7wHyA/8CFAEVAUMCFQET
AewBCAHDARoBeQFLAlICHAGZAQAB9BQAAf8B7wGTARwBkwEHAvQC8gG8ARsB9gH0ARsE9AH2AfIB8ALy
AfMB8gF0ARwCkwH0FQABvANLAfQBAAGgAfMFAAH0AfMBAAEHAUsBeQGZAfQXAAEHAesBEgEHBwAB8gH/
BAAB8wH/BgABvAHqAbwB8AH/EwAB/wH0Ae8B8gMAAhQDFQESAesBmQEbAaABmQEcAksBUgEcAbwBmQH/
FgAB9AEcAQcB8QHzAfQB8wHyAbwB9AL2A/QF9gHwAfEB8gHzAfQB8QG8AXQB8AH/FQAB/wGZAXMBSwFz
AfID/wQAAfQB8QHvAVEBeQEaAfMB/xcAAf8B7AFtARIB8QH/BQABbQHyAwAB8gHsAfQEAAH/AfEBEgEH
AfEB/xQAAf8B9AHvAfICAAH0ARUCQwEVARIB7AEcAZkBeQKZARwBUgFLAVIB7wG8AZkB/wIAAv8TAAHz
A/QC8wHxAfAB9gH/BvYD/wH0AbwB8QHyA/QB8QH/FwAB/wGZAVECSwEcAe8BvAHwAfIB8QG8AhwBmQGa
ARoB9AH/GQAB9AHtAW0BEgG8Af8EAAHrAfMDAAHyAfcB9AQAAfEB6wEHAfIB8xUAAf8B9AHvAfICAAFt
AhEBFAFtAe0CHAF5AVIBvAIcAXQBUQFSAQcB8AEcAwAC/xMAAv8C9AHzAfIB8AEbAf8D9gf/AfYBvAHx
AfIB8wL0A/8YAAEcAUsCUQF0AVEBdAFRAXMBeQGaAqAB9AG8AfQbAAHxAewB6wETAQcB/wMAAesB9AMA
AfIB9wH0AwABvAFtAQcB9AHyAf8VAAH/AfQB7wHyAgACEQEVAW0C7wFLAbwBBwEcAfIB8AG8ARwBcwEc
AQcB8AEcAwAC/xMAAv8C9AHzAfIBvAEbAf8D9gj/AbwC8QHzAvQD/xcAAfQB7AGZAbwBmQEcApkCmgMa
ARsB8gK8Af8aAAH/AfAB9wHrAeoB7QHyAf8BAAHsAfMDAAHyAfcB9AH/AfMB9wHsAe8B8wHxAf8WAAH/
AfQB7wHyAQAB8AERARQB7AHvAZkBHAFLAfIBvAH/AfQB8QHvAxwC8wEcGAAC/wL0AfMB8gG8ARsB/wL2
Cf8BGwHwAfEB8wL0A/8WAAH/AfcBSwG8AfQB/wH0AvMC8gHzAvQB/wH0AfABGgHyAf8aAAH/AfQB7wHs
AesB6gHtAbwB7AHzAwAB8gGSAQcB9wFtAfcB8gHxAfMB/xcAAf8B9AHvAfEB/wHsARQB7AG8AfQB8wG8
Ae8B/wHwAv8B9AG8AZkBHAHvAQAB9AEcGAAC/wL0AfMB8gG8ARsC/wH2Bf8D9gH/AbwB8AHxAfMC9AP/
FgABvAFEAaAB/wsAAf8B8wHyAbwB9BwAAf8B8AEHAbsB9wESAesB8wMAAfIB7wHsAfcB9AHzAbwC/xgA
Af8B9AH3AfIBvAETAfcB8QH/AgAB9AIAAfIBAAL/AfMB9AEcAbwCAAHzGAAC/wL0AfMB8gLwAvYB9AH2
BP8B9gH0AvYBvAHxAfIB8wL0A/8UAAH/AfQBHAFzAbwNAAH/AfABvAHwAf8cAAH/AfQB8gHwAQcBvAH0
AwAB8gEHAfAC8gHzAf8aAAH/AfQB7QLqAQcB9AQAAfQCAAH2AQAC/wEAAfQBmQHzAgAB9BgAAv8C9AHz
AfIB8QG8ARsC9AX2AfQBGwH0ARsBvAHxAfIB8wL0Av8VAAL/ARwBmQH0DgAB/wHwAfEB/x4AAf8C9AHx
AfQDAAH0AfAB8wH0Af8cAAH/AfQB9wHsAfEB/wUAAf8EAAL/AQAB9AEcAf8bAAL/AvQC8wHxArwBGwH0
BfYB9AIbAbwB8AHyAfMC9AP/FgAB/wH0AfMB/1oAAfMB7QHyDwAB/wHwAwABvBgAA/8C9AHzAfIB8QHw
AbwBGwHDARsB9gP0ARsBvAHwAvIB8wH0A/91AAH0Ae8BvBAAAfYDAAH0GQAD/wL0AfMB8gHxAfABvAIa
AxsCvAHxAvIB8wL0A/91AAH/AbwB9C4AA/8D9AHzAvIB8QLwArwB8AHxAvIC8wL0A/+pAAL/BPQD8wPy
A/ME9AT/qQAF/wz0Bf+rAAn/AvQI/7EADP+4AAL/AQAC//8A/wD/AOsACv9+AAf/DwAG/xsADP9YAAX/
HwAD/wP0A/8NAAf/GgAC/wn0Av9VAAP/BfQF/xkAAv8B9APyAfMB9AT/CgAC/wH0AfMD9AL/GAAC/wH0
CvMC/y0ABf8fAAP/AfQB8wHyAfEC8AHxAvIC8wP0Bf8SAAL/AfQB8gG8Ae8B9wEHAfAB8wb/BwAB/wH0
AfMB8AHvAfAB8gT/FgAC/wHzAfEF8AK8AfAB8gH0Af8rAAL/BPQB/wIABv8XAAH/AfQB8wHxAQcB7AJt
ARIB6gHsAQcCvALxAvIB8wL0Av8RAAH/AfQB8gEHAesC7AHqAe0BvAHzAfQE/wcAAf8B9AG8AfcBkgHs
AQcB9AP/FgAB/wH0AfEBBwXvAfcB7wEHAbwB9AH/KgAB/wHzAbwD7wHwAfQC/wH0AvIB8wL0Af8WAAH0
AfMB8AHrAUQBSgFEAREBFQERAg4BFQHsAu8CBwG8AfEB8gHzAf8SAAHzAfABbQEHAewBFQEUAeoB9wG8
AfIB9AX/BAAC/wHzAewB6wH3AesB7wHyBP8VAAH/AfQBBwGSAe0G7AGSAQcB8wH/IAAG/wQAAf8BBwHr
A0oBkgHzAf8B9AEHAewBbQHsAbwB9AH/FQAB/wHzAfcBFQFKAUsBcwEcAZMBHAHsAesBSgEUAhABQwFt
AesBkgHvAQcB8QH0Av8OAAL/AfQBBwEcAfMB7AFDARQC6wH3AbwB8gH0Cf8B9AHzArwB8AHvAQcB8AL0
BP8TAAH/AfMB9wHsAesBbQLqARIBbQHrAewB7wHzAf8fAAH/AvQB8gEHAfIB9AL/AgAB/wG8BJkBcwH0
Af8B8AGZAnMBbgESAfMB/xUAAfMB6wFKAXMBmQEaAfQDGwGZARoBGwG8AZkBcwFKAUQBEQEVAewB7wHw
AfMB9AH/DgAC/wHzAQcB6wGSAeoCQwHtAuwB7wEHAfEB9Af/AfQB8wHwAQcBkgG8Ae0BBwHxAfIB8wH0
A/8SAAL/AfMB7AFtAeoDEgEUARIBbQHqAfcB8gH0Af8dAAH/AfQB8wHwAe0BEgHsAfEB8wH0Af8BAAH/
AbwBmgEbAfQBGgEHAfQBAAEHApkBGgGZAUsB8wH/FQABSgFzAZkC9AEbAxoB9AGZAUQBFQFKAXMBmQEa
AZkBdAFLAu0BBwHxAfMB9AH/DQAB/wH0AfIB7wHrAQcB7AESARAB7AHxARIB6wH3AQcB8QH0Bf8B9AHy
AfAB9wHvAbwB8AHvAewBBwLxAfIB9AL/DwAD/wH0AfIBvAHrAuoBEgETAhIB6gFtARIB7AHwAfMB9AP/
FwAD/wHzAfEBBwHvAZIBFQFDAesB8AH0Af8BAAH/AfMBvAHwAfIB8AHxAv8BBwEcARoBGwEaAe8B/xYA
AfECGgIbBRoB9AGZAUoBEQEQAREBRAFKAW4BHAHvAe0B7wG8AfIB9AH/DAAB/wH0AfIBBwHvAewBkgEH
Ae0B6gFtAfABHAESAewB9wHvAfAB8wH0A/8B9AHwAe8B8AG8AwcB7wHsAZIB8AHxAfQC/w4AAf8B8QHy
AfMB8gG8AesBFAISARMBFAETAhIB6gESARQB7QHwAfIB8wHwAfIB/xYAAf8B9AHzAQcB9wGSAvcBFQEP
AUMBkgHxAfQB/wEAAf8C9AHzAvQC8wHxAwcB8AH0GAAB9AHyArwBHAGZBBoBGwHxARwBRAFDAhEBFQFu
Au0B7wEHAfEB8wH/CwAB/wH0AfMBvAHtAZIB9wHrAgcBkgHqAe0B9AFtAeoB7AHtAe8B8AHzA/QB8QG8
AfcB7wEHAu8BBwLvAewB7wHxAfMC/w0AAf8B8gEHAfIB8AEHAZIBFAEVAhMDFAITAhIBQwESAe8BBwHx
AbwB6gHxFQAB/wH0AfIC9wHtAewC7wHtAUMBDwEQAewB8AH0BgAB8wEHAuwBvAH0Af8dAAH0ARoBHANK
AW4CHAEbARoBdAJKAVEBBwGSAe0B7wEHAfEB8wH/CwAB/wH0AbwBEgHvAesBFAFtAesB8AEHAewBEgHw
AQcBFAFtAuwB7wHwA/IBBwHvAbwBBwHtAe8DBwEcAQcB7AHwAfQC/w0AAvIB8AHyAQcB7QFtAQ8BEgJt
AesCQwIUARIBbQIVAesBkgG8AfIB7AFtAfMSAAL/AfQB8AHvAe0B7AHtAfcB7wLtAewBFAEPAUMB9wHy
Af8EAAH/AbwBcwFKAUQBSgHvAf8eAAHzAXMBDwEQAQ8BFQFKARUBSgGZARsBmQF0AZkC9wLvAQcB8QHz
Af8KAAL/AfMB7ALvAW0B7ALrAe8B8AEcAW0B7AHyAewBbQPsAe8BBwHwAe8BvAHxAbwC8AH3AZIB7wEH
AfcBBwHtAfID/wwAAf8B8QLyAfAC7AFtARIB6wHsAfcB7AJDAhQB7QHsAesBbQHqAewB7wHyAQcBbAHs
Af8RAAH/AfQB8AH3Au0B9wHsAvcE7QESAQ4BFAHvAfMB/wIAAf8B9AEHAZkBHAF0AXMB7AH/HgAB/wG8
AewBbgHqAUsBRAERAUMBHAF0AUQBSgFEAesB7wIHAbwB8QHzAv8JAAL/AfMB6wEcAewBbQG8AQcC6wHw
AQcB7QESAe8B8AETAuwB6wHsApIBBwHwAbwBBwG8AvAB7QTvAfcB8wH0A/8LAAHvAfQB8AHzAbwC6wK1
AQcBvAH0AbUB6gEUAuwCvAEHAewD9wLxAa4BtAG8EQAB/wHzAfcB7QH3AfABkgETARIB7AHtA+wB7QFt
AQ8BEAEHBfQB7wF5ARoBGwGZARwB/yAAAfQB8QEHAfcB6gEVAUMBcwEVAUMBcwEQAUMB7QIHAbwB8AHy
AfQB/wkAAv8B8wJtAewB7wHxAfMC7AHvAfABBwLrAfIB7wLtAfcB6wLsAbwBBwHwArwB8QHwARwB6wHv
AbwB7AEHAfIB9AP/CgAB9AGRAf8B8AH0AfIC9wG8Ad0D/wEHAW0BEgEHAfcBvAH/AfQBvAK1AfcB9AHz
AesBrgHvAf8PAAH/AfQB8gH3Au8BuwHtAhEBFAFtAewC9wLtAeoBEAEUAQcC9ALzAbwBmQEbAfMB8AHz
Av8fAAP/AfQBvAIRAXMBRAERAZkBSwFuAQcD8AHxAfIB8wL/CAAC/wHzAe8B7QHwAfMB8QHwAfcB7wHs
AQcBvAEcAW0B7wHzAesBkgH3AZIC7AEHAe8CvAHwAQcB9wEHAeoBBwG8Ae8B8AHxAfIB9AL/CgAB8AG0
Af8B8QH/AfQB7wEHAe8BkgP3AW0BBwHrAfIB7QHsA/cBtQHdAbwC9AHsARMB9wH0DwAB/wHzAfAB7wEH
AfcBBwHwAfcBFAEPARUBEgHsAvcB7QLsAUMBFAHvAbwBHAJzAe0BvAHyAfQBAAL/IQAB8wH0AfIBEAER
AW4BcwEVAW0BmQEHAfAB8QTyAfMB9AH/CQAB/wH0AfAB7QHwAfQB8AHsAe8BHAG8Ae0B8AG8Ae0B6wHx
Ae8B9wEHAfcB7QHsAe8BkgHvAQcB8AG8Ae8B8QFtAfAC8gHxAfIB8wH0A/8IAAH/Ae8BiwHwAgcB7wHt
AQcB7QHrA0MBFAH3AewB/wHtARUBZgESAewB9wEHAfcC7wFtARUBrgHxDgAB/wH0AfIB7wG8AfcBvAHz
AgcBvAHsAhABFAFtAe0B9wHtAewB7QEVAREB9wGaAksBSgHsAfMB9AIAAf8dAAL/AfAB7AHqAewBbQEQ
AUoBHAEaAZkBGgEHAfAD8gPzAfQC/wkAAf8B9AHzAe8BBwHzAfEB6wEcAewB8QLvAfAB7wHqAewB8gHs
AbwBBwHvAfcB7wGSAe0B7wEHAfEBBwHxAfcF9AT/CQAB/wHsAWwBrgSRAu0BbQERAuoBEgHqARMB6wES
AW0BEwHrAewB9wHtAWwDEwEUAesBvA4AAf8B8wEHAe8B9wG8AfMB9AHwAwcB7wHqAhEB6gLsAW0C7AET
Ae8BGgNLAesB8AHzAfQBAAL/GAAC/wH0AbwB7QFtAkoBSwFKAUQBEQFKARwBmQHyAfMB8AHyAvME9AP/
CgAB/wH0AfABbQHxAfQBBwHtARwB7QHxAfcB8wHwAe0BEgLvAewBvAIHAe8B9wLsApIDBwHzAvQH/wgA
AfQB6wKuAZECtAG7Ae0B7AFtARQC7AISAhMBbQHqARMBbQHtAfcBkQGuAW0B6gFtARQBbQEHDgAB/wHx
Au8B8QHyAfQD8wO8Ae8BkgETAQ8BQwEUARMB6wH3AZIBmQEaA0sBEwHtAbwB8wEAAv8YAAH/AfABbQES
AUsCHAGZARoBmQEcAW4CFQFLAfIB8wHyAfMD9AT/DQAB/wHzAQcB9wH0AfICHAHrAfEBBwH3AfIBBwJt
AQcB7AEHAfABBwHvAgcB9wHvAfABvAHvAewC8AH0CP8HAAH0Ae8GGQEHAesB6gH3AuwG9wHrAbUB6wH3
AgcDtQLvAbwOAAH/AQcB9wHyAfEB9AHzAbsBBwT0AfAB9wEHAesBEQFDARIB7AH3AesBvAH0AXQBSwFK
AREBRAFLAewD/xgAAf8BvAHvARoBGwb0ARoBSgFDAXMB9AHzA/QD/xAAAf8B9AHyAewB8QH0AQcBHAGZ
Ae8B9AHrAvEB7wESAZIBvAHrAfAB8QG8AgcC7wIHAbwB7AHrAe8B8wj/BQAB/wG8Au8GBwHvAe0BuwHz
AvcBEgEVARMCEgH3Ae0B8AG8AbUCuwMHA+8BBwHwAf8LAAH/AQcCvAH0AfMB8gG8AfAB8gHwAfMC9AHx
Ae8B9wGSAeoBFQETAeoBbQG8ARoBTAJLAREBRAFLAUMB8gP/GAAB/wHzAfIB8QHyAfEBGwHyARoB7wFL
ARUBQwEcAfQB8wH0BP8RAAL/AfMB9wHvAfQB8gEcAQcB7QHyAfMB7QHzAfEB7AHqAQcB7AHvA/EB8AHv
AwcB9wK8AfAB8gH0B/8FAAHzAeoBbAFtA2wCrgGRArUBCQH/Au8BFAEPAkMBFAH3Ae0B9AHxAbsBtQGu
BmwBEwHtAf8LAAH/AfEB7wHtAQcCvAHxAfMB8AEHAbwB9AHzAfQB8gEHAe0B7wH3AeoBFAETARsBGgFM
AksBEQFKAUsBIgHyBP8ZAAL/AQAB9ALzAbwBBwHvARUBQwEcAfQBGwP/EwAC/wH0AfAB7QHzAfQBvAHv
AewBvAH0AQcBvAH0AQcCbQEcAewBvAHxAfIB8wLxAbwBBwH3AbwB8gHxAfAB8wf/BQAB8wNtA2wCrgGR
AbsCGQHtAbwBBwEVAg4BQwEUAfcB8AHzAfABGQG7AbUB7QJsAxIB6gH3Af8NAAH0AfAB7QHvAfAB9wG8
AfIB8AHzAvQBvAHsARIB6gHtAvIB7AEUAe8BwwFMAksBEQFKAUsBEQHwBP8dAAT/AfQB6gFDARwB9AEb
Af8WAAH/AfQB8wH3AbwB9AHyAZkC9wH0AfMB7wH0AfMBHAEUAewB6wH3AbwB8QHyAfMB8gHxAfABvAIH
AbwB8AHzBP8IAAH0AW0CbAHqAe0B7wQHAvQBvAEHAe8B6gEUAhIBbQHvAfcB8AHzAhkB4QG7AZEBbQNs
Ae0BBwH/DgAB/wHyAQcC9wEHAfAB8QH0AfMB8AHsARIB7AHtAZIBvAHsAeoBEgG8ARoBUgFLAUoBQwFK
AUsBEQG8AfQD/x0AAv8DAAHrARABHAHzAfIB/xcAAf8B9AHwAewB8wH0AQcB7wHsAfIB9AIHAfQB8QHr
ARIB7AESAe8B8AHyAfMB9AHzAfIB8QLwAfEB8gH0A/8JAAH/AewCbAHqAfcBvAbwAbwB9wHtAewB6gHt
ARIB6wLvArwB8ALxAvAB7AFsAYsBkQHyAfAB/xAAAfQB8QHvAewB7wG8AfEBvAGSAewB7wG8Ae8B7AFu
AeoBEgEUAZkBwwF0AksBIgFKAUsBEQEHA/8aAAH0Af8BAAHzAfcBHAMAAZIBFQGZARsB8wH/FwAB/wH0
AfMB7QG8AfQBGwHvAu0B9AHzAe0B8gH0AQcCEgHrAewBvAHyAfQC/wXzAvQD/woAAQcCbAHqAWwBvAUA
Af8B9AHwAe0B9wESAewBEwHsAfcB8QH0Av8DAAH/AZIBbAGRAbQB/wHzFAABBwHsAe0BvAHvAe0B9wEH
AfABcwFKAesBbQISARwBwwF0AUwBSwERAUoBSwERAbwB9AL/GAAB9AG8AZIB9AHvARUBEQFKAQcC9AHs
ARUCGgHzAf8YAAH/AfMBvAHsAfMB9AEHAe8B6gHxAf8B8gGSAvQB7QEUARIBbQEHAfIB9AT/A/QE/wsA
AfQCbAESAW0BBwUAAf8B9AHwAewB7QISARMB7AHvAfMB/wUAAfQBkgK0ARkB8AH/FAAB/wHyAQcB7QEH
AfAB8gHvAXMBSgJtAeoBEgFuAZkBwwFSAUsBSgERAkoBEQHxAfQC/xcAAfMB7AHtAuwBEAERARUBcwGZ
ARwBBwHvAZkCGwHzAf8YAAH/AfQB8wHvAbwB9AHwAe8BHAHvAfQB/wG8AfAB9AG8ARIBFAHrAfcB8gH0
Cv8NAAH3AWwBEgHqAfcB/wQAAv8B8gLtAewBEgH3AewBBwH0Af8FAAH0AZEBtAEJAfQB8AH/FgAB9AHw
AQcBvAGZAW4BEgHqARIC6gFtARwBvAH0AZkBcwFKAREBRAFKAREB8QH0Av8XAAHsARUBcwFKAUMBEQFE
AXMBmQK8AvAB8gHzAfIB8AH/GAAB/wH0AfMBvAHvAfQB8wIHAe0B8wH/AfIB9wH0AfMBkgISAW0B8AHz
AfQJ/w0AAfIBbQISAesB/wUAAf8B9AH3Ae0B7wH/AQcB7AHwAfQB/wUAAfMBtAEJAfQB8QH0GQAB9AG8
AewB6gFtAuoBEgFKAW0B7AEHApkBGgEcAUQBSgFLASIB8QH0Av8VAAH0AesBQwEcAVEBQwERARUBcwEH
AfMC/wb0GgAB/wH0AfIB7QHyAfQB8AHvAZIBvAL0AfAB7wH0AbwBbQESAW0B7AG8AfMB9An/DAAB/wHv
ARQBEwESAfIFAAL/Ae8B7QH3AfMBBwHtAfIB/wYAAfABGQHiAfQB8QH/GwAB8wH3AW0B6gFKAXMB7wH3
AQcBvAKZARsBmQJKAUsBIgHwA/8UAAHzAewBEAJzAW0CEQFzAZkB9CMAAv8B9AHvAfcB9AHzAQcB7wH3
AvQB8wHsAbwB9AEHARIBEwESARQBBwHzCP8NAAH/AfIB6wIUAe0B/wUAAf8B8AHrAfcB8AH3Ae8B9AH/
BgABBwHiAf8B8gHzHQAB/wG8Ae0B7AHvAfAC8gHwArwBGgEbAXMBUQFLAREB8gP/EwAB9AHsARECcwEU
ARUBEQFuAbwB8wH/JAAB/wH0AfIB7QHxAfQB8AHsAesBBwL0AfABkgHzAfIBbQEUARIBQwESAfEB9Af/
DwABvAHqARQBEwHzBgAB/wHxAvcB7wHyAf8GAAHyAuIB/wHyAf8fAAHzAbwB9wHvAbwC8AHyAfQBvAEb
ARoBmQF5AUoB8gL/EwAB9AHrARABcwEaAe8BFQERAW0C8ScAAf8B8wG8AewC8wLsARIBBwLzAfcBBwH0
AQcBEgNDAe8B9AX/EgABBwFtARMBkgH/BgAF/wYAAfQBvAH/AfMB8AH/HwAC/wH0AfEB7wEHAfEB8wL0
AbwCmQEbARoBSwHyAv8TAAHzAXMBHAHwAfMBcwFKAW4BGgHzAf8nAAH/AfQB8wHsAbwB9AHwAe0BEgET
AbwB8wHqAW0BvAHvAUoBQwERAUQBBwH0A/8UAAH/AbwBrgETAbwGAAL/CAAB/wHxAf8B9AHxAfQB/x8A
BP8C8gH/A/QB8wEHAZkBwwHyAbwB9AL/EwAB/wHxAfAB8wH/AQcBHAG8AfEB/ygAAv8B8wLsAvMBBwEU
ARUB7wHzAe8BSwFEAUsBRQFRARQB7AHwAfQB/xgAAbwBtAESAfIPAAHyAvMB8QH/IwAF/wX0AfMB8QHy
A/8WAAH/AgAB/wHxAfAB/yoAAf8B9AHsARQBBwH0Ae0BIwFLAe8B9AHxAXQBUgGZAUoBmQEHAbwB8wL/
GQAB8wHvAesBvAH/CgAC/wPxAfMB/yUAD/9HAAH/AfQB7wJKAUsBUgF0ARwBvAL0AbwB8AHyArwB8QHz
AfQC/xkAAv8B8gHvAbwB9AkAAfMBvAHwAfMB/ykADP9IAAL/AfMB7wF0ApkBvAHwAfQC/wH0A/IB8wL0
Av8dAAH/AfQB8wgAAf8B8wH0gQAB/wH0AfMB8gEHAbwB8wH0Af8CAAP/AvQC/68AAf8C9ALzAfQC/wYA
Af+xAAj//wD/AP8A/wDAAAH/AgAB/7oACP8/AAb/BQAC/wQAAv8MAAH/VgAL/z0AA/8F9AP/AQAB/wLz
Af8BAAL/AvMB/wsAAv8RAAL/FgAC/ycACP8C9AHzAfQD/xwAAf8fAAL/AfQB8gH0Bf8BAAH/AfEB9wG8
AvQB8gH0AbwB7wHzAf8EAAP/AwAC/xAAAf8C9AH/CgAB9AoAAf8B8wH/JAAI/wH0AvMB8gHxAfIB9AL/
GwAE/x0AAf8B9AHyAfQE/wEAAv8B8QH3AZIB7wEHAe8B9wHvAfcBkgG8Af8DAAL0BP8CAAH/EAAB/wHx
Af8JAAH/AfQBvAL/CQAB9AHxAf8iAAX/AvQB8wLyAfED8AHyAfQB/xwAAf8B8gHwAfQB/xsAAv8B8wHx
AfQD/wIAAf8B8gHvCZIB9wHzAwAB/wH0AvMB9AL/AgAB/w8AAfMBvAHzAf8IAAH/AfAB9wHxAf8IAAH/
AfMBBwH0IQAE/wH0AfMC8gHxAfADvAEHAe8BBwHyAf8dAAHyAe8B8wH/GwAC/wHzAfAC9AH/AwAB/wHw
Ae8B9wmSAfAB/wIAA/8B8wHyA/8BAAH/DgAB/wHwAe0BvAcAAf8B9AHxAe8B7AHvAfIB9AH/BgAB/wHv
AfcB8yEAAv8C9AHyAfEC8AG8AgcB7wGSAW0CQwFtAfMcAAH/Au8B8QH/GgAB/wH0Af8B9AHwAfEC9AL/
AQAB9AG8B+8B9wKSAu8B8gH/AgAB/wL0AfAB8wL/AQAB/w4AAf8BBwHqAfMB/wIAAv8B9AHyAQcB7wH3
AesBSgHsAfcB7wG8AfIB9AH/AwAB/wG8AeoB8gH/GAAC/wUAA/8B8wHyAvABvAIHAe8B7AETARQB6wHt
AfcB7QHyHAAB9AHtAfcB8AL/GQAB/wP0AfIBvAHxAfQD/wH0AQcC7wHsAe0E7wLsAu8BBwH/AQAC/wH0
AfIBvAHzBP8NAAL/AfcBSgG8Af8CAAH/AfEB7wL3Ae0B7AHqAW4B6wLtAvcBBwHzAf8BAAH/AfQBBwEU
AfAB/xcACv8B9AHyArwBBwHvAewB6wEUAQ4BFQISAfcB8AHvAfMcAAHyAewBkQG8AfEaAAL/AfMC9AHx
AQcBvAH0Av8B8gK8AewBbAHsAQcBkgHrAe8BkQFsAZICBwH0Av8B9AHzArwB8wH0A/8NAAL/AewBSgH3
AfMC/wG8AfcBkgL3Ae0B7AFLAW4BSgHsAvcCkgH3AfEC/wHxAZIBRAG8Af8UAAz/AfQB8gG8AQcB7wHs
ARICDwERARQCFQESARQB6wHsAfMZAAP/AfEB6wGRAbwB8QH0Av8XAAL/AfMB8QHzAvIBvAHwAvQB8gG8
AZEBbAFlAWwBFAFDAQ8BQwNsAgcB8QH/AfQB8wG8AQcB8AHzAvQB/w4AAv8B7AFKAewB8AH0AbwB9wHt
AewB7QMcAXMBbgFLAUoBRAFtAuwB7QH3AfEB9AG8AesBSgG8Av8SAAT/AvQC8wLyAfABBwHwAbwCBwHs
AeoCFQEUARIBFAEVARIB7AFmAg8BkgH/GQAB/wH0AfMBBwESAZEBBwG8AfIC9AL/FQAC/wH0AfIC8AHx
AfIB8AHxAfQB8gHvAWwBZQINBA8BZgJsAe8BvAHxAfQB8QG8AQcB8AHyAvMB9AH/DgAC/wHsAUoBbQHy
AfAB9wHsAesBcwMaApkCcwFuA0oB6gHrAe0B7wHyAfABEgFKAbwC/xIAAv8B9AHzAfIC8AK8Ae8CFAHs
Au8B7AEUARIB7QEQAUMBFAEQAe8B9wFmAREBFQFDAe8B/xMABv8B9AHyAfAB6gETAZEB7QPxAfIB8wH0
B/8OAAP/AvQB8gK8AfMD8gHtAWwCDQUPAWYCDQGRAfECvAEHAfAB8QHwArwB8wL/DgAC/wHvAUoBSwLv
AewB6gFuARwDGgGZAe8BBwEcAZkBHAFzA0oB6wHtAQcBHAFKAUsB8QH/EgAC/wH0AfECvAIHAu8B6wHv
AQcC9wHsARQBEQHqAfcBDgERA20B7QETAUMB7AGSAfcB9BAAA/8B9ATzAfIB8QEHAeoBEgHtAZEB6gHs
AfEB8AHxAvIE8wP0Av8MAAL/A/QC8wLxAfMC8QGuARUCDQMOAgABDQEVAmYB9wK8AfIDvAHxAfMB9AL/
DgAC/wHxAUoBcwEcAe0BEgFKAXMBHAEHAe8BvAHyA/MB8gEHARwCcwFuAUoBbQHtAesBSgF5AfMB/xMA
AfQB8AG8AQcE7wHsAfcCBwH3AeoBFAFDAQ8B6gHwARUBFAHsAUMBZgETAa4B9wHtAesB6gHwEAAC/wHz
AvIC8QLwAQcBbQFsAe8CBwGRAeoB6wEHAfEB8gHxAfACvAHwAfEB8gHzAfQC/wwAAv8B9APzAfIB8wHy
AfMBvAFsAw0DDgIAAQ0BQwEVAWYBrgG8AfACvAHxAvMB9AP/DwAB/wH0AhwB7wFtAUQBbgFzA+0B9wXv
ARwB7QLsARwBcwFKAewB7wFSARoC9BIAAf8B9AHxAQcG9wLsAe0B7AEOARQBEAESAfEB9AHwAe0BBwHw
AbQBZgEOAQ8BZgEOARIB8A8AAf8B9AHzA/IC8QHwAQcBbQFsArwC8AHtAesBbAHrAfEC8wHxA/AC8QHy
AfMC9AL/CwAF/wH0A/MB7wFmAg0BFQIOAWwBDwEAAQ0CQwEVAYYBvALwAfMB8QHwAfIC8wH0Af8QAAH0
AfMBBwHvAkoBHAGSA+0B7AHtA/cE7QEcAfcBHAJKAbwBBwH/AfQB/xEAAv8B9AHyAQcB9wTsAe0BEgEV
AesBEgEOARIB7AHxAfMBvAH3Ae8B7QG8AYsBFAETARUB7AG0Ae8B9A0AAv8B9AHzAfEEvAEHAe8BEgFs
AfcBBwHzAfABvAHwAe0CbAHsAfEB8gHxAbwCBwHwAfED8gHzAfQE/wkABf8D9AGuAQ0BQwJmAQABEAGR
AesBAAEVAa4BbAEUAWYBkgHxAfMB8QHzBf8RAAH/AfMB9AH3AUQBUQHwAbwB6gHrAewB6wHtAewE7QHs
AesBcwHwAbwBcwFKAQcD9AkAAf8HAAL/AvQB8AHqARUCFAITARIB6gHrAewBEgFDAe0CvAH3AhIB9wEH
AfABBwHtAQcB7QGSAQcB9AH/DQAB/wH0AfMB8AHrARMEEgHqAZECuwHtAfECbQEHAewB6wGRAWwBbQUS
AZIB8gXzA/QC/woABf8B8gFmAQ0BZgFDAQ4BAAEQAZEB6wIAARQCbAFmAa4B8gHzAfQF/xIAAf8B9AHw
AewBSgG8AfEBbQJEAkoBcwF0AxwBdAJzAVIBHAHyARwBSwEHAfMB8QH/CQAB/wcAAf8C9AG8AQ4BQwH3
AesBEAEUAesB7AH3Ae0CEwHsAe8BbQRDAQcB8gHwAfQB8wHwAe8BBwL/DQAB/wH0AfMB8gHrAWwCuwOR
AbsB8gEHAbsBkQFDARQBbAEUAW0B7wEHBJEBuwHvAbsBkQHvBvMD9AH/DQAC/wGuAg0BDgGLAa4BAAEQ
AZEB6wQAAUMCZgG8A/8XAAH/AfQCcwH0AbwBSwJEAkoBcwF5BpkBegF5AvIBSwEcAfAB9AoAAv8FAAL/
AfQBBwETAUMBbQG8AfAB9wESAQ8CEQEOAUMB7AHrARECDwESAesBEgHxAvQB8gG8AZIBBwH0Av8NAAP/
AfMBvAHxAfIB8QEHAZEBuwG8AfEB9AEHApEBuwH3AZEB7AHyAfQBvAKRAfcBvAHxA/IH9AP/DgAB/wFm
AQ0BDwEOAowBDgEUAZEBbQEQBAABEQFmAfAC/xgAAv8BHAHtA/MBvAEcAUoBcwIcBJkBGgG8AfED8wFu
AQcC/woAAv8FAAL/AfMBEgHsAfcBEgHvAfIC8AH3AeoBDwEOAkMBDwEOARABEgLsAQcB9AHzAfACBwHv
AfIB9AL/AgAD/wkAAfQB9wHtAewD7QHrAZEBuwHzAf8B8wHsAZEBuwEHAe8CkQH3AvQBvAGuAZEF7QHs
AQcH/w8AAfEBZgENAg4BEAEOAREBbQHrAW0BEwEOBAABZgHtAf8ZAAL/Au8B9AHzAfAB9AHzAW0BFAFK
AUQESgHxAf8B9AHwAfIB8wHsAbwC/woAAf8GAAL/AfMB7wIHAe8BbQEHAvIB8wH0AQcB6wEPAg4BDwFD
ARQB9wHxAfQB8gH3AQcB7wG8AfIB8wH0Av8BAAX/BwAB9AHrAZECuwKRAbsBkQG7AbwB9AEAAbwB9wEJ
AbsB8wH0AewCuwHwAfQB8gHsAZEDuwSRAbwB/xQAAQcBZgENAg4BZgGMBW0BEgETARACAAFmAWwB/xoA
Af8B8gEHAv8B8wGZAfIBcwFDARQBQwFEAhUBIwHyAfMBmQHzAv8B9wHyAf8LAAH/BgAB/wH0AfMBBwH3
AQcBvAHrAQ8B7wPxAvMB9wFDARMBEgEQAQ8BkgHwAbwB9wHtAewBBwG7AQcB8gL0Av8BAAT/BQAC/wHz
AfAB8gTxAfIBvAG7AZEB7wHzAf8B8wK7Ae0B6wFtAbsB8gH/AfIBbQHqAe8F8gPwAfQB/xMAAbwCFAFD
ARQBbAFtA5EB9wKuARICEwIUAesB/xoAAf8B9AEHAf8CAAHwAQcBcwEVAkMBSgIiAVEB8wEaAfMB/wEA
Af8BBwH0EwAB/wH0AfIBvAIHAe8BEgERAZEB6wESAfcBvAHzAe8BEgHyAfAB9wHqAUMCEwESAhECEwHq
AZIB8wH0Av8BAAP/BgAB8wHvAvcG7wH3AZEBuwGRAewC8wH3AQkEuwG8AfIB6wESAZEBuwHvA/cB7wL3
Ae8B7QEHAf8SAAG8AWwBFAFDARUBbAGuAZEBtQG7AQcB7wHtAa4BEgETAWYBFAHrAf8bAAH/AfMB/wIA
Af8BBwFzAUoBIgFEAUsBIgFEAVEB8wEHAf8CAAHzAfQB/xMAAf8B9AHyAbwB8AEHAewBEgHsAUMBDgFD
AfIB8AHzAe8B9wT0AfECEgHqAUMDDgFDAe8B8QH0Av8JAAHyAewBbAGRArsDCQHwAQkB8ALzARkBuwHs
AfcBCQK8AfMB8AG7AWwBEgGuAbsBvAK7CZEBvBIAAbwBbAEVAkMBbAGuAZEBCQEZAvQB8AGSAW0BEgFm
ARUB6wH/IQAB7wFzAUoBIgFKAXMBRAFLAVEC8RkAAf8B9AHwAbwB8AHzAQcB7QESARUBFAG8AfIBvAHw
AfEB8wLxAfIC8QH3AfEB8AHvAfAB8gHwAbwBBwHzAf8LAAK8AfEL8gHxAQkCuwG8AQAC8wH/Ae8BkQG7
AbwO8gH/EQABvAGuARIBEwIUARMBkQEJARkD/wG8AewB6gIUAesB/yAAAf8B7wJKAUQBSwFKAXMBdAFz
Ae8B8QH/GAAB/wHzAvAD9AH3AW0B7AGSAfQBvAHvAewB7QH3AbwD8AHyAfAB6wHqAfcBvAHsARIB7wHy
AfQB/wsAD/8B8wG8AbsB9wHzAgAB8wHsAbsB8AHzD/8RAAHwAZEBbQESAUMBFAHqAZEBtQEJA/8BGQHs
AeoCFAHtAf8gAAH/ARwBSgFEAiIBSgFzAXkBHAGSAQcB8wH/FwAB/wHzAbwC8AH0AfIB7wHrAfcB8AG8
AfACvAEHArwB7wHsAQcB7wEUAewBBwHyAewBEgHtAbwB8wL/GwAB8wEJAbsB7QH0Af8B6wGRAfIB8yEA
AfMBCQGRAa4BEQEVARIB6gG1AhkC/wEZAewB6gEUARMB7yEAAfMB7AEVASIBDgEiA0QBSgHtAZIB7wHz
Af8VAAH/AfQB8gHwAbwD8AH3AesBBwHwAbsC8AH0A/MB8QEHAbwB6gHrAQcB7QHyAZIB8QHzAvQB/xwA
Af8B8gG8AbQB7QHrAZEBvAH0IgAB/wHwAbwBkQEUAhUBbQHsAvcCGQG7Aa4C6gGuAfEgAAH/AfIB6wFE
AUoBRAIiARABIgFEAUoB7AGSAQcB9BQAAf8B9AHzAfECvAHwArwBkgFtBLwBuwHyBPQBCQEHAe0BbQLv
AfABvAHzAfQD/x0AAf8B9AEIAbsB9wG8AfQkAAHzAfIBvAHrARMBFQHvAuwB6gHtAQkBtQGuAuoB9wH/
IAAB/wHwAkoBSwFKASIBFQIiAUoCcwHtAe8B9BQAAf8B8wHwAfEC8gHxAvABvAHwAbwB8AG8AbsBvAHw
AvQC8gK8Ae8B6gHvAfEBvAHzAfQC/yEAAfMBvAHyAfQmAAG8AfMB7wHrARQBGQL3AeoBrgH3AbUBrgLq
AfIhAAH/AQcBRAFKAXkBSwEiAQ4BIgEQAUoCdAFzAe8B9BMAAf8B8wHxAvID8wHyAvMB8gHwDLwB6gH3
AvAC9AH/IgAB/wHzAfQnAAH0AfAB8wEJAbUB9AK1Aa4BkQK1Aq4B8AL/IAAB/wHtAUQBSwGZAXMCDgEP
ARUBSgFLAUoBcwGZAfMTAAH/AfMB8gL0Av8D9AHzAfIEvAbwA/IC7wEHAfIB9AL/TAAB/wHzAbwB8QHd
AfQBvAG1Aq4BkQHPAa4BBwP/IAAB/wHtARUCSgEQAQACDgEPASIBDwEQAUoBmQHzEwAC/wH0Bv8B9AHx
BbwB8gLzB/QB8wL0Av9MAAL/AfQBBwH0AfEC9AG1Aq4B7wH0AfIBvAH0Av8gAAH/Ae8BIgEOARQBEQFK
AXQCDgMAAXMBmQH0EgAJ/wH0AfIB8AG8AfAC8gHzAfQC/wMACP9NAAL/AfIBBwH0Af8B8wHwAfcBjAEH
Af8B9AHyAbwB9AL/IQAB7wEiAUMBdAJKAZkBIgFEARABEQFKARwBGgH0EgAB/wEAA/8BAAL/AfQB8gLx
AvIC8wL/BQAB/wIAA/8EAAT/RwAB/wH0AfEBBwHzAfQC8AHtAYwBvAL0AfEBvAH0Av8hAAHwASIBRAGZ
AUQBcwGZASIBRAFzAXQBSgEcARoB9BcAAf8C9AHzAfIC8wHyAvQB/xAABv9GAAH/AfQB8QEHAvMCBwHt
AYwBtQLzAfABvAHzAv8hAAH0AeoBSwGZAQ8BcwGZASIBRAFzARwBIgEUAfIB/xYAAv8B9AHzBfQC/w8A
CP9GAAH/AfQB8wEHAbwB8AO1Ac8BtQLwAQcBvAHzAv8hAAH/Ae8CbQEQARwBmQFKAZkBbgFKAZkBvAH/
FwAB/wT0Bf8IAAH/BgAB/wIABv9GAAL/AfMBvAIHAe8EtQMHAbwB8wL/IgAB9AG8AesBEgHsAUQBSgFz
AesBbQGZAfEB/xcAAf8C9AL/AQAC/xUABf9HAAH/AfQBvAEHAbUB7wS1Ae8CBwHyAfQC/yQAAf8B8wH/
AbwB7QHxAf8B8wH0GQAF/2QAAv8B9AHwAbwBtQEHAbUBBwG1AgcB8QH0Av8pAAH/HQAD/2YAA/8B9AHw
ArwBtQEHAbwBBwHwAfMD/7IAAv8C9AHxAbwB8QHzAvQC/7UAA/8B9AHzAfQE/7cAB///AP8A/wD/AP8A
ngAE/1wACv9TAAP/A/QD/1kAAv8F9AHzAfQC/1IAAf8C9AHyAfEC8AHxAfMB9AH/WAAB/wH0AfMD8gHx
AvIB8wH/UgAB/wH0AfEBBwLvAfcB7wG8AfMB/yAABf8D9AT/BQAC/wP0Bf8eAAEcAW4DHAFzAUoBbgHy
AfQC/1AAAf8B9AHtAgcB7QHsAfcBBwHyBf8bAAL/AfQB8wHyBfEC8wL/AwAC/wHzAfIC8QLyAfMC9AH/
HQACHAHwAuwBHAHsAXQB8QHyAfQB/ycABv8jAAH/AfABvAHvAfABBwHtAZIB7wHxBPMC9AT/FQAB/wH0
AfIB8AIHA+8D8AHyAfQB/wMAAf8B9AHwAu8BvATwAfEB8wH0Af8bAAEcAZkBvAFKAUsBHAHsAXQB8AHy
AfMB9AH/JAAC/wH0AvIB8QHyAfMB9AH/HwAC/wHzAe8BBwLyAbwBBwL3Ae8EBwLwAfEB8gLzAfQE/w4A
Av8B9AHwAe8B7AFtARIB6gRKARwB8gP/AfMB7wETAREDQwERAeoB7QEHArwB8AHxAfMC/xMABv8BHAGa
AfABSgFRAe8B7AF0AfAB8QHyAfMB9Ar/FwAD/wH0AfABBwL3Au0BBwG8AfIC9AP/GQAC/wH0AfABBwLw
AfQCvAGSAe0DkgXvA7wB8QHyAfMB9AL/DQAB/wHzAfAB7AESAW0BHAEHAxoCmQG8AfQB/wH0AewBEwFE
AUoBcwIcAnMBSgEVARMB7AO8AfAB8gH0Af8RAAL/BfQBHAGaAbwBSgFRAe8B7AF0AbwC8QHyAfMK9AL/
DQAG/wT0AbwC9wHsAZIBkQHsAZEB7QHvAQcB8QLyAfQB/xgAAv8B9AHzAfEBBwG8A/MBBwLtAe8BkgHt
AZIF7wIHAvAB8gHzAfQC/wwAAf8B8QHrAUQBeQEbAfQB8wHxArwBGgHwAfQB/wHxARIBEQFzAZkBGgG8
AwcB7wEcAXMBSgEVAW0B8QHwAQcBvAHyAfQB/xAAAf8B9ALzA/IBHAGaAQcBSgFRAe8B7AF0AvAD8Qny
AfMB9AH/DAAB/wH0AfMC8gLwAwcB9wHtAewD6wLsAW0B7ALtAQcB8AHxAfAB8wH/FgAC/wH0AfMB8gHx
AbwBBwG8AfEBBwHsAZIB7wIHAu8BBwG8A/AC8QLyAvMC9AP/CgAB9AHsAUQBeQIbAfIB9AMAA/8B8AJK
ARwBBwG8AgcB8QH0Af8B9AHxAe8BcwFLAUoB7AHyAfABBwG8AfMB/xAAAv8B9AHyA/EBHAGgAe8BSwFR
Ae8B7AF0A/AB8QLwCPEB8gL0Af8KAAH/AfQB8wHyBPEB8AEHAZIB7QLsAesC7AGuAewB6gFtAesC7AH3
AbwB8AHxAfMB9AH/EwAC/wL0AfMB8QHwAbwBBwH3AbwB9wFtAesB8QPyAfEB8gHzB/QH/woAAQcBFAF0
ARoBvAH0BwAB9AHqAUsBmQEHAfEB8wHxAQcB8AHzAf8CAAH0AbwBcwFLAUoB7wHyAbwBBwHwAfQB/xAA
Af8B9AHzAfIB8QHwARwBoAHvAUsBcwGZAewBcw3wAfEB8gHzAfQB/wgAAf8B8wHwAbwBkgLtAewB6wH3
AZIB7AJtAesCkQHtAZIBkQLtAZEC7AKuAe0B7wIHAfAB8wH0Av8QAAL/AfQB8wHyAfEB8AG8AQcB7wG8
AfQB8AHtAfQG/xcAAf8BEQFuARoBvAHyAf8GAAH/AfcBRAGgAQcBvAHyAbwB8wG8AQcB8QH0Af8DAAG8
AksBSgG8AfEBBwG8AfMB/xEAAf8B9AHzAvEBHAHDAQcBUQF0AZkB7AFzAvEC8AnxA/IB8wH0Af8HAAHv
AewBbgF0AXkCegKgAXoBeQF0AUoBFQERARUB6gHrAZIB7AEHAbwB9wLvAZIB7QH3AQcB8AMHAfAB8gHz
AfQB/w4AAf8B9ALzAfIB8QLwAfEBBwHyAvQBvAEHAfIB8QHwAgcB8AL0Af8TAAH/Ae8BRAEcAbwBBwHy
Av8FAAH0AesBmQEaAQcB8AHtAeoB8wHwAQcB8QH0Af8EAAHvAksBHAHxAQcBvAHyAf8SAAH/AfQC8wGZ
AcMBvAFzAXQBGgHtAW4C8gXxAvIH8wL0Af8FAAH/AfIBHAGZAQcCvAXwAfIB8wMbAcMBmQHsA20C7AGS
Ae8B9wHtAfcBBwHzB/IB8wH0Av8LAAL/AfQC8wHyAfEB8AEHAfcB8QP0Ae8B6gFtAewB9wHvAQcB7wEH
AfAB9BIAAfMBFQFKAZkB8AG8AfAB8wL/BAAB8QHsARsBvAHwAQcBSgFLAe8B8QG8AfEB9AH/BAAB9AFu
AUsBcwG8AQcBvAHyAf8MAAKSBRwBkgH3AhwBGgGZAXQBeQEaARwBSwHtCOwB7QHyCP8FAAH/AfMBBwG8
AfAB8wH0A/8B9AHyArwDBwHwAbwB8AEbARoBmQEcAXQBbgHqAW0B7AH3AbUB8gHzAvQD/wX0Af8LAAH/
AvQB8QEHAfcBbQESAeoBvAT0AesBQwFtAe0EBwHxAbwB8hEAAQcBEQFzAZkB8wHxAfAB8QHzAf8EAAEH
Ae8B9AHwAfQBvAFzAnQB8wLyAfQB/wUAARwCSwHvAQcBvAHzAf8MAAF0ARoEwwb0AcMCmgEaARwBdAGZ
Ae8GmQHvAXMB8w8AAfAB8QH/BgACBwG7AgcBuwG1AQcC7wGRAQcB8QIbAcMBmQFLAeoBkQHwAfIB9AH/
BAAC/wL0Af8LAAH/AfEBBwH3AuwB6wESAeoBBwT0AZIBFQFtAe0B7wG8AvIB8wHyAbwB8QH0Af8OAAHt
AUQBHAG8AfQB8wHyAfEB8gHzBP8B7QG8AfQB8gH/AfQBcwJ0A/QB/wQAAv8BBwFKAUsB7QHwAfEB9AH/
DAABmQHzBPEI8gF0AcMBHAFuAfABvAYHAbwB8QHzEAAB8wH0Af8FAAG8AfIBvAHyAfQB8gG8A/QB7wHz
AfIB8AEHARsBGgEbAaACcwEcAfEB/wUABP8KAAH/AfEDBwH3Ae0B6wFtARIB9wT0AfcBFAETAewB7wG8
AfID9AHzAvAB/w4AAe0BSgFzAfAC/wH0A/IB8wL0Af8B7AG8AvMC/wHsAZkBeQH0CP8B9AEHAUQBcwEc
AfIB9AH/DQAB7wEcA0oCSwFRAXMBdAF5ApkBeQGZARsBHAFRAUsHSgFuAfAB8gH/DwAB/wL0Af8EAAG8
AfMB8AHzAQAB8gG8AQAC/wEHAfQB/wH0AbwB/wHyAbwBBwIaApkBBwHyEgAB8QPwAgcB9wHtAesBEgHr
A/QBBwHsARMBEgHrAfcB7wHxBfQC8AH0DQAB7QFKAXMB8QIAAv8B9ATzAfIBcwGZARsB8AHzAfQB7AGZ
AZoB9AIAAf8D9APzAe8BRAFzARwB9AL/DQAC7wVRAXQBeQF6AaABwwH0AqABmQF0AXkBdAJRBUsBcwHw
AfIB/xIAAvQDAAG8AfMB8AH/AQAB8wG8AgAB8wEHAf8BAAH0AbwC/wHxAbwCBwEaARsBmgF5AQcB/w4A
Af8B8wHwAfQD8wHwAQcB7QFtARIBbQHyAfQB8QHvAQcB7wGSA/cBBwHxBfQC8QH/DAABHAFKAUsBBwQA
Av8C9ALzAXMBmQHDAbwB9AHzAesBmQGgAfQCAAH/AvQE8wHtAUQBcwG8Af8PAAHvBBsBGgQbAZoBwwHz
AZkC8wUbAxoCvAEaAfEB8AH/EgAC/wH0Af8BAAG8AfABvAHyAfQB8gG8AvMB8QG7AvMB8QEHAfMB8QEH
Ae8BBwHxAfMB8AG8AQcBmQG8AfQMAAH/AfQB8AX0AfMBBwGSAesBEgHsAfIB8AHzAfAB8wG8AfIB8AS8
AfAB8wT0AbwB8gwAAbwBSgFLAe0B/wQABf8BHAF5AcMBvAH0AfABHAEbARoDAAP/BPQB6wFKARwB8xAA
AW4BHAaSAxwBoAHzAZkBBwHvBBwBkgbtAXMB8QH/FAAC/wEAAbwB8ALyAfQB8gG8AvQB8wG7AvMB8QEH
AfMB8gEHAfABBwH0AQAB/wHyAbwCBwG8Af8LAAH/AfEB8gb0AbwB7wFtAesBvAHxAf8BvAHvAfMB8QIA
Af8B9AHyAfAB8gLxBPQBvAH0CwAB9AFKAksB8gkAAfMBdAGgARoB/wEAAbwBGwG8BgAD/wHzARQBUQGZ
AfQQAAF5CpkBoAHzAZkBoAHDAqACGgKZBe8BmQH0GAAB/wL0AfMBAAH/AfADAAG8Af8BAAL0AQAB/wLz
AfEB/wQAAbwBBwG8AfMLAAH/AfAH9AHyAfcB7AEHAfIBAAH/AfQB8QHyAf8FAAH/AfQC8wPyAfEB8AH0
DAAB7wFKAUsB6wH/CAAB9AEcAaABmQEHAf8B9AEbAf8IAAH/Ae0BRAGZARsB/xoAAQcBmgHzAXkBoAHz
ARoBwyQAAfMB8gG8AfQB/wHzAwABvAH/AQAC9AEAAvEBvAHzAwAB/wEAAfABvAHwAfQB/woAAfMB8Ab0
AfIBvAEHAbwB8wH/AwAC/woABv8MAAH/AXMBSwFKAe8B/wcAAf8B8AKaARwBBwEAAfQIAAH/Ae8BFQFz
ARoB8wH/GgABHAGaAfMBeQGgARsBBwHDJAAB/wHwAbwB8AHzAfAD8gEHAfEB8gG8AfAB8QIHAbwB/wIA
Av8B9AHxAfIB8wH/CwAB8QHyBfQB8QHzAfQB8gHzJAAB8wJLAUQB9wH/CAAB8gF6AZoBcwG8CAAB/wEH
AREBbgEaAfAcAAIcAfMBdAGaAcMBBwEbJQAB8wK8AfIB8AG8AfIB8wEHAfIB8AEHAfEBBwHvAQcB9AL/
BPQC/w0AAfEB8wL0AfMB8gLzAfIB8QHzJQAB/wEHAXMBSwFKAW0BvAHzA/8B9AHzAf8BAAEaApoBcwHv
AfIB9AP/AfMB8QHrAUQBcwGZAfEB/xwAAhwB8gFzAXoBwwEHAfQnAAHyAfEC9AH/AQABvAH/AfIC8wEH
AfMB/xYAAfAB8wT0AfEB8gH0Av8mAAH/AbwBHAFzAUsBRAESAesC7AFtARIBvAEAAf8BGgKaAXMB6wHs
Au0B7AFtAUoBdAGZAhsB/x0AARwBdAHyAVEBeQHDAQcB9CcAAf8B8gK8AfAB8gG7AbwBBwG7AQcB8wH/
FwABvAHzAvQB8gHwAf8sAAHzApkBHAFzA0oBSwF0AZkB8wIAAbwBmgLDARoB7wHtAe8BGwHDAhsB8R8A
ARwBcwHyAUsBdAEaAQcBGykAAfABCAHwAfMCCQIHAfMZAAHxAfQC8gH0LwAB/wHyBRoCGwHyAfMDAAH0
AfEBGgEbA/QB8gHxAfIB9CAAARwBcwHyAUsBcwEaAZkBwysAAf8C9AHzAfQbAALyAfQB/zIAAf8G9AH/
BQAB/wf0Af8hAAEcAXMB8gFLAXMBGgHvAcNLAAHxAf9rAAEcAXMB8wGZARoBGwHvAcO4AAGZAXQD8wH0
AZkBoLgAAvQD8wP0/wD/AP8A/wD/AP8A/wDLAAFCAU0BPgcAAT4DAAEoAwABwAMAAeABAQIAAQEBAAEB
BgABLRYAA///AP8A/wD/AIUAIP8Bfxb/AfkBHwv/Af4BPwn/AcABBwv/AfgBHwn/AcABAAE/Cv8B8AEP
Cf8B8AEAARwK/wHgAQABfwj/AfACAAEfCf8CAAEPAv8B+QEAAQED/wHwAgABDwP/AgABfwP/AgABDwL/
AcACAAEPAv8B8QIAAQcC/wH8AgABDwP/AgABDwL/BAABPwH/AfEDAAF/Af8B8AIAAQ8C/wH4AYABAAEI
AX8B/gQAAR8B/wHxAQQCAAE/Af8B4AIAAQ8C/wH4AwABPwH+BAABBwH/AfEDAAEfAf8BwAIAAQ8C/wH4
AwABPwH+BQAB/wHxAQABgAEAAQcB/wHAAgABDwL/AfgDAAEfAfwFAAH/AfMDAAEHAf8BwAMAAX8B/wH4
AwABHwH4BQAB/wHzAgABCAEPAf8BwAMAAR8B/wH8AgABDAEfAfAFAAH/AeMDAAEPAf8EAAEHAf8B/AMA
AR8B+AUAAf8B4wMAAR8B/gQAAQcB/wH2AwABHwH8BQAB/wHzAwABDwH+BAABBwH/AfADAAE/Af4FAAH/
AfIDAAEDAfwEAAEHAf8BwAMAAR8B/wQAAQEB/wHyAQABCAEAAQMB8AQAAQcB/wHAAwABDwH/AcADAAEP
Af8B8wEAARgBGQE/AfAEAAEHAf8BwAMAAT8B/wH8AwABHwH/AfMBAAEQAQEB/wHgBAABBwH/AcACAAEB
Av8B/AMAAT8B/wHzAQABEAEBAf8B4AQAAQcB/wHAAgABAQH/AfgEAAL/AfMCAAEDAf8B8AQAAQcB/wHA
AgABAQH/AfADAAE/Av8B4AIAAQEB/wHwBAABBwH/AcEBgAEAAYEB/wHwAwABPwL/AeEBAAGAAQEB/wHw
BAABBwH/AcEBgAEAAcEB/wHwAQEBwAEAAT8C/wHgAQABgAEBAv8EAAEfAf8BwAGAAQEBgQH/AfABCwGA
AQABfwL/AcABAAGAAQMC/wHAAwABPwH/AcACAAEBAf8B+AEPAcABAAF/Av8BwAEAAYABBwL/AcACAAED
Av8BwAIAAQED/wHgAQABfwL/AcACAAEDAv8B4AIAAQ8C/wHAAgABAwP/AfABAQP/AcACAAEBAv8B4AIA
AQ8C/wHgAgABAwP/AfwBAwP/AcACAAEBAv8B+AIAAQ8C/wH4AgABBwj/AcICAAERAv8B+AIAAT8D/wIA
AQcI/wHCAgABAwL/AfgCAAF/A/8CAAEPCP8BwwGAAQABAwL/AfgCAAT/AYABAAEDCP8BwwGBARABBwL/
AfgBAAEBBP8B8AEAAQEI/wHhAQEBEAEHAv8B/AEAAQME/wHgAQABAQj/AfMBAQEQAQcD/wEAAQcE/wHg
AQABAwj/AfMBAQEYAT8D/wGAAR8E/wHgAQMJ/wHzAYMBiAE/A/8BwAE/BP8B4AEHCf8B8wHDAZgBPwP/
AeABPwT/AeABDwn/AeMB/wGYAT8D/wH8Bf8B8AEHCf8BxwH/AZwBfwn/AfABHwn/AccB/wGfCv8B+AEf
C/8BHxf/AT9e/wH8AT8W/wH4AR8Q/wHgAQ8E/wHwAQ8Q/wHgAQAE/wHwAQcC/wHfAv8BDwH/AT8I/wIA
AR8D/wHwAQMC/wHfAf8B4AEDCf8B/AIAAQED/wGAAQABHwL/AwABDwj/AfgDAAP/AgABBwH/Af4EAAE/
B/8B8AMAAX8B/wH+AgABAQH/AfwEAAEfB/8B4AMAAR8B/wH4AwABPwHwBAABAQf/AcADAAEPAf8B+AMA
AT8B8AUAAv8B/gF/A/8B4AMAAQcB/wHwAwABDwHwBQAC/wH8AX8C/wF/AcADAAEDAf8B4AMAAQcB8AUA
AfAB/wH8AR8B/wHHAX8BwAMAAQMB/wHgAwABBwHwBQAB8AExAfwBBwH4AQMBfwHAAwABAQH/AfADAAED
AfAFAAHwAQABYAEDAYABAQF/AYAEAAH/AcADAAEBAeAFAAHwBAABAQF/AYAEAAH/AcADAAEBAeAFAAHw
BAABAQE/AYAEAAH/AYAEAAHgBQAB+AUAAR8BwAQAAf8FAAHwBQAB/AUAAR8BwAQAAf8FAAHwBQAB/AFA
AwABAQEfAYAEAAH/BQAB+AUAAf4BMAMAAQEBHwGABAAB/gUAAfwFAAH+AQgDAAEDAR8BgAQAAf4FAAH+
BQAB/wEIAwABBwEfAYAEAAH+BAABAQH/AcAEAAH/AYABIQGAAQEB/wEfAYAEAAH+BAABAwH/AeAEAAH/
AcABAgFAAQEB/wE/AYAEAAH+BAABBwH/AfAEAAH/AcECAAEBAf8BfwQAAQ8B/gQAAR8B/wH4BAAB/wHz
AYQBIAHBAv8EAAEfAf4EAAE/Af8B+AQAAv8BgAERAfkC/wQAAT8B/wQAAX8B/wH4AwABAQL/AcgBgwF/
Av8EAAE/Af8EAAF/Af8B+AMAAQ8C/wHwAQ8D/wQAAR8B/wQAAX8B/wH4AgABAQP/AfABhwP/BAABHwH/
AYADAAL/AfgCAAEBA/8B8AGPA/8EAAE/Af8BgAMAAv8B/AIAAQED/wH8AR8D/wQAAX8B/wHAAgABAQL/
Af4CAAEBA/8B/AEfA/8EAAF/Af8BwAIAAQEC/wH+AgABAQP/AfwBPwP/AYACAAEBAv8B4AIAAQED/wIA
AQMI/wHAAgABBwL/AfACAAEDA/8BgAEAAQMI/wH4AgABfwL/AfACAAEHA/8BwAEAAQcJ/wEAAQMD/wH8
AgABDwP/AeABAAEfCf8BgAEDA/8B/gIAAR8D/wH4AQABfwn/AcABBwT/AgABfwP/AfwBABD/AeABAxb/
AfwBf9D/AgAQ/wGfAfwBDwL/Af4CAAF/Cv8BhwT/AQEB8AEPAv8B/gIAAX8D/wHHAf4F/wEDBP8CAAEP
A/8CAAF/A/8BAQHgAQcC/wH+AQYBAAF/Av8BAQIAAQMC/wH4AgABAwL/Af4BAAHAAQEC/wH+AQIBAAF/
Av8EAAE/Af8B8AIAAQEC/wH+AQABgAEBAv8B/AIAAX8C/wGAAwABDwH/AeADAAL/AfgCAAEBAv8B/AIA
AT8C/wGAAwABBwH/AeADAAF/Af8B+AIAAQEC/wH8AgABPwH/Af4EAAEHAf8B8AMAAv8B+AIAAQEC/wH4
AgABPwL/BAABBwH/AfQCAAEBAv8B+AMAAv8B+AIAAR8C/wQAAQcB/wHgAgABAwL/AfgDAAL/AfgCAAEf
Av8BgAMAAQcB/wHgAgABDwL/AfwDAAL/AfgCAAEfAv8BwAMAAT8B/wGAAgABAQL/AfwDAAE/Af8B+AIA
AR8C/wHBAYACAAF/Af8BgAIAAQEC/wH4AwABPwH/AfgCAAEfAv8BwQGAAgABPwH/AYACAAEDAv8B+AMA
AT8B/wE4AgABHwL/AuACAAE/Af8BgAIAAQEC/wH4AwABPwH+AQwCAAEDAv8B4AFAAQABDAE/Af8BgAIA
AQEC/wHwAwABPwH+AwABAQL/AfACAAEPAX8B/wGAAgABAwL/AeADAAE/Af8BwAIAAQEC/wH4AgABHwL/
AcACAAEHAv8BwAMAAT8B/wHAAgABAQL/AfgCAAE/Av8B8AIAAQ8C/wHAAwABPwH/AcACAAEDAv8B+AIA
AT8C/wH4AgABHwL/AfADAAE/Af8BgAIAAQMC/wH4ASABAAF/Av8B+AIAAT8C/wHgAwABPwH/AYADAAF/
Af8B/AIAAX8C/wH4AgABfwL/AeADAAE/Af8BgAMAAT8B/wH8AQABAQP/AfwCAAF/Av8B4AMAAT8B/wGA
AgABCAE/Af8B/gEAAQMD/wH+AgABfwL/AcADAAE/Af8BwAIAAQ8BBwH/Af4BAAEDA/8B/gIAA/8BwAMA
AX8B/wHAAgABDwGHAf8B/gEAAQMD/wH8AgAD/wHAAwAC/wHgAgABHwL/Af4BAAEDA/8B+AIAAT8C/wHA
AwAC/wHwAgABDwL/Af4BAAEHA/8B+AIAAT8C/wHAAwAC/wHwAQABAQEPAv8B/gEAAQ8E/wIAA/8BwAIA
AQEC/wHwAgAD/wH8AQABHwT/AgAD/wHAAgABAwL/AfwBAAGAA/8BCAEAAT8E/wIAA/8BwAIAAQcD/wEB
AYAD/wIAAX8E/wIAA/8BwAEAAQ4BDwP/AQEBgAP/AgABfwT/AgABfwL/AcABAAEPBP8BAQGAA/8BgAEA
AX8E/wIAA/8BwAEAAQ8E/wEBAYAD/wGAAQABfwT/AgAD/wHgAQABHwT/AQEBwQP/AeABAAX/AQABAQP/
AeABAAEfBP8BAQHjA/8B8AEDBf8BgAEBA/8B4AEAAR8E/wEBAfMD/wH4AQcF/wHgAQMD/wH4AQABPwT/
AQEL/wHgAQcD/wH4AQABPwT/AcML/wH8AR8D/wH4AQABfwT/AccR/wEDd/8B4AE/EP8B/gE/BP8BAAED
EP8B/AEfBP8BAAEBCv8B4AEAAT8D/wH4AQ8D/wH+AgABfwn/AYABAAEPA/8B+AEHA/8B/gIAAX8D/wHg
AQME/wIAAQMD/wGAAQABfwP/AgABfwL/AfgCAAEPAv8B/gMAAX8C/wIAAT8D/wIAAX8C/wHwAgABBwL/
AfwDAAE/Af8B/gIAAQ8D/wGAAQABfwL/AeACAAEBAv8B+AMAAR8B/wH4AgABAwP/AgABfwL/AcADAAF/
Af8B+AMAAQcB/wH4AgABAQP/AYABAAF/Av8BgAMAAT8B/wH4AwABBwH/AfgCAAEBA/8BwAEAAR8B/wH8
BAABHwH/AfgDAAEDAf8B4AMAAX8C/wHAAQABDwH/AYAFAAH/AfADAAEBAf8BwAMAAT8C/wGAAQABBwH/
AYAFAAH/AeAEAAH/BAABDwL/AwABfwGABQAB/wHABAAB/gQAAQEB/wHwAwABPwYAAf8BwAQAAf4FAAH/
AfADAAEHBgAB/wHABAAB/gUAAf8B8AMAAQcGAAH/AYAEAAH/BQAB/wHwCgAB/wGABAAB/wHAAwABAQH/
AfgKAAH/AYADAAEBAf8EAAE/Af8B+AoAAf8BgAMAAQMB8AQAAT8B/wH4CgAB/wGAAwABAwHwBAABHwH/
AfgKAAH/AYADAAEHAfgEAAEPAf8BwAkAAQcB/wGAAwABHwH+BAABDwH/AcAJAAEDAf8BgAMAAT8B/wHA
AwABPwH8AUAJAAEDAf8BgAMAAX8B/wHAAgABBwH/AfwDAAEBAeAFAAEDAf8BgAMAAv8B4AIAAQcB/wH+
BAABeAUAAQcB/wHAAwAC/wHgAgABBwH/AfwEAAF/AYAEAAEHAf8BwAIAAQEC/wHwAgABDwH/AfwEAAE/
AYEDAAEBAR8B/wHAAgABAQL/AfACAAEPAf8B+AQAAT8BgQMAAQEBHwH/AeACAAEDAv8B+AIAAQ8B/wH4
BAABPwGDAYACAAEBAe8B/wHgAgABAwL/AfwCAAE/Af8B8AQAAT8B/wHAAgABAQL/AfgCAAEHAv8B/AIA
AX8B/wHwBAABHwH/AcACAAEBAv8B+AIAAQ8C/wH+AgABfwH/AfAEAAEfAf8B4AIAAQEC/wH8AgABHwP/
AcABAwL/AfAEAAEfAf8B+AIAAQMD/wIAAX8D/wHwAQ8C/wHwBAABHwH/AfgCAAEDA/8BgAEABP8B/AEP
Av8B8AEHAfABEAEAAR8B/wH4AgABBwP/AeABAwT/Af4BHwL/AfABHwH/AX4BAAEfAf8B/AIAAQ8J/wH+
AR8C/wHwAT8C/wHIAT8B/wH+AgABPwn/Af4BHwL/AfgBfwL/AfgBPwL/AgABfwr/AT8K/wH4AR8L/wE/
rP8B4AEfFv8BgAEDFf8B/gIAAX8D/wHgAQcP/wH8AgABfwP/AeABAwr/AfABAwP/AfwCAAE/Av8B8AEA
AQMK/wHAAQED/wH4AgABHwL/AcABAAEBAcABPwH/AfwBHwHzBP8BgAEAA/8B+AIAAQ8C/wHAAwABPwH/
AfwBDwHABP8CAAP/AfgCAAEPAv8BwAMAAR8B/wH4AQcBgAF/A/8CAAP/AfACAAEPAv8BwAMAAQ8B/wH4
AgABfwP/AgABfQL/AfACAAEPAv8BgAMAAQMB/wH4AgABfwL/AcADAAL/AeACAAEPAv8EAAEBAf8B+AIA
A/8BgAMAAv8B4AIAAQcB/wH+BQAB/wH4AQABAQP/AYADAAL/AcACAAEHAf8B/gUAAf8B/gEAAQMD/wGA
AwAC/wHAAgABBwH/Af4FAAL/AQABAQH/AfkB/wGAAwAC/wHAAgABAwH/Af4FAAH4Af8BwAEAAR8B4AH/
AYACAAEBAv8BwAIAAQMB/wH8BQAB8AF/AgABDwHgAf8BgAIAAQEC/wHAAgABAwH/AfwFAAHwAT8BAAEg
AQcBwQH/AYACAAEBAv8BwAIAAQcB/wH8BQAB+AIAATABAAEBAf8BgAIAAQEC/wHAAgABBwH/AfwFAAH8
AgABHgEAAQEB8AQAAQ8B/wHgAgABBwH/AX4FAAH+AgABHwGAAQcB8AQAAQcB/wHgAgABBwH/AR4FAAH/
AQABAwEHAcABBwHwBAABDwH/AeACAAEPAf8BHgUAAd8BwAEDAYMBwAEHAfgEAAEPAf8B4AIAAQ8B/wEe
BQABzwHgAQABQwGAAQ8B+AQAAR8B/wHgAgABDwH/AR4EAAEGAcMB8AMAAQ8B/AQAAR8B/wHgAgABDwH/
AR4EAAEGAeMB/AEAARABAQEfAfwEAAE/Af8B8AIAAQ8B/wEeBAABDgHzAfgBPwH4Ah8B/gQAAT8B/wHw
AgABDwH/Af4EAAEOAvABOQGcAQ4BPwH+BAABPwH/AfgCAAEPAf8B/gQAAT4B8AFgAXgBHgEMAT8B/gQA
AT8B/wE4AgABHwL/BAABPgH8AQEB/AE/AQABfwH/AYADAAF/Af4BCAIAASABfwH/AYADAAE+Af4BAQHw
AQ8BgAL/AcACAAEBAf8B/AEEAgABIAE/Af8BgAMAAT8B/gEBAfABDwGAAv8B4AEgAQIBAwH/AfwBBAIA
AUABPwH/AcADAAL/AQMB/AF/AcAC/wHAASABAAEHAf8B+AEGAgABwAE/Af8B4AIAAQEB/wH+AQEB/AF/
AYAC/wHAASABAAEHAf8B+AEHAQABAQHAAT8B/wHwAgABAQL/AQAB/gF/AQEC/wHAASABDAEHAf8B/gEH
AeAB/wHgAX8B/wHwAgABDwL/AYgBPwH+AR8C/wHgATABHgEHAf8B/gEPAfwBfwH4Av8B8AIAAQ8C/wH8
AQcB8AE/Av8B4AE8AR4BBwL/AR8B8AEfAfkC/wHwAgABDwP/AQMBwAF/Av8B4AF/Af4BDwP/AfABHwP/
AfgCAAEfA/8B8wGDA/8B+AL/AQ8D/wHgAQ8D/wH4AgABPwT/Ae8K/wHgAQcD/wH4AgABPw//AeABBwP/
AfgCAAF/D/8B4AEHA/8B/AIAEP8B4AEPA/8B/gEAAQEQ/wHwAR8E/wEAEf8B+AE/BP8B53H/AcABPxX/
AfgCAAF/Av8BuwL/AfEO/wHgAgABHwL/AaEC/wHBCv8B/gF/Av8BwAIAAQ8C/wGBAv8BwAj/AfACAAEf
Av8BgAIAAQEC/wGAAX8B/wEAAX8H/wHwAgABHwL/BAAC/wGAAT8B4AEAAT8B/wH+Af8B/AF/Av8B8AIA
AQ8C/wQAAT8B/wHAAT4CAAE/Af8B/AEDAYABfwL/AfACAAEHAf8B/gQAAR8B/wHAAwABPwH/AfgBBwHA
AR8C/wH4AgABAQH/Af4EAAEfAf8BwAMAAR8B/wHwAQcBwAEPAv8B+AMAAv8EAAEPAf8BwAMAAR8B/wHg
AQcBwAEPAv8BwAMAAQMB/wQAAQcB/wHAAwABDwH/AcABBwHAAQcC/wHAAwABAQH/BAABBwH/AcADAAEP
Af8BwAEHAcABAwL/AcAEAAH+BAABBwH/AcQDAAEPAf8BgAEHAeABAwL/AcAEAAH+BAABBwH/AcADAAE/
Af8BgAEHAeABAQL/AcAEAAH+BAABBwH/AcADAAE/Af8BAAEHAeABAQL/AcADAAEDAfwBIAIAASABDwH/
AYADAAL/AQABDAEQAQEC/wHAAwABBwH8BAABDwH/AYACAAEBAf8B/gIAARABAAL/AcEDAAEPAfwEAAEf
Af8BgAIAAQMB/wH+AQABEAIAAv8BwQHgAgABDwH8BAABPwH/AYQCAAEDAf8B/gEAASACAAH/AfABAwHg
AgABBwH8BAABfwH/AYQCAAEBAf8B/gQAAf8B4AQAAQcB/AMAAQEC/wGAAgABAQH/Af4EAAH/AfABAgMA
AQcB/AEwAQABQAFhAv8BgAIAAQEB/wH+BAAB/wHwAQMB4AGMAQABfwH8ATwBAAFgAcEC/wGAAgABAQH/
Af4EAAH/AfgBQQHhAQwBHwF/AfwBPwEwAWcB4QL/AYACAAEBAf8B/gQAAv8BwQHiATwBPwH/Af4BHwL/
AcEC/wGAAgABDwL/AwABAQL/AcABxwEYAT8B/wH+AR8C/wHBAv8BhAIAAS8C/wMAAQEC/wHgAccBAAE/
Af8B/gEPAv8BgQL/AYACAAEvAv8DAAEBAv8B8AFPAZABfwL/AQ8B5wGfAYMC/wGHAgABHwL/AYACAAEB
Av8B8AEHAYABfwL/AQMB5wEeAQcC/wGGAgABGQL/AcACAAEDAv8B+AIAA/8BgQHnAR4BDwL/AYYCAAE5
Av8BwAIAAQEC/wH+AQABAQP/AcAB5wEcAQ8C/wGGAgABOQL/AcACAAEBAv8B/AIAA/8BwAEnAQABHwL/
AYQCAAE/Av8BwAIAAQEC/wH4AgABfwL/AeABBwEAAT8C/wGAAQABAQE/Av8BwAIAAQEC/wH4AX8B8AF/
Av8B+AEHAQABfwL/AYABNgGBAb8C/wHAAgABAQL/AeAB/wH4AT8C/wH8AQcBAQP/AYAB9gGRAb8C/wHA
AgABAwL/AeAB/wH8AT8D/wIHA/8BgQH3AZED/wHAAgABAwL/AfAL/wHHAf8B8wG/Av8BwAIAAQcO/wHH
Af8B+wG/Av8B4AIAAQcO/wHHBf8B4AIAAQ8U/wH4AgABDxT/AfgCAAEfFP8B/AIAAX8V/wHAAQMW/wH8
AZ98/wHgAQcP/wHgAT8B/wGBA/8BwAEDCv8B/AEfA/8BwAEfAf8BAQP/AYABAwr/AeABAAP/AYABBwH+
AQAD/wEAAQEF/wHwAX8D/wIAAQMC/wIAAf4BAAE/Av8BAAEBBf8BwAFgAX8C/wIAAQEC/wIAAf4BAAE/
Av8BAAEBBf8BgAEAAT8C/wIAAQEC/wGAAQABPAEAAR8C/wEAAQED/wH+AQcBgAEAAT8B/wH+AwABfwH+
BAABBwL/AQABAQP/AfwBAQGAAQABPwH/Af4DAAF/Af4EAAEHAf8B/gIAA/8B+AEAAYABQAE/Af8B/gMA
AT8B/gQAAQcB/wHwAgABHwL/AcABAAGAAQABfwH/Af4DAAE/AfwEAAEHAf8B4AIAAQ8C/wHAAQABQAEA
A/8DAAE/AfgEAAEHAf8BwAIAAQ8C/wGAAQABfgEDA/8B4AIAAT8B+AQAAQcB/wHAAgABBwH/Af4CAAE8
AQMD/wHwAgABPwHwBAABBwH/AYACAAEDAf8B/gIAARgBAwP/AfACAAEfAfAEAAEDAf8BgAIAAQMB/wH+
AwABAwP/AfwCAAEfAfAEAAEDAf8DAAEBAf8B/AMAAQED/wH8AgABDwHwBAABAwH/AwABAQH/AfwDAAEJ
BP8CAAEPAfgEAAEBAf4DAAEBAf8B+AMAAQ0D/wHwAgABDwH4BAABAwH+AwABAQH/AfgDAAEEA/8DAAEP
AfwEAAEBAf4DAAEBAf8B+AMAAQQD/wMAAT8B/gUAAf4DAAEBAf8B+AQAA/8CAAEBAf8B/gUAAfgEAAE/
AfgEAAF/Av8BgAEAAQMB/wH+BQAB+AQAAT8B+AQAAT8C/wHkAQABDwH/Af4FAAH4BAABPwH+BAABPwL/
Af4BAAE/Av8EAAEHAfgEAAE/Af8EAAE/Av8B/gFwAT8C/wGAAwABDwH4BAABPwH/AcADAAF/Av8B5AFw
AT8C/wGAAwABDwH8AQ8BgAEBAcABfwH/AfgDAAF/Av8BgAEAAT8C/wHAAwABHwH8AQ8BgAEHAcABfwH/
AfgDAAF/Av8CAAE/Av8BwAMAAT8B/gEHAYABBwHAAX8B/wH+AwABfwL/AgABPwL/AcADAAE/Af4BBwHA
AQcBwAP/AYACAAF/Af8B/AIAAX8C/wHgAwABHwH+AQcBwAEPAcAD/wHgAgABfwH/AfgBAAT/AeADAAE/
Af4BAwHgAQ8BwQP/AfACAAF/Af8B8AEABP8B8AMAAT8B/wGDAfABHwGBA/8B/AIAAv8B4AEDBP8B+AMA
Av8BwQH4AT8BAwP/AfgCAAL/AeABAwT/AfgCAAEDAv8BwQH5Af4BAwP/AfgCAAL/AeABBwT/AfgCAAEP
Av8B8AH/Af4BDwP/Af4BAAEBAv8B+wEPBP8B/AIAAQ8C/wH4AT8B8AEfBP8BAAEBCP8B/AIAAQ8C/wH4
AR8B8AF/BP8BwAEDCP8B/AIAAR8D/wEfAeMP/wH+AQABwAF/Ff8BAAH9Fv8BAJf/AfYX/wHAAT8H/wGB
AfMBzwH/AX8J/wH+AQABPwb/Af4BAAEhAQcB/wE/Af8B5wL/AecE/wHwAQABHwL/Af4D/wH+AQABQAED
AccBPwH/AcMB/wF/AeME/wHAAQABHwL/AfwBPwL/Af4BAQEAAQMBgQG/Af8BxwH8AR8B8QT/AYABAAE/
Av8B/AEfAv8B/AEDAQABAwGAAd8B/wHDAfwBHwHhBP8CAAE/Av8B/gEfAv8B/AEHAQABAQGAAV8B/wGH
AfABBwHhBP8CAAE/Av8B/AEfAv8B+AEBAgABwAFfAf8BgwIAAeAD/wE+AgABPwL/AfwBDwL/AfgDAAGA
AR8B/wEDAgABQAL/Af4DAAE/Av8B/AEfAv8B+AQAAR8B/wQAAv8B8AMAAT8C/wHgAQMC/wH4BAABPwH/
BAABfwH/AeADAAE/Av8B4AEAAv8B+AQAAT8B/wQAAX8B/wHgAwABPwH/AfgCAAEBAf8B+AQAAT8B/wQA
Av8BwAMAAT8B/wHAAwABfwH4BAABPwH/BAAC/wHgAwABPwH/AcADAAE/AfwEAAE/Af8BgAMAAv8BwAMA
AT8B/wGAAwABDwH+BAABPwH/AcADAAL/AYADAAE/Af4EAAEBAf8EAAF/Af8BwAIAAQEB/wF/BAABPwH+
BQAB/wHAAwAC/wHAAgABAQH/AX8EAAF/AfwFAAH/AfgCAAEPAv8B4AIAAQMB/wE+BAABfwH8BQAB/wH8
AgABHwL/AeACAAEDAf8BPgQAAWMB/gQAAQEB/wH8AgABPwL/AeACAAEDAf8BfgQAAUEB/AEAASACAAE/
Af8B/AIAAT8C/wHwAgABBwH/AX4EAAEhAfAEAAEfAf8B/AIAAT8C/wHwAcABAAGPAf8B/gQAASMB8AQA
AQ8B/wH8AgABPwL/AfgBwAEBAY8B/wH+BAABPwHgBAABDwH/AfwCAAE/A/8B4AEDAv8B/gQAAf8B4AEA
AQICAAEHAf8B/AIAAT8D/wHAAQEC/wH+BAAB/wHgAQABAQGAAQABBwH/AfwCAAE/A/8BwAEAAv8B/gQA
A/8B4AEHA/8B/AIAAX8D/wHAAQABfwH/AfwDAAEBA/8B4AEPA/8B/AIAAX8D/wGAAQABfwH/AfgDAAEB
A/8B8AEfA/8B/gIAAX8D/wGAAQABfwH/AfgDAAEHA/8B/AE/BP8CAAT/AYABAAF/Af8B8AMAAQ8D/wH8
AX8E/wIAAX8D/wGAAQABfwH/AfADAAEPCf8CAAF/A/8BgAEAAX8B/wHwAwABHwj/Af4CAAF/A/8BgAEA
AX8B/wHgAQABAQHAAT8I/wH+AgABfwP/AcABAAF/Af8B6AGAAQcB2AHwCP8B/gIAAX8D/wHAAQABfwL/
AQABHwH/AeABfwf/Af4CAAF/A/8BwAEAAX8B/wH+AQABPwH/AYABfwf/Af4CAAF/A/8BwAEAAv8B/gEA
AX8BvwFgAX8H/wH+AgABfwP/AeABAAL/Af4BCQL/AfABfwj/AgABfwP/AfgBAwL/Af4BDwz/AgAF/wG/
Av8B/gE/DP8CABb/AcABAxb/AeABBxb/AfABH7L/AfAL/wHwAQMK/wGAAT8K/wHgAQMK/wEAAR8K/wHg
AQMK/wEAAR8D/wHgAQEB8AEDA/8B8AEACv8BAAEBA/8BwAEAAeABAQP/AfABAAT/Af4BBwT/AgABDwL/
AYABAAHgAQABfwL/AfABAAF/A/8B+AEBA/8B/AMAAX8B/gQAAR8B/wH8AwABHwL/AcABAAEPAv8B+AMA
AT8B/gQAAQ8B/wH4AwABBwH/AcACAAEPAv8B8AMAAR8B/gQAAQcB/wH4AwABBwH/AYACAAEHAv8B4AMA
AQcB/gEBAcACAAEHAf8B+AMAAQMB/wMAAQEC/wHAAwABBwH+AQcB8AEAAcABAwH/AfwDAAEDAfwEAAE/
Af8BwAEAAQEC/wH8AQcB4AEAAXABAwH/Af4DAAEBAfwEAAEPAf8BwAIAAT8B/wH4AQMB4AEAAXgBAwL/
AwABAQHwBAABAQH/AcACAAEfAf8B+AEBAeABAAF4AQMB/wHAAwABAQHwBQAB/wHgAgABDwH/AfgBAQHg
AQABfAEDAf8BwAIAAQEB/wH8AX4CAAEBAeAB/wHgAgABAQH/AfgDAAHwAQMB/wHAAgABAQH/Af4BPgIA
AQEB8AH/AcACAAEBAf8B+AQAAQcB/wHAAwAB/wH+AR4BEgIAAv8BwAMAAf8B+AFgAQABBgEAAQcB/wHA
AwAC/wHOARMBEAEAAT8B/wQAAX8B+AF4AQABBgEAAR8B/wHAAwAC/wHCAwABHwH+BAABfwH4ATwBAAEO
AQABPwH/AcADAAL/AfICAAEIAQ8B/gIAARgBAAE/AfgBPwHgAY8BwAE/Af8BwAIAAQEC/wH+ARMBkgIP
Af4BAAEEAR8BAAE/AfwBHwHgAQ8B8AE/Av8B8AEPBP8BAwGSAR0BBwH+AQABBwE/AfABPwH8AQ8B4AFf
AeABPwL/AfABDwT/AgABGAEPAf4BAAEfA/8B/gEHAfgBPwHAA/8B8AEPBP8BgAIAAT8B/gEAAT8D/wH+
AQABBAIAA/8B8AEPBP8B4AGAAX8B/wH+AQABPwT/AQABBAEAAQED/wHwAQ8E/wHgAQAC/wH+AQMF/wHA
AQMBAAEHA/8B8AEPBP8B+AEDAv8B/gEPBf8B4AEDAYABDwP/AfABDwT/Af4BDwL/Af4BHwX/AfgBBwHA
AR8D/wHwAQ8I/wH+AX8M/wHwAQ8W/wHwAQ8W/wHwAQ/4/ws=
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4
fQAAAk1TRnQBSQFMAgEBDAEAASgBAAEoAQABOAEAATgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwAB4AMAAeADAAEBAQABCAYAAcQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AOgAC9AP/AQAD/wEAAv8CAAL/BgAC/wIAAf8CAAL/AQAE/wIA
A/+3AAG8Au8B8gL/AvQC/wL0Av8C9AL/AgAC/wH0A/8B9AL/AfQC/wT0Av8C9AL/ewAy/wkAAfMC8AEH
AfMB8QIHAfAB8gG8AQcC8QIHAfMB/wIAAf8B8AEHAbwB8QG8AQcB8wG8AQcBvAHxAbwDBwG8AfEBvAEH
AfAB/3oAAf8B8wG8AfQB/wHxAbwB8gHxAQcB8QHwAQcD8AHxAQcB8wH0AfEB8gHzAfAC8QHwAvMBvAHx
Af8B8QG8AfABBwHxAf8B8wHwA/EB9AHxAQcC8wHwAfIB/wkAAf8B8AH0AQcB8wHwAfQB8QHwAfIB8QHy
AQcB8QHyAe8B9AH/AgAB/wHwAfQCBwHyAe8BvAHyAfABvAHxAvIBBwG8AQcB8QHyAQcB8QH/egAB/wHx
Ae8B8gH/AfEBBwHzAfAB9wHzAQcB7wHyAvEBBwGSAfECvAHxAQcB8QH0AfMB7wEHAbwBBwG8AfABBwLy
Ae8B8QHyAe8B8gH0AfEB7wIHAe0B8gK8AfQB/wkAAf8B8AH/AQcB9AHxAf8B8QHyAfQB8QHzAQcC8wHv
Af8EAAHxAf8CBwH0Ae8BvAH0AvAD8gEHAfQB/wLzAe8B8nsAAfQB8AEHAbwB9AHyAQcB8QEHAZIB9AEH
AfcB8QHzAfQBvAHtAgcB8wHyAe8B9AEAAf8B8AIHAu8BBwHyAf8B8wHvAvEB9wH/AQAB9AHwAQcBvAHs
AgcB9AH/CgAB/wHwAf8BBwH0AfEB/wHxAfIB9AHyAfMBBwLzAe8E/wEAAfEB/wIHAfQB7wG8AfQC8ALy
AfMBBwH0Af8C8wEHAfIKAAL/AvQX/wL0Av8BAAX/AQAC/wH0Av8BAAP/AQAE/zwAAf8B8gHvAfMBvAHz
AfEBvAIHAZIB9AG8AgcB8gH/AfACBwHvAfIB8wHvAfQBAAH/AfEBvAEHArwBBwH/AQAB8wHvAfIB9AGS
Af8BAAH0AfECBwHvAQcB7wHyAf8KAAH/AfAB/wEHAfQB8QH/AfEB8gH0AfIB8wEHAvMB7wH0AfEB7wEH
Af8B8QH/AgcB9AHvAbwB9ALwAvIB8wHtAe8B8gLzAQcB8goAAf8BvAHvAQcB9wHxAbwB9wPvAfEBkgH3
Ae8BBwHzAQcB9wG8AfMB9wLvAfcB8ATvAfMB/wHxAZIB7wHzAv8BBwHvAgcB8gH0AQcB9wHyAf8CBwH0
Af88AAH/AfEB8AH/AfEBvAHwAbwB9AHxAZIB9AG8Ae8B8wHyAf8B8AGSAfMCBwHxAfcB8QL/AbwB8QHw
Ae8BBwHvAfMB/wHzAe8B8gHwAe0B8wH/AfQBvAHxAbwB7AHzAe8BvAH/CgAB/wHwAf8BBwH0AfEB/wHx
AfIB9AHyAfMBBwLzAe8B9AHyAfAB8gH/AfEB/wIHAfQB7wG8Af8C8ALyAfQB7wHxA/MBBwHyCgAB9AHw
AfQB/wLvAfMBvAH0Af8B8AH/AQcB8QH0AQcB8QHzAQcC9AEHAfIB/wHyAfEB8AL/AfAB8QH/AQABBwHw
Av8BvAEHAv8B8wEHAfMB8QHvAf8B8AG8AfQIABD/AQAF/wIABv8CAAX/AQAJ/wYAAf8B8gHvAfAB/wH0
Au8BBwHyAfAB9wHyAQcB9wHwAQcB8gEHAfcB8AEHAfEB9AHxAQcB8gHwAbwB8wHxAe8CvAEHAfMB8gHv
AfAB8wHwAbwB8gLwAfQBvAHtAfABBwHyAf8KAAH/AfAB9AEHAfQB8AH/AvEB9AHxAfQB7wHyAfMB7wH/
BAAB8QH/AQcB7wH0AQcB7wH/AvAC8gHzAQcB8gPzAQcB8gH/CQAD/wHzAe8BvAH0AQcC8gHzAQABBwHx
AfQBvAHyAfMBBwL0AQcB8AHzAfAB/wH0Af8B8gG8AfIB/wEAAQcB8QH/AfQBvAHyAgAB/wLwAfEB7wHy
AQcB8gH/CAAB9AHzAvIC8wL0AfMC8gH0Af8B8wHyAfQB/wHzAfIB8QHzAv8BAAH/AfMC8gHzAf8BAAH/
AfQD8gH0Af8B9ALyAfMC9AHzAfIB9AH/BQAB/wHzAfIB8wH/AfQC8QHyAfMC8gHzBPIB8wHyAfEB8gHz
Af8BAAH/AfMC8gL/AfMB8QHyAf8B8gHzAfIB8QH0Av8C8gHzAf8B9AHyAfEB8gHzAf8LAAH0AbwB9AEH
AfMBvAH/AfEBvAHyAfEB9AHvAfQB8wEHAf8DAAH/AbwB/wHwAQcB9AHwAe8B/wPxAvMB7wIHAfEB9AEH
AfAB/woAAfQBvAHvAfIB/wH0AQcBvAEHAfIBAAIHAbwBBwH0AfMBBwL0AgcB8AHvAf8B9AG8AQcB8QL/
AQABBwHxAf8B8gHvAfMCAAH/A/EB7wHwAbwB8QH/CAAB9AG8AgcB8AEHAbwB8gMHAfMB8QEHAbwB8wHx
AQcBvAHwAbwB8QH/AQAB9AHwAgcB8QL/AfIBBwHwAfECBwLyAQcB7wG8AfIB8AEHAfAB9AH/QwAB/wHz
AfQB8wH0AfMC9AHzA/QB8wP0Af8DAAH/AfMB9ALzAfQC8wb0A/MC9AHzAfQB/wkAAf8B8AG8AfMD9AEH
AvQB8wH/AQcBvAHxAQcB9AHzAQcC9AEHAfIB/wHxAf8CBwP0Av8BBwHwAf8B8wG8AfEC/wH0AQcB8gHx
Ae8B/wHwAbwB/wkAAfEB8gHwAfQB8AEHAfQC8QHwAfMBvAHwAvQB8AEHAfQB/wHzAbwB9AEAAf8B9AK8
Af8BAAHzArwB9AH/AfMB8AHvAfQB8AEHAfIB8QHwAfEB/3gAAf8B8gG8AfIBBwHxAfIBBwLwAQcB9AIH
ArwB9AHxAbwB8gHzAe8BvAHxAQcB9AIHAfICBwG8AfEB7wEHA/ABBwLyAQcB8AH0AfAB7wHyAQcB8AH/
CQAC8gG8AfMCvAH0AvEBBwK8AfMB/wH0AfIBBwH/AQAB/wG8AfQCAAH0AbwB8AL/AbwB8QHwAf8BAAH/
AfEBBwHyAfACBwHwAQcB/3kAAv8B8gLwAfQB8wLyAfEB8gH/AvEB8gL/AfMC8gH0AfEB8gLxAv8B8QHw
AfEB8gHwA/IB8QHyAf8B9AHxAfAB8wL/AfMC8QHzAf8KAALyAe8BvAEHAfMB/wLxAQcB8AEHAfQB/wH0
AfIBBwH/AQAB/wG8AfQCAAH0AbwB8AL/AbwC8QH/AQAB/wLxA/ADvAH/tAAC8gEHAbwBBwHyAf8C8QHw
AfEBBwHwAf8B9AHyAQcB/wEAAfQBBwHzAv8B9AG8AfAC/wG8AvAB/wEAAf8B8QHwAfIB8QG8AvEBBwHy
HQAC/wH0AfID8QHzA/8rAA3/UwAB/wHxAfIBvAHzAbwB8QH/AvEB8AHzAbwB8QH/AfMB8gHvAv8B9AEH
AfIBvAHyAfMBvAHwAfQB8QEHAfABBwH0Af8B8QHwAQcB9AHwAQcB8gLxAfIZAAL/AfQB8gEHAewBEgEV
AUMBEAERARQBbQHtAbwB8wL/JQAE/wH0AfEBvAHvAZIB7QHsAe0B9wEHAfAB8wH0Av9QAAH0AbwB8AHv
AQcB8AHzAfQBvAHwAQcBvAHwAfMB9AG8AfAB7wHyAfQB8QEHAfABBwHvAbwCBwK8AfMB8QK8AfABvAHx
AfQB8wG8AgcBvAHwAf8XAAL/AfQB8AHtAeoDEgETARQBFQNDAREBQwESAZIB8QL/IgAC/wH0AfEBBwHs
AW0BEwFDAhEBEAIPARABQwHqAe0BvAH0Av9OAAH0BPMB9AH/AfQB8wHyAvMB9AH/AfQB8wHyAfMC9ATz
AfID8wLyAv8B8wLyAfMC/wXzAf8XAAH/AfQB8AH3AuwB7QLsAesB6gESAxQCFQFDAREBEAETAe8B8gH/
HwAD/wHyAe8B7AFtAuoBEgETAhUCEQMPAQ4BDwFDAesBBwH0Af8pAAP/AQAD/18AAf8B8wEHAfcB7wEH
Au8B7QLsAesB6gESARMDFAEVAkMBEQFDAesB8AL/HQAB/wH0AQcB7QPsAesCbQHqAm0B6gESARUBQwEQ
AQ8DDgFDAewB8gL/HAAC/wcAAv8B8wHxAf8BAAH0AfEB8wH0Av8GAAL/UwAB/wHzAe8BBwS8AQcB7wL3
AewB6wFtAeoBEwMUARUCQwEQAREB6gG8Af8cAAH/AfMB7wHtAfcCkgPtAewBbQESAkQBEgHqAewB6wES
AREBDwIOAQ8BbQHwAf8cAAHzAfIB/wQAAf8B9AEHAesBSgHrAfMBAAG8ARQBEgHsAQcB9AH/BAAB/wG8
Af9SAAH/AfQB7wEHBPAC8QEHAbwB8AG8Ae8B7QFtAhIDFAEVAkMCEQEUAbwB/xoAAf8B8wL3A+8CBwHs
AUQCHgYLAREBbQHsARUBDwMOARQB8AH/GwAB8wHsAfMB/wIAAf8B8AFEAiMBIgFtAfMBAAEHAyIBEAHr
AfEB/wMAAfMB7AH/UQAB/wH0AfcBvAHxAvAB8QHyAbwB8QH0A/8BAAH/AQcB6wHqARICFAIVA0MBEQEU
AfIB/xgAAf8B9AL3AgcCvAGTAUUB6QEBAR8DAQIeBAsBDwHqARMBEAMOARQB8QH/GgAB/wFKAe0B8QL0
ARwBIwFLAUUCIwFtAfMB/wEHBSIBFAEHAvQB8QHrAe8B/1EAAf8CBwHwBPEB8AHzA/8EAAH/AfIB7AHq
ARMDFAIVAkMBEQFtAfMB/xYAAv8B7wHsAe8BBwG8AQcBbwJFA+kDHwIBAUQCHgMLAUMBFAEQAw4B6gHz
Af8XAAH/AQAB/wEcAUQBEgHrAW0FSwEjAUoB8QH0Ae8EIgJDAUQB6wFtARQB6wHzAgAB/ycABv8hAAH/
AfIB9wLwAvEB8AHxAfQC/wcAAf8B8QHrARIBEwMUARUDQwERAfcB/xYAAf8B8AHsAe0B9wIHAW8CRgIg
BOkCRgFFAUQBIwIeAwsBEAFDARADDgHsAfQB/xUABP8B8wFzAiMBSgF0AZMBHAFSAksBSgHsAe0BEgIi
AUQBbgHsAW4BRAIiAW0BvAH/AQAD/xsAAv8C9AL/AgAD/wHzAfIB8QHyAfMB9AP/HgAB/wHvAQcBvAHw
AfEBvAHxAfQC/wkAAf8B7wFtARIBEwMUAhUCQwESAfEB/xQAAf8B8wHsAesB7ALvAW8CRgMgAekCRQFG
AUUCRAFDAgsCHgMLAQ4BDwMOAUMBvAH/FQAB/wG8AfMC/wHyAW4BRAFzAbwC8QGZAUwBSwFzAhwBbQIi
AW4BvAHyAfAB6wEiAUQB7wH0Av8B8wHxAf8aAAH/AfMBBwH3Ae0B7wHyAf8B9AHxAQcB7QFtAxIBbQHs
Ae8B8QH0Av8bAAH/AfIB7wK8A/AB8wL/CwAB8gHsAW0BEgETAxQCFQFDARUBkgH/FAAB/wEHAW0B6wHt
Ae8BbgFFAUYBQAMgAekBHgJFAUMCAAEOAQsBAQJEBAsBDgEPAw4B6wH0Af8UAAH/Ae8B7QHyAfQB8wHs
AUoBBwHyAvQB8AJLAXMB9wHvAewBIgFEAe0B8gL/AfIBEgFEAe8B9AH/AfEB7AHzAf8WAAL/BPMB8gEH
AW4BRAFtAe8B6wESARUBEQEQAhEBIgEQAREBFQESAe0B8AH0Af8aAAH/AQcB9wEHAbwB8AEHAfMC/wwA
Af8B9wHrAW0BEgEUAhMBFAIVAUMBbQHzAf8SAAH/AfMB7AHqAesB7wFuAUUB6QIgASUBIAElAUUDRAEO
AgsBAAEeAR8BRQERAR4ECwQOARUBvAH/FQAB8wJKAewB6wFEAewB8QH0Av8B8wNLAVEBcwFEASMBSgHv
AfMD/wEHASIB6gHsAesBEgEcAf8XAAH0AfcB6wHqAesB7AEHAfMB8QFEAUMBFQFDAREBQwJEAeoB6wHt
AZID9wHsAW0B7wHzAf8ZAAH0AfcB7wEHAbwBBwHxAv8NAAH/Ae8B7AHrAW0DEgETARQCFQETAQcB/xIA
Af8B8ALqAesB7wFEAekEIAElAUYBbwFEAg4BAAELASQCCwHpAUUBEQIeAwsEDgEPAe0B/xUAAf8BBwFE
AiIBRAEcAfMB/wIAAfQBHAFLAZkBBwG8ARwBRAFLAbwB9AH/AgAB8wEVAiIBRAEcAfMB/xcAAv8B9AG8
AW4CRAG8AfAFRAFuAe8BBwHxAfMC/wMAAf8B9AG8Ae8B8gH/FwAB/wHxAe0B7wEHAbwB7wH0EAABBwLs
AesDbQETAhQCFQH3Af8SAAH/Ae8BFAETAesBEgEeAR8DIAFGAUUBbwFFAUMBDwIOAQsB6QEeAQsCRQEL
AQEBHgQLBA4BbQHzAf8UAAL/AQcBSgEiAUQBBwL/AgAB/wGZAUsBdAEHAfABkgFEAW4B8AL/AgAB9AHs
ASIBSgHvAfMC/xkAAv8BvAFuAUUB6gFEAUUBRAFFAW4B7wHwAfMB9AHzAfIC8QHyAfQC/wEAAf8B9AHz
Af8XAAH/AfAB7AH3Ae8CBwP/DQAB/wHvAe0C7ALrAm0BEgMUAe0B9BIAAfQB7AEVARQBbQIeAQEB6QIg
AUYBRAERAUQCRQFEAQ4BAAEfAQEBAAELAREBCwEBAh4ECwEPAg4BFQHwAf8UAAP/AfACSgHwAf8DAAH/
AbwCSwJzAksBdAHxAv8CAAH/ARwBFQHtAfMC/xsAAf8B8wHtA0UBSwFMAZMBvAHyAfQB8wG8AewBEgET
ARIBbQHtAbwB8wL/GgAB/wG8Ae0D9wHxA/8MAAL/Ae8D7QHsAusB7AHqARMCFAHsAfQSAAHzARMBFQEU
ARMBCwEeAQEBHwHpASABRgFFAUQBRQFGAW8BbgEQAQABAQHpAR4CAAEeAgECHgMLAQ8CDgFDAQcB/xUA
Av8B9AFtAUoB8QH/BAAB8AFLAXQBvAEaARwBSwEcAfIC/wIAAf8B7wFDAQcC/x0AAfQB7QFEAUUBTAF0
AZkB8AHzAfQBvAHrARQBbQHsAe8BBwK8AQcB8AHzAf8aAAH/Ae8B7AHtAfcB7QHzAf8B9AHzAf8LAAH/
AfIC7wH3AZID7AHvAesB6gESARMB7AHzEQAB/wHyAREBQwEUARUBCwEeAQEBHwHpAiABRgHpAkYBbwFE
AQ4BAAHpAUABIAIBAekCHwEBAR4DCwEOAg8BQwHvAv8WAAH/AW0BEwHwAf8EAAHxAUsBcwEHAfAB7QFL
AZkB8wH/AwAB/wHvAUMBBwH/HQAB/wHwARIBRAFFAW8BGgHwAvQB7wESAW0B9wG8AfIB9AT/AvQB/xoA
Af8B7wTsAfQB/wHwAe8B8wH/CAAC/wH0AQcB7wEHAe8B9wGSAe0B7AG8AesBbQLqAewB8xEAAf8B8AEQ
AREBFAEQAQsBHgEBAh8EIAFGAW8BRAEPAQABCwVGAiABHwIBAR4CCwEOAg8BQwH3AfQB/xYAAf8B7AFE
AQcB/wQAAfICSgFuAXMCSwG8AfQB/wMAAfQB7QFEAbwB/x0AAfMBbQFDAUQBRQGTAbwC9AHvAUQBbQHv
AfMB9AT/AwAB/xsAAfQB9wHrAuwB6wH0Af8B8QHsAfcB9AgAAv8B8AHvAbwBBwHvBPcB8QHsAesCbQHs
AfMRAAH/AbwBDwERARUBDwELAR4CAQEfAukBIAFGAW4BRAEOAQABCwFFAUYBbwFGAUUBRgMgAekBAQEe
AgsBDgIQARUBkgH0Af8WAAH/Ae8BIgGSAfQEAAHzAesBSwHvAbwBHAFLAbwB9AH/AwAB9AFtARIB8gH/
HAAB/wFtAREBQwFEAW4BBwH0Af8BBwJEAe0B8wP/IgAB/wHvAm0B6wFtAfMBAAHzAe8B7AHtAfQB/wQA
Av8B9AG8Ae8CvAIHA+8BvAHyAuwC6wHtAfMRAAH/AbwBDwEQAUMBDwILAR4CAQHpAUUCRgFuAREBDgEL
AUYBEQEQAUUBRAELAekCIALpAR8BAQEeAQsBDgEQAREBFAHvAfQB/xYAAf8B8AEiAW0B8gH/AwAB9AHs
AW0B8gH0AQcBSwG8Av8CAAH/AfABQwHsAfQB/xwAAfIBEAJDAUQBbgG8Af8B9AFuAkUB7QH0Af8kAAH/
Ae8BbQHrAW0B6wHxAv8B8AHvAewBbQG8AfQC/wL0AfEC7wLxAbwDBwG8AQcC8QPsAesB9wH0EQAB/wHw
AQ4BDwERAQ8CCwIeAgEBRQFEAUYBbgERARABRQFvAW4BQwEQAQ8BCwFFAUYCIAHpAR8BAQEeAQsBDwIR
ARMB7wH0Af8XAAH0AesBQwHvAf8DAAH/Ae0BbQHzAf8BvAFLAbwC/wIAAf8B7AFKAbwB/x4AAQcBFQFD
AkQBbQHwAfQB8AF0AUsBbgG8Av8jAAH/AbwBEgJtAeoB7wH/AQAB8wIHAfcBbQHsAe0C7wL3AbwB8wHy
AfEB8AEIArwC8AH0AQcD7QHsAe8B9BEAAf8B8gIPARABDwMLAh4CAQELAUQBEwEPAQ4BRQF0AW8BEwFE
AkUCRgIgAekBHwEBAR4BCwEQAkMBEgEHAv8XAAH/AQcBRAESAfAB/wIAAf8BHAHqAfMBAAG8AXMB8AL/
AQAB/wEHAUQB7QHzAf8eAAH/AfcERAFtAfAB9AG8AZMBSwFuAQcB9AP/AwAD/xoAAf8B8QHqARMBEgHq
AewB9AL/AfEB7wEHAbwBBwLvAQcBvAHyAfMC8gHxA/AB8QG8AfIB9AP3Au0BBwH/EgAB8wEVAw8ECwEe
AQEBRQFEBA4BEAEUAW0BFAERBEYCIAHpAR8BAQEeAQsBQwEVARQBbQHwAv8YAAH0Ae0BRAHrAfED/wHv
AeoB8wEAAbwBcwHxA/8BvAHqAXMBvAL/HgAB/wH0AesCQwJEAesB8AHzAfABkwFuAUoB7QEHAfIB9AL/
AfQB8wH0Af8bAAHzAesBFAETARIB6gHwAf8BAAH/AfAB7wK8AfAD8QHwAfEC8gHxAfAB8QHyAfAB8QH0
AfIB9wLvAvcB8AH/EgAB9AHrAw8ECwEeAUQBRQFEAQsCHgJEAREBDwEOAREERgIgAekBHwEBAR4BCwIU
ARMB7AHyAf8ZAAH/AfIBcwFEAW0BvAH0Af8BBwFtAfMBAAG8ARwB8gH/AfQB7wFLAXQBvAH0Af8gAAH0
AewBEQFDA0QBbgEHAfIB8QEHARwBSwHqAesB7AGSAfcB7wHxAfQB/xsAAf8BkgEUAhMB6gHtAfQB/wEA
Af8B8QEHArwB8ALxAfAF8QHyAfAB8QH0Af8BBwH3A+8BBwHzAf8SAAH/Ae8BDgIPAQ4ECwEjAUQCCwEf
A0UBEAEAAQ8CRQFGARcBRgIgAekBHwEBAR4BEQESARMB6gHvAfQB/xkAAv8B8QFzAUQBEwHtAfAB7wHs
AfMBAAG8ARwB8QG8AXMBSwGZAbwB8wL/HwAB/wHzARIBRAESBEQBbgH3AfAC8gEHAe8BkgHtAfcBBwHz
Av8BAAP/GAAB/wG8AeoBEwISAW0BBwH/AgAB/wHzArwC8APxAfIC8wLwAfIC/wHyAZIFBwL/EgAB/wHw
AUMBDgEPAQ4BAAcLAQEBRQFuARUBDgELAkUDRAMgAekBHwEBAQsBFALqAesBBwH/GwAC/wHzARwBSgEV
AhQB6wHzAQABvAFLAeoBSgFzAZkBvAHzAv8dAAP/AfMB7QEUAesBBwH3AUQBQwJEAUUBbgHvAfEC8wP0
BP8B9AHwAfIB/xkAAfQB7AEUARMCEgHrAfEB/wIAAv8B8wK8AfAC8QHwAbwB8AHyAfQC/wH0AfcB7wG8
AQcCvAHyAf8UAAH0AesCDgEPAQ4GCwEeAkUBEgIPAUYBRAFDARABDgEBAyAB6QEfAQEBRANtAfcB8gH/
HAAC/wH0AfABHAFKASIBbQHzAQABvAFKAUsBmQG8AfIB9AL/HgAB8wH3AesBEwFuARwBBwHyAfQBEwNE
AUUBSwFMAUsBbgH3AbwB8QLzAfIB8QH3AewB8AH/GwAB8AESARQBEgHqARMB6wHyAf8CAAP/AfQC8wHy
AvMB9AL/AQAB9AL3A7wB8AEHAfQB/xQAAf8BBwERAw4BAAQLAx4BRQESAQ4BDwFuAQ4BFQJEBCABHwEB
AUQB6gHrAuwBBwL/HgAC/wH0AfIBBwHsAfMBAAG8Ae8B8AHzAfQC/yAAAf8B8wG8AfAB8QLzAfIB7QFE
Ae0B9wFuAUsCRQJLAUUCRAEUAhMBEgH3AfMB/xwAAf8B7QEUARMCEgETAW0B8AL/AgAK/wHzAZIB7QS8
AQcB8gL/FQAB9AHrAQ8DDgEABAsCHgJEAg4BAAEOAUMBRAHpBCACAQHqAuwB7QHvAfIB/yAAA/8B9AH3
AfMBAAG8AQcE/yMAA/8B8wEHAewB7QEHAfAB8wHxAQcBHANvBG4B7QEHAfEC/x4AAfQB6wITARIB6gEU
ARIB7wHyA/8EAAP/AfQBvAHsAfcDvAPwAv8XAAHxARUEDgULAR4CRAERAQ8CDgELAQEDIAHpAR8BHgHq
AewBkgH3Ae8BvAH0Af8jAAH/Ae8B8wEAArwB/ygAAf8B9AHzAvIB8wP/AfQC8gHxARoD8AHxAfMB9AL/
IAAB8wHrARQBEwISARMBFQFtAe8B8AHzBPQB8wHxAQcBkgHsAe8DBwG8AvAB9AH/GAAB/wEHARAEDgYL
AkQBQwELAR4BCwEfASAB6QEfAQEBRAFtAe0B9wHvAgcB8wL/IwAB/wHvAfMBAALwAf8qABP/IgAB8gHs
AxMDEgETAeoB6wHsA+0D7AH3Ae8DBwK8AfAB8wL/GQAB/wH3AQ8EDgEABAsFHgEBAh8CAQFEAesB9wLv
AgcB8gL/JQABvAH0AQAB8AHyAf8yAAj/JQAB/wHzAfcB6gESARMF6gJtAesB7AHtAZIB9wTvArwB8AHz
Av8bAAH/Ae8BEAUOBgsFHgFEAeoB7QH3Ae8BBwG8AQcB8gH0Af8mAAHwAfQBAAHwAfRhAAL/AbwB7AHq
AhIC6gFtA+sB7APtAfcB7wEHAfABvAHxAfQC/x0AAf8BvAEVBQ8EDgQLAUMBEwHrAewBkgHvAQcB8AG8
AfIB9AH/JwAB8wH2AQAB8gH/ZAAB9AHvAesB6gESAuoBbQPrAewB7QGSAe8CvAHwAfMC/yAAAf8B8gHs
ARQBEQMPAhACEQFDARQBEwHqAW0B7AHtAe8BBwLwAfIC/ygAAv8BAAL/ZQAC/wG8Ae8BkgTsAZIB9wHv
AQcBvAHxAfMB9AL/IgAB/wH0AQcB7AESAUMDEQFDARUBEwESAeoBbQHsAZIB7wK8AfEB8wP/lAAC/wH0
AfIB8QLwAvEB8gHzAvQC/yUAAv8B9AHwAe8B7AHrA20C7AHtAZIB7wG8AvAB8gH0Av+YAAv/KAAE/wHz
AfIB8QXwAfEB8gLzAfQD/50ABP8uAAf/AvQG/9MAC///AN0AAf8FAAH/AgAE/wMAAf8EAAH/AwAD/wMA
Av8CAAP/BAAB/7QAAf8B9AH/AgAF/wH0AvMB9AH/AQAB/wH0Af8BAAP/AQAC/wH0AfMB9Ab/BPQB/wIA
Af8B9AH/ggAD/wIAA/8CAAX/AQAD/wEAA/8BAAP/AQAF/xAAAfIB7wHzAf8BAAH0AfAB8QH/AfIBvALv
AQcB8gH/AfEBBwH/AQAB/wHwAbwC/wHxAQcC7wHwAv8BvAHyAfQBvAHwAbwBBwH/AgAB8wHvAfSAAAH/
AfIBvAEHAfAC/wHzAbwB8AL/AfMBvAEHAbwB9AEAAfIBvAHxAf8B8gG8AfAB9AHwAbwC8wG8AgcB8AH0
Af8PAAHzAfEB7wL/AfIBBwHzAfIBBwHwAfMB8gG8AfcB9AIHAfQBAAH0AfMB7wH/AfIBvAHyAfMBvAH3
AfMB9AHvAQcB8AEHAfQB8AEHAfIC/wHwAe8B/38AAf8B8AP3Ae0B7wHyAQcB9wHsAv8B7wL3AZIBBwEA
AfcBkgHvAfIBBwH3AewBvAH3Ae0BvAEHA/cBkgHwAf8PAAH/AbwB9wHzAf8B8QG8Af8B8AEHAfQC/wHy
AQcB9AEHAe8B8wH/AfQB8wHvAf8CvAH0AQAB8QEHAfIB9ALvAQcB8gH/AfQCBwH/AfMB8AHxAf8NAAH/
AfMC8gHzAf8B8wH/AQAB/wL0AfIC8QLzAvEB8gH0AfIB8QHyAvQB/wEAAf8B8wH0Av8B9AEAAf8B8wHx
AfIB8wH/EgAD/wEAAv8CAAP/AgAD/wEAA/8CAAL/AQAC/wIAAv8BAAL/FQAB8wHvAQcB9wIHAfcDBwHs
Av8B7wMHAfcB/wHvAQcB7wHwAgcB6wIHAfcDBwLvAbwB9BEAAfQB8AEHAfIBBwHyAv8BBwH/AgAD/wEH
Ae8B9wLvAfMB7wH/AgcB/wEAAfMBvAHyAfQB8AHzAu8C/wHxAQcB8gHxAe8B/w4AAbwBBwK8Ae8B8AH3
AQcB8QG8AQcBvAIHAbwB8AG8AQcBvALwAQcDvAHvAfQBAAHxArwB/wHyAbwBAAH/AfABBwK8Af8SAAHz
AZIBvAH/Ae0BBwL/AQcB7AHxAQAB/wHyAZIB8gH/AfAB7AHzAQAB/wG8Ae0B8wHtAQcC/wEHAe0B/wH3
Ae8B/xQAAfMCBwGSAe8BBwLvAgcB7AH/AfQD7wEHAewB/wIHAe8B8AIHAesCBwH3AwcBkgHyFAABBwH3
AQcBvAH0Av8BkgH/AgAB/wH0Af8BBwG8AQcCvAHzAe8B/wIHAf8BAAHzAbwB8gH0AgcBvAHvAfEBAAH0
Ae8BkgEHAfIOAAH/AQcC8wEHAfcB9AHwAfcC7wHxAfIBBwIAAfQBBwHzAgABvAHvA7wB9wHzAfABBwHv
AbwB/wHxAQcBAAH/AQcB9wHwAfEB/xIAAfEBvAHvAfEBBwHvAf8B8AHvAbwBBwEAAf8B8AH3AfEB/wHv
AQcBkgHxAQcB7wHtAbwBBwHvAf8B8AEHAfcB8QEHAe8B/xQAAfMCBwGSAbwC8AHxAgcB7AH/AfIBBwL3
AQcB7AH/AgcB7wHwAgcC7AEHAe8B8AIHAZIB7AEHAfQSAAH0AfEB7wHxAf8BAAHwAe8BBwLzAQcB7wH/
AgcB9AEAAfQB8wHvAf8CBwH/AQAB8wG8AfIB9AHvAbwC8AHxAQAB/wLxAe8B9A4AAf8BBwLyAQcBvAH/
AfQC7wG8AfQB8gEHAgAB9AEHAfMCAAG8AQcDvAH3AQcBvAH0AQcBvAH/AfEBBwH/AfQB8AEHArwB/xIA
AfEBvAHvAfEBBwHvAfMBBwK8AQcBAAH/AfAB9wHxAf8B8QG8Ae0C7AEHAe8B8AG8AfcB8QLvAfMB8gEH
Ae8B/xQAAfMCBwGSAf8C9AHzAgcB7AH/AfABBwHvAfcBBwHsAfQCBwHvAfACBwHvAQcB7wGSAfEDBwH3
Ae8B8xIAAf8C8AH0Af8BAAH/AfEB7wH3Ae8B8AHzAf8CBwH/AQAB/wHyAfAB/wK8Af8BAAHzAQcB8wH0
AQcC7wG8Af8CAAH0AbwB8gH/DwABvAEHAbwCBwH/AQABvAHvAfIB/wHyAfECAAH0AfAB9AIAAbwBBwG8
AfAB8QEHAbwC/wK8AfABBwH3AbwB8gEHAe8BvAHwAf8SAAHxAbwB7wHxAQcB9wEHAe8BBwG8AQcBAAH/
AfAB9wHxAv8BvAHvAfcBBwHvAfIB8QG8AfcB7QHvAfAB/wHyAQcB7wH/FAAB8wEHAbwBkgG8AvcBvAEH
AbwB7AH/Ae8BBwLvAQcBkgHxAgcB7wHwAbwBBwHtAe8BBwHtAwcB7wG8AfIB/xIAAf8B9AHzAf8DAAH/
AvMB8gH0Af8BAALzAf8BAAH/AfMC/wHzAfQB/wEAAf8B8gL/AfMC8gH/AwAB/wHzAv8PAAH0A/IB9AH/
AQAB/wHzAf8BAAH0Af8CAAH/AfQB/wIAAfMC8gHzAfQB8wH/AQAB/wL0BPIB9AHzAvIB8wH/EgAB8QG8
Ae8B8QEHAewB9wG8AQcBvAEHAQAB/wHwAfcB8QH/AQABvAHvAe0BBwHvAfQB8QG8AQcBvAH3AfIB/wHy
AQcB7wH/FAAB8wEHAbwB7AGSAQcB7wMHAewB/wHvBAcB7wMHAe8B8AG8AQcB6wGSAQcB9wMHAZIB7wHx
AfQTAAL/IwAB/0wAAfEBvAHvAfEBvAHvAQcB8wK8AQcB/wHyAQcB9wEHAfIC9AEHAe0B7wHwAf8B8QEH
AfcBvAH3Ae8B9AHyAQcB7wH/FAAB9AK8AfcB7wIHAfIBvAEHAewB/wHvBQcB9wMHAfABvAEHAe8B9wIH
AfIBvAEHAe8C9wHwAf+EAAHxAbwBBwHxAbwBBwHwAf8B8AG8AgcBkgHvAQcB7QGSAe8B/wEHAbwB7wHz
Af8B8QEHAe8B8gG8AZIBvAHyAQcB7wH/FAAB/wH0AbwCBwG8Af8B9AG8AgcB9AIHAfEB8gIHAfECBwHx
AfMBvAMHAbwB9AH/AfAEBwHzAf9cAAL/JgAB8wEHAfMB9AK8Af8BAAHxAQcB9AYHAfIB/wHyAbwB8AH/
AQAB9AG8AfEB/wHzAQcB8gH0AbwB8QH/WgAH/zIAAf8B8wHtARIBBwH0Af+bAAP/AfQB8gHwAe8B9wLt
AfcB7wG8AfMB9AL/KgAC/wHyAe0BFAFDARUBQwHqAQcB8wL/lgAD/wHyAQcB7QESARUBQwEQAQsDDwER
ARQB6wHvAfIC/yYAAf8B9AHxAe0BFAFDARQBEwEUARUBQwEVAW0B7wHyAv9iAAX/AQAE/ycAAv8B8gHv
AewFRAIeBgsBEAESAfcB8gL/IgAB/wHzAbwB7AETARQEEwYUAeoB7wHyAv9gAAH/AQcC7wHzAf8BBwLv
AfMB/yUAAf8B9AG8Ae0BbgZFBEQGCwFDAW0BBwH0Af8eAAL/AfMBBwHsAxIBEwMSAhMEFAETARQBFQHq
AZIB8AH0Af8nAAL/AvQC8wH0A/8tAAHzAesB6gHrAfAB8wISAesB8QH/JAAB/wH0Ae8BbgVvAZMBHAHv
AQcBvAIHAZIBbgFEASIDCwERARQB9wH0Af8dAAH0Ae8B7APrAW0B6gISAeoCEgITAxQCEwEUARUBFAES
AewBvAH/JAAB/wHzAQcB7QHrAW0C6gHrAewBBwHzAf8sAAH0AewBbQHsAbwB8gETAW0B7QHyJAAB/wH0
ARwCbwIWAZQCBwHxAfMC9AT/AfQB8QHtARUECwFDAe0B9B0AAewB6wTsAesD6gFtARIB6gITAhQBFQEU
ARMBFAITAhIB6gHzIgAB/wHwAe0BBwHsAREEEAERARIB7QL3AbwB/yoAAfQB9wFtAewB8AHyARQB6gGS
AfMjAAH/AfQBkgFuAhYBlAEaAbwB8QHzAfQE/wYAAfMBbgMLAQwBEQGSAf8cAAESAe0B9wGSAuwB7QFt
AeoBbQLrAe0BEgETARQDFQEUARMBFAETAhIB6gHzIQAB8wHsAe0B9AH/AfcFEAFDARIBBwH/AfEB6gHs
AfEB/yQAAf8B8QHwAbwBBwHsAW0B7AHwAfIBFAESAewBBwO8AfMB/x0AAv8B7wJvARYBlAK8AfIB9Az/
AQAB/wHvAUQDCwFDAe8B/xsAARIB7ATtAuwB6wPsAe0B6wISARQBFQJDAxUBFAETARIB8x4AAv8B8AHt
AQcB/wEAAf8B7wEPBBABFQFtAQcB/wEAAfQB7AESAQcC/yEAAf8BBwLrAuoBbQHrAe0BvAHyARQBEwEU
ARUBQwIVAewB9BwAAv8B8AFuAW8BFgGTAbwB8AHzAfQC/wrzAv8BAAH/AQcBRAILAREBFQHxAf8aAAET
AuwBkgH3ApgB9wKSAfcC7wEHAewDEwRDARUCEwESAfMeAAH/AbwB9wG8AfQCAAH/Ae8EEAERARUB6wG8
Af8CAAH0AZIBEgHvAfQB/yAAAfMB9wLvAfcB7QLsAZIBvAHyARQDEwEUAxMBBwH/GwAB/wHzARwBRgFv
ARYBBwHwAfMC/wEAAbwB7ANuAewCbgLrAewB8AH/AgAB/wEHAUQCCwERAewB9AH/GQABFAHrAewBkgKY
AQgBBwLvAQgB9wHyAfQBBwHqAuwBEwIRAUMBFAITARIB8x0AAf8BvAEcAbwB9AH/AgAB/wH3BBABEQEV
AesBvAH/AgAB/wHzAewBEwEHAf8fAAH/Ae8B7QHvArwBBwH3Ae0B9wG8AfIBEgHqAm0B6gITARQB6wHz
Af8aAAH/AbwCRgFvAZMBvAHzAv8CAAH3A28GbgHsAfAB/wMAAfQBkgFEAgsBFAG8Af8ZAAEVAeoB6wHt
AQcBmAEIAbwB9wHvAQcB9wH0AQABBwHsAvcBEgIRARUCFAETARIB8x0AAfIB7QEHAfIB/wMAAf8B7wQQ
AREBFQHrAbwB/wMAAf8B8AHqARIB8B4AAf8B8QHsAe0BBwHwAbwB8AEHAZIB9wHwAfIBEgHsAe8BvAEH
AeoDEwHvAf8ZAAH/AfQB7QJGAW8BBwHzAv8DAAHzBbwFBwHzAf8DAAH/AfMB6gEeAQsBQwHsAfQZAAER
ARIBbQHtAZgBCAHxAfABkgHtAfcB7wH/AQABBwH3AesBbQETAhUCFAEVARQBEgHzHAAB/wHsARwBvAH0
Af8DAAH/Ae8CEQIQAREBFAHsAbwB/wQAAfQBkgFDAW0B9B0AAfQBkgHrAe0B8QEHAfQB/wHzAvcB8AHy
AW0B9wHyAv8B9wITARQBbQHyAf8YAAH/AfABRQJGAZMB8QL/BAAB7wFuBEUD6gJtAbwB/wQAAf8B7wFE
AgsB6gHxAf8YAAEVARMBEgHsAQgB8gH0AfACCAH3AfMB/wEAAfQBvAHsAfcBbQHqAe0B6wETARQBEgHq
AfMcAAEHAesBvAHxAf8EAAH/Ae8BFQJDAREBQwFKAewBvAH/BAAB/wG8ARMBEQEHHAAB/wHxAeoB6wHv
AQcB9AIAAfQB7wH3AfAB8gHrAe8B9AIAAfQBEgMUAfcB/xgAAf8BBwJGAW8B7QH0Af8FAAH3ARYIkwHt
AbwB/wUAAfMBRAILARUBBwH/GAABFQESAeoB7AFtAfcB8wHyAfcB8AHvAfEB/wEAAfQB9wIHAe0B7wEH
AW0CEwESAeoB8xsAAf8BFAHrAbwB8wUAAf8B7wFKAhQCFQFKARwBvAH/BQAB8wHrARABFAH0GwAB/wHs
AesB7AK8Af8CAAH/AbwB7wHxAfIB7AEHAf8DAAEHARIB6gESAW0B8gH/FgAB/wH0AZMB6QFGAW8BBwH/
BgAB9AHzB/IB8QHyAfQB/wUAAf8B6wILAUMB9wH/GAABEgHqAXIB7AGSAesBBwHwAe8B8QG8AfIB/wEA
AfQBBwHxAbwB7wHxAe0B6gETARICbQHzGwABvAFDAesBBwH/BQAB/wG8AW0ESgHrARwB8AH/BQAB/wHs
AhEBvAH/FQAF/wH0AvACvAH0AwAB/wHzAfEC9AHxAfIB/wMAAf8B9wHvAQcBvAH0Bv8RAAH/AfMBbgHp
AUYBbwHyAf8GAAH0AfME8gXxAfMB/wYAAe8BHgELAREB7AH0GAABFAHqAewB7QKYAewB8QHwA/8CAAP/
AvEBvAHrAewCEgFtAesB8xoAAf8B7AFDAXIBBwH/BQAB/wHyARwCcwFyAesBHAEHAfIB/wUAAf8B7QER
AUMB7QH/FQAB8wLvAbwB8AHyAfMB9AHzAfQB/wQAA/8BAAL/BAAB/wT0AfMB8QG8AQcB7wHxAf8RAAH/
AfMBRQHpAUUBbgH0BwAB7wFuBkUDbgEHAf8GAAHxAUQBHgERAesB8xgAARQB6gLsAfcBBwHtAfIB9AH/
BwAC/wHvAQcB9wFtAeoC6wHzGgAB/wESAREBbQEHAf8GAAH0AbwBCAGZARwBBwG8AfEC/wYAAe0BEQFD
AesB/xUAAfACFAETARIBbQHrAewBkgHvAQcB8QH0AgAB/wH0Af8BAAL0Af8BAAH/AfIBvAEHAfcB7QHs
AW0B6gETAhIBBwH/EQAB/wHyAUQCRQFuAfQHAAFuAkYBJQdGAe8B/wYAAfMCHgFEAW0B8gH/FwABFQES
AusBbQGSAfAB9AoAAf8C8QHsAW0B6gFtAesB8xoAAfMBFAERAUoB7wH/BgAB/wH0AfIB8AG8AfAB8gH0
Af8HAAHsAhEB6wHzFQAB8AETARIB6gYSAeoB6wHvAv8B8AHtAfIB9AHtAe8B/wEAAbwBbQISBBQCEwHq
AewBBwH/EQAB/wHyAkQBRQHrAf8HAAFuB0cCRgFvAe8B/wYAAfQCHgFEAW0B8gH/FwABQwESAW0D6wHy
Af8BAAT/AQAG/wHtAewB6wFtAusB8xoAAfIBFAEQARUBkgH/BwAC/wP0A/8GAAH/AesBEAERAesB8hUA
AfABEwESAuoBEgLqAW0B6wHsAfcBkgL/AQcB7QHwAfIB7AH3AfQBAAEHAeoBEgTqAW0B6gHrAW0B7AEH
Af8SAAHzAUQBHgFEAW0B/wcAAW4JRwFvAQcB/wYAAfMCHgFEAewB8wH/FwABQwETAW0C6wH3AfIC/wEH
AewBBwH/AQAB9AHsAe0B8gH/AfMB9wGSBOwB8xoAAfEBFAEQAREB6wHzCAAF/wgAAfMB6gEQAREB6wHy
FQAB8AETAxID6gFtAesB7ALvAv8B8AEHAfAB8QG8AQcB9AEAAQcD7AHrBW0C6wEHAf8SAAHzAUQBHgFE
ARIB8wcAAW4JRwFvAQcB/wYAAfIBRAE+AUQB7AHzGAACFALqAesBbQH0Af8B8gH3AQcB6wHxAf8B7QLs
AfcB9AH/AQcBbQTsAfMaAAHxARQCEAESAfAB/wYAAf8B8QHsAeoB6wG8Af8HAAHwARQBEAFDAXMB8hUA
AfAB6gLrAuwB9wEHAbwD8AHyAv8B8gHxAvMB8QHzAf8BAAHzAfABvAHwAbwB7wGSBewBBwH/EgAB8wHq
AR4CRAHxBwABbgJGBkcBFwFvAQcB9AYAAQcDRAGSAfQYAAEUARMC6gHsAfcB9AH/AbwCmALsAfQB7QGY
AQcBvAL/ApIE7AHyGgAB8gEUAhABEQHtAfQEAAL/AQcBcwEcAXgBcgESAe0B8wH/BAAB/wGSAhABQwHs
AfQVAAHyAe8BBwG8AvAC8QHyAfMB9AL/AQAF/wH0Av8BAAL/AfQB8wHyAvEC8AG8AQcB7wHwAf8SAAH0
AewCCwFEAfcB/wYAAW4DRgVHARcBFgEHAfQFAAH/AewDRAHvAf8YAAEUARIB6gISAZIB9AH/AfQC7wEH
AfAB/wEHAe8BBwHyAv8BBwHsAe0D7AHyGgAB8wEUAhABEQESAfAB/wMAAf8BvAEcApkBeAFzAesB7AEH
Af8DAAH/AfEBEgIRARQB7QH/FQAB/wLzA/QB8AEHAe8BBwH0BAAB/wHzAv8C8wH/AwAB/wG8Au8BvAHz
Av8C9AH/EwAB/wHvAgsBIgHqAfQGAAFuBEYERwEXARYBBwH0BQAB9ANFAW0BvAH/GAABFQHqARIBEwES
AewBvAHwAfID7wHyAfEC7QHvAfAB8gG8Ae0F7AHyGgAB/wESBBAB6wHzAf8CAAH0AhwBmAGZAZgDcwHv
AfQCAAH/AfQB7AMVAW0B7wH/FQAE/wEAAf8B7AMSAQcB/wIAAf8BvAHtAfIB9AHtAQcB/wMAAfIC6wHs
Ae0B8wH/FwAB/wHwAUQCCwEVAbwB/wUAAW4FRgNHARcBlAEHAfQEAAH/AQcDRQHtAfMB/xgAAUMBEwES
AhMDEgJtA+wC6wLtAuwB6wHsAfcB7QHsAu0B8hsAAZIBEQEQAREBEAFDAe0B9AIAAfMB7AFzAhwBmQF4
AXMBHAHvAfMB/wEAAfQBkgETAxQBcwHxGwAB/wHvBG0B8wIAAf8B9wHtAfAB8gHtAQcB8wIAAf8B7AHt
AfcBBwG8AfQB/xgAAfQB6wILAUMB6wHzAf8EAAFuBUYCRwFGARcBlAEHAfQDAAH/AfMBbgJGAW8B7wL/
GAABQwUTARIBEwESA+oC6wHtAZgB9wGSAe0DmAGSA+wB8RsAAfIBEQQQAUMB7AHzAf8B8wHsAnMBHAKZ
ARwBmQEHAfQB/wH0Ae0BEgJKARQBSgHtAfQbAAH/AfMB7AJtAeoB7AH/AQAB9AH3AZIB8AHyAe0BBwHy
AgABvAL3AQcBvAHxAv8YAAH/Ae8BEQILAUQB9wH/BAABbgHpB0YBFwGUAQcB9AH/AgAB/wHvAkYBaQGT
AfEB/xkAAUMDEwEUARMB6gETARIC6gFtAusC7QGSAfcB7QGYAQgBmAH3A+0B8RsAAf8B6wYRARIBvAHz
ARwB6wFzARwDmQEIAbwB9AHwAW0FSgEcAQcB/xwAAf8BvAHqARIB6gETAe8BvAHvAewB9wHwAfIBkgHv
AZIBvAEHAe0C7wEHAbwB9AH/GgAB8wFtAgsBEQESAbwB/wMAAW4C6QVGAUcBFwGUAQcB8wH/AQAB/wHw
AUUBRgEXAW8B7wH0Af8ZAAERARQBEgMTARQEbQLsAZIB7ALtAZIB7QGYAggB8AKYAfcB8RwAAfMBQwYQ
AREBbQHtAesCcwKZARoBvAHvAewBbQFzAesDSgFzAe8B/x4AAfQB7QESAeoBbQITARIB6wGSAfAB8gHs
AfcB7ALrAfcBBwG8AfAB8gH/HAABBwFDAgsBEQESAbwC/wEAAeoCRQVGAUcB4wGUAQcB9AL/AfABbgEX
AeMBFgHvAfIB/xoAARUBFAISARMBEgETARIBbQHrAuwB7wEHAewBkgL3AZgECAGYAQcB9wHyHQAB7wFD
AhECEAERAUMBFQFDARICcwGZAZ8BGgGZARwBmQEcAnMCcgFzAQcB8QH/HgAB/wHwAewBbQXrAe0B8AHy
AesB7AGSAfcB7wH3AQcB8gG8AfQB/xwAAf8B7QILAhEBEgEHAfQB/wHqAkUB6QVGARcBlAEHAfMB9AG8
AW4BFwHjARYBkwG8Av8aAAEUARMBEgHqAxIBbQHrAm0B7AHwAfEB7AL3AZIBmATCAggB7wHxHQAB9AHs
ARUBEQEQARECQwEVARQBSgFtAXMBHAGZAsMBoAKZAhwBcwEcAZkBvAH0IAAB9AHvA+0B7AHrAW0B7QHw
AfIB6wHtAQcCvAHwAfIBvAHzAf8eAAH0AewBEQELAhEBFAHtAfEBEgEjAUQBRQHpAkYBJQFGARcBlAHv
AbwB7wFuARcBFgGUAQcBvAH0Af8bAAEUARMBEgHqARIC6gHrAewB6wFtAeoBbQHsAesCmAH3AZgGwgHv
AfEB/xwAAf8B8wHtARQCEQFDAhUBFAFKAW0BcwEcAZkBGgKgARoEmQEIAbwB8wH/IQAB8wHwA7wB7QHr
Ae0B8AHyAesB9wG8AfAD8QHyAv8fAAH0AewCIgELASIBQwESAUMCHgFEAUUB6QIlAkYBbwJuAUYB4wEW
AZQBGgG8AfMC/xsAARQBEwESBOoE6wHsAm0B7AH3ApgBCALCARsCCAHxAQcB8QH/HQAB/wHyAZIBSgEU
AhUBFAJKAXIBcwEcApkDoAGZAZ8BGgEbAfAB8wL/IQAC/wL0AfMB9wHrAe0B8AHyAW0BkgEHAfAB8wL0
Av8hAAH0AZIBQwYLAh4CAQHpBUYBFwHjARYBlAEaAbwB8wL/HAABFQMSAuoB6wTsAe0C7AHtAfcBmAII
AsIDCAEbAQcB8QH/HQAC/wHzAQcB7ARKAXICcwIcApkCnwGZAcMB8AHxAfMC/yQAAv8B9AHtAW0B7AHw
AfIBbQHtAe8B8AT/IgAC/wEHAUQCEQQLAh4BPgEBAUUDRgHjARYBlAG9AvAB8wL/HQABFAESAuoCEgHr
BuwC7QKYAQgBwgIIA8IB8wHvAfIgAAH/AfQB8QEHAhwCcwMcA5kBGgEbAfIBvAHyAfQC/ycAAfMB6wFt
AewB8AHyAW0B7AGSAbwB/ygAAfMB7QFEAwsERAJFAUYBbwEWAZQBvQEbAbwB8AHzAv8eAAETAm0C6gES
AW0C7APtAewB7QH3AZgECAHCAfMCwgHzAe8B8iIAAf8B9AHyAbwB8AYbAfQB8AG8AfMB9AL/KQAB9AEH
ArwC8wEHArwB8gH/KQAB/wHyAfcBbQESA0QB6gJuApMBBwK8AfAB8gH0Av8fAAH3AwcD7wO8AfAB8QHw
AfID8wj0AbwB8yQAAf8C9AHzBPEB8gHzAvQC/ysABf8BAAH/AfQD/ysAAf8B9AHxAbwD7wIHArwB8QHy
AfMB9AL/KAAC/xD0Av8lAAv/MwAD/y4ABv8E9AT/KwAS/5gACP//AP8A/wD/AIEABP8BAAb/AgAF/wMA
Bv8DAA3/tQAB8wHwAfEC/wH0AfEDvAH/AgAB8wHwAQcB8AH/AwAB/wHxArwB8gH/AgAB/wHzAfIB/wHy
AfAB9AH/AfEE8AHyAv9FAAH0AfMB9AL/AfQE8wH0BP8B9AHzAvQB8wH/AQAB/wH0AfMB9ALzAfQC/wP0
AvMD/wHzAf9FAAHxAbwB8AH/AfQB8AEHAfEBBwHvAf8CAAHyAQcBvAEHAfMB/wIAAfMB8QIHAfAB/wEA
Af8B9AG8Ae8B9AHxAfcB8wH/AQcB7wLzAfECBwH/RAAB/wG8Ae8B8QH/AfQBBwHvAgcB7wHzAfQB7wH0
AfMBBwHvAbwBBwHvAfMB/wH0AQcB7wHwAQcB7wHwAf8B8QHvArwC7wL0AgcB/wsABf8BAAf/AQAT/wEA
Bv8BAAj/CQAB8wHwAfEB8gK8AfMB/wG8Ae8B/wIAAfMB7wHyAfAB8QH/AgAB8AEHAfIBBwHxAf8BAAH0
AfABBwHvAf8B8wH3AfQBAAG8AQcB/wEAAf8B8gEHAbwB/0MAAf8B9AEHAfEC/wEHAZIB9AHxAbwB/wG8
AgcB9AG8AQcB8wHxAZIB9AH/AfQB7wHwAf8BvAHvAfMB9AHvAfAB9AHzAfAB7wH/AbwB7wHzAf8LAAH/
AfEBBwHwAv8B8wG8AfEBBwHvAfAB/wEAAf8B8AIHAfQB8wEHAbwB9AHwAgcBvAHyAfQB8QEHAfAC/wHz
AbwB8AIHAfQB/wH0AbwB8QHwAgcB9AH/CQAB9AEHAfcC8AH0Af8BAAEHAfcB9AL/AfMB7wHzAfQBBwHz
Af8B9AHyAQcB/wEHAfIB/wH0AfAB7wG8AQcB/wHzAfcB9AEAArwB/wIAAf8BvAGSAfQLABH/AQAE/wEA
E/8PAAH/AgcB8wHwAbwB8QH/AfIBvAHzAbwB7wGSAfMCvAH0Af8CBwH0AfEB7wHyAf8BvAHvAfIBvAEH
AfMBAAH0AbwB7wHyAfcB8gH/DQAB8wHvAv8B9AIHAfQB8AEHAfQD/wHyAbwB8AH0AQcBvAH0AfICvAH/
AfQB8AH0AfMB7wL/AfQCBwH0AfAB8wEAAf8B8AEHA/IB8AH/CgAB8wH0AfMBBwH/AwABBwHvAfcCBwLv
AfMB/wEHA/cB7wHzAf8BBwHxAfQB8AEHAf8B8QHvAf8B8wH3AfQBAAK8Af8DAAIHAfMLAAHxBuwB8gH0
Ae0F7AHwAf8BAAHyAe0BBwH/AQAB/wEHBewBBwHyAfcBBwHxBuwB8QH/DgAB/wHzAe8B9wHvAfcC/wHz
AwcB8wMHAbwB9AEAAfAB7QHvAfcBvAH0AQABvAHvAvcBvAH/AQAB9AG8AewB9wEHAfMB/w0AAfQBBwH/
AfQBBwG8AQcB9AHwAe8B9AHyAbwB8wHyAbwB8AEHAbwB8wH/AfEB7wH0AQAB/wHzAfIB9AEHAf8B9AEH
AbwBBwH0AbwB9AH/AfABvAEHAfIB8wHyAfAB/woAAfMBvAIHAfMB/wIAAQcB7wHyAvMB8AHvAfMB/wHz
AQcC8AEHAv8CBwG8AQcB8wEAAfEBBwH/AfMB9wH0AQABvAEHAf8DAAIHAfQLAAEHAu8CBwLvAQcBvAH3
Au8DBwHxAf8BAAHxAu8B/wEAAfQB7wUHAbwB8QHvAQcBvAYHAe8B/w8AAfQBBwK8AQcC/wHzAe8CBwH/
AfIC7wEHAfQBAAH0Ae8B8QHvAfAB/wEAAbwBBwLwAfcB8QH/AfQB8AHvAfEB7wEHAf8NAAH0AQcB9AEH
AbwB8AG8AfQB8AHvAfQB8wHyAfQB8wG8Ae8BBwHyAf8BAAHxAe8B9AIAAfMB8gH0AQcB9AEHAbwB8AG8
AfQBvAHzAfEBvAHxAfAB8gHzAfIB8AH/CgAB8wG8AfEB8AEHAfMB/wEAAbwB7wH/AgAB8wEHAfEBAAH/
AbwCBwHzAQAB/wEHAe8BvAHyAf8BAAHwAe8B/wHzAfcB9AEAAbwBBwH/AQAC/wG8AQcB/wsAAQcC7wHz
AfQBBwHvAQcBvAL3BAcB8wH/AQAB8QLvAf8BAAH0Ae8B9wHvAwcB8QHyAe8BBwH0AbwDBwLvAQcB/w8A
Af8B8QH3Ae8B8gEAAf8B9AH3Ae8B8gL/AQcB9wEHAfQCAAEHAe8BBwHzAgABvAHvAvQB7wEHAf8B9AG8
Ae8B/wHxAfcB8w0AAfQCBwG8AfIB9AHwAfQB8AHvAfQDAAHzAbwCBwHzAf8BAAHxAe8B9AIAAfMB8QHz
AgcBvAHyAfQB8AH0A7wB8QH/AfEB8gHzAfIB8AH/CgAB8gG8AfAB/wHwAQcB8wH/AbwB9wH0AgAB8QG8
AfAC/wHyAgcB/wEAAf8BBwHwAfEC/wEAAbwB7wH0AfMB9wHzAf8BvAEHAfQB/wH0AfEB8AHzAf8LAAEH
AfcBBwH/AQABvAH3AQcBvAHvAZID7QGSAfAB/wEAAfEC7wH/AQAB9AHvAfcE7QEHAfEB7wEHAfIE7QH3
Ae8B8AH/DwAB/wHzAQcB7wH0AQAB/wHzAe8BBwH0AgAB8gHvAQcB9AH/AQAB8gHvAQcB/wIAAQcB7wHy
AfMB7wHwAf8B8wHwAe8B9AG8AQcB9AwAAf8B8wEHAbwB8gH/AfQBBwHzAbwB7wHzAf8BAAH/AfICvAHy
AbwB8gH/AfAB7wHzAv8B8gHwAfIBBwG8AfIB/wH0AQcB8wK8AfAC/wHwA/IBvAH/CgAD8AH/AfQCvAHz
AfABBwH0AQAB/wHxAvAB/wEAAfQBvAHyAf8BAAH/AfAB8wH/AwABvAEHAfMB8QHvAvMB8AEHAvEC8AHz
Af8MAAEHAfcB7wL0AQcB9wEHAbwB9wHvBAcB8gH/AfQBvALvAvQB8wLvBAcB8QHyAe8CBwLvAQcDvAHz
Af8QAAH/AfAB8QH/AQAB/wG8AQcB8gH/AgAB/wG8AQcB8QH/AQAB/wG8AfEB/wEAAfQCBwHvAQcBvAH0
Af8BvAHwAfcCBwHyAf8MAAH/AfABvAHyAv8B8QEHAfABvAEHAfEB/wEAAf8B8AG8AQcB8wEHAbwB8QG8
AQcB8AH/AfMEvAHyAv8B8QEHA7wC/wHzAbwB8AG8AfABBwH0Af8JAAH/AfQE/wH0Af8C9AH/AQAC/wH0
Av8BAAH/AfQC/wEABP8DAAL0Af8C9AL/BfQC/w0AAQcB9wHtAvcBkgH3AQcBvAH3AZIE9wG8AQcC9wHv
AZIB9wHvAbwC9wGSA/cBvAHxAe8CBwHvAfcBkgL3Ae8BvAH/EAAE/wEAAf8C9AH/AwAC/wH0Av8CAAH0
Af8CAAH/BPQD/wT0Av8NAAT/AQAI/wEAEv8BAAb/AQAI/x0AAv8kAAEHBu8B8wHyBu8B8AfvAfAG7wG8
AfIB7wHwAfMBBwPvAgcBvAH/xgAB/wX0Af8yAAb/ZgAE/wEACv9iAAL/AfQB8wTyAfMB9AL/XAAD/wMA
Af8B9ALzAfQB/wH0A/MB9AH/AfQC8wH0Af8DAAP/WQAB/wHzAfAB7wHsAW0BEgFKARMBEgFtAewB7wHw
AfMB/y0AB/8lAAH/AfMB8QH/AwAB8wHsAm0B9wHxAfcD6wHvAQcB6wHqAW0BBwH/AwAB8wHyAv9VAAL/
AfIB7wHsAkoBRAYjASIBFQFEAesB7wHyAf8oAAP/AfMB8gG8AQcBvAHxAfMB9AL/IQAB/wHzAQcB8AH/
AwAB8QNEAewB7wFuAUoCRAHsAe0CEAFEAe0B/wMAAfMB7AHvAfQB/yIAA/8FAAP/JgAB/wH0AQcBcwVL
ASkCSgcjARUBbQHvAfQB/yUAAf8B8wEHAewB6wVKAW0B7AHvAfEB9AH/HgAB/wH0AQcB7wH0Af8DAAHx
AUoBRAFKAe0B7wFuAUsBRQFEAewB7QIRAUQB7QH/AwAB/wGSARQB7wH/IQAB/wHxAe8B8wH/AwAB/wHy
Ae8B8gH/JAAB/wHzARwBdARSAnQBcwEcAUsCcwJKAUQDIwFEARUB7AHzAf8iAAH/AfMBkgJKAUsCSgFE
AkoFRAHsAfAC/xwAAf8BBwG8AQcB/wQAAfEDSwEcAe8CdAFLAUQB7AHtAUMBRAFFAe0B/wQAAfIBQwES
AfAB/yAAAfIBEwEVAe0B8wH/AQAB/wHzAW0BQwHsAfIB/yIAAf8B8wFuAVIDegEaArwBmQFzAfABSwFt
AfMCcwEcAXMBSgIjAUQBIgFtAfMB/yAAAf8BvAFKAksBUQFzA0sCSgFLAUoBRAMjAUQB9wH0Af8aAAH/
AfEBBwHwAbwB/wQAAfEDSwEcAe8CdAJLAewB7QJEAUsB7QH/BAAB/wIVAewB9AH/HgAB9AEUAREBQwEV
Ae0B9AEAAfQB6gIRARAB7AHzAf8gAAH/AfMBbgFSAVkBegGgAfAB8QL/AZkBcwHwAUsB6wHzAXMBHAL0
AbwBdAFKA0QBbQHzAf8dAAH/AfQB7wFRAVIDdAGTAZkBHAJLAVECmQF0AUsBSgIjAUQB7QHyAf8ZAAH0
Ae8CBwHyAf8EAAHxA24BHAHvAnQBTAFLAewB7QJEAeoB9wH/BQAB7AEVAeoBBwH/HAAB/wHzARMBFAHq
ARIBFAEVAZIB8gHqARUBEwESAUMBEAHsAfIB/x4AAf8B9AFzAVIBegGaARoB8AHzAf8BAAH/AZkBcwHw
AVEB6wHzAW4BHAH0AgAB8wGZAUsBSgFEASIB6wH0HAAB/wH0AZkBdAJ5ApkBGgHwAfEB8AJLAXQBvAH0
AfIBGgEcAUsBSgJEAe0B8wH/FwAB/wHxAW4CBwHzAf8EAAHyAXMCbgHvAbwCdAFvAUsB7QHvAm0B6wG8
Af8FAAHvAUMBFQGSAfQB/xoAAf8B8gESARMB7QG8AQcB6wEUARUCFAHrAe8BBwHrARUBEQHsAfIB/x0A
Af8BHAFSAXoBoAEaAfAB8wH/AgAB/wGZAXMB8AFLAesB8wFuARwB9AMAAfQBmQFLAUQBIwEVAZIB/xsA
Af8BBwF0AnoCGgHxAfIC9AHyAUsBSgFzAfAB/wEAAf8B9AEbARwBSwFEAUoB9wH0FwAB/wEHAUoBHAHv
AfMB/wQAAfQBvAIHAfEB8AN0AW4BkgHwAwcB8wH/BQABvAFDARUB6wHyAf8ZAAH/AfEBbQETAfcBvAHy
AfMBBwFtARQBFQESAe8B8QH0AfAB6wEVAREB7AHyAf8bAAH/AbwBUgF6AZoBGgHwAfQC/wIAAf8BmQFz
AfABSwHrAfMBbgEcAfQDAAH/AfQBHAFKAUQBIwEUAfAB/xkAAf8BvAF0AXoBmgHDAfAB8QHzA/8B8wFL
AUoBcwHwAf8EAAH0AZkBSwJKAbwB/xYAAfQB7AFKAe0B9wHxBvMD8QHyAbwBkwF6AXQBbwHsBPEH8wEH
AREBQwESAbwB/xgAAf8B8QFtARMB9wG8AfMC/wHwAW0CFAESAe0B8gL/AfEB6wJDAewB8gH/GgAB8wFz
AVIBegGgAbwB9AL/AwAB/wGZARwB8AFLAewB8wFuARwB9AQAAf8B8wFzAUQCIwHrAfQZAAHzAUsBdAF6
AcMB8AHyAfQD/wEAAfMBSwFKAXMB8AH/BAAB/wH0AbwBSwFKAewB9BYAAfMBEgFEAuoF6wbsAXMBmQGa
AXUBdAFLAusBbgXrA20BEwEQAREBFAHvAf8XAAH/AfIBbQEUAe0BvAHzAv8B8wHtAeoB7AFtARQBEwHt
AfMC/wHyAesBEQFDAewB8gH/GQABBwFRAVIBegEHAfMD/wMAAf8BvAEcAfABcwHsAfMB6wEcAfQDAAP/
AbwBSgEjAUQBSgG8GAAB/wHtAUsBdAGaARoB8QH0Av8BAAL/AfABSwFKAUsB8AH/BQAB/wH2AZkCSgHx
Af8UAAH/AfIBQwEVA0QCSgJLBHQBeQKZApoBegN0AkwDSwFKAUQBFAEVAUMDEQEUAfcB/xcAAfQC7AHv
AbwB8wL/AfQB7AHrAfcBBwG8AW0CFAGSAfMC/wHyAewBbQHqAfcB9BgAAfQBcwFLAVIBegG8Av8B8gH0
AwAB/wG8ARwB8AFzAewB8wHrARwB9AMAAfQB8AL/AXMDRAHtAf8XAAHzAUsCdAGZAfEB9AH/AgAB/wHz
AewDRAFuAfAB/wcAAfMBbgFEAe8B/xQAAf8B8QERBUQBSgFLAW4CdAOaAxoBmgF6BXQBTANLAUQCFAEV
AkMBEQEVAe0B9BcAAfQD8wH0Af8BAAH0AuwB7wEHAfIB9AG8AeoCFQGSAfQBAAH/AfQD8gH/GAAB8gNL
ARwB9AH/AfIBBwH/AwAB/wGZARwB8AFzAesB8wFzARwB9AMAAf8B9wG8Af8BvAFKAkQB6wHzFgAB/wHv
AksBdAEaAfME/wHxAXMBUQNLAW4B8QH/BwAB/wGZAUoB7AH/EwAC/wHwAeoBbgLsAW4CcwEcAZMCmQQa
AsMBGgWaAZMDdAFzAW4BbQHqAhICEwHqAZIB9AL/FAAH/wEAAbwC7AGSAQcB8wH/AfQB7AEUARMB7AHz
Af8BAAX/FwAB/wG8AUoBSwFSAfcB/wH0ARwBvAH/AwAB/wGZARwBBwFRAW4BvAFuARwB9AMAAf8BBwHs
AvQBSgFEAkoB8AH/FQAB/wFuAUsBUQGZAfAE/wHzAXQCeQJ0AXMBdAHyAf8IAAHzAW4BSgH0EgAB/wHz
AfIBBwHsAe0FHAGTAe8CBwm8AgcEmQKTAhwC7QTsAfcB8QHyAfQVAAH0AwcB8QL/AfQBBwH3AewB6wEH
AfQB9wEVARIB9wHxA/8B8QIHAfAB/xcAAf8B7wFEAUsBdAHwAQAB9AFzAQcB/wIAAf8B9AGZAXMBbgFS
AUsCSgHtAfIB/wIAAf8BBwFtAfIB/wFzAUQCSgEHAf8VAAHzAksBUQGZAfIE/wGZAXoCmgEaAfEC8gH/
CQAB/wEcAUoB8xIAAf8B7AESB+oCbQHrAewBcwLsBO0B7AJzAuwBcwRuAusDbQXqARIB6gG8FQAB8wHs
ARABEQFtAfAC/wHzAQcB7QHrAW0B7AEUAeoB9wHxAfQC/wEHAUMBEQFtAbwB/xcAAf8BHAFKAUsBcwH0
AQAB8wFRAXMB8wL/AfIBHAF0AVIBdAJSAksBSgHsAbwB/wEAAfYB6wFtAfEB/wEHA0oB7wH/FQAB8AJL
AVEBmQH0Af8BAAH/AfIBmgGgAZoBGgHyAfQC8AHzAf8JAAHwAW4B8xIAAf8BQwEVBUMCFQEUAUQBSgFu
A3QFmQZ0AW8BbgJLAUoBRAEUAhUBQwERAUMBEQFDARMBBxUAAf8B8wHsAkMBbQG8Av8B8wG8AfcB7AFt
AesB7wHxAfQC/wHvAUMBFQHsAbwB9AH/FwAB9AEcAUoBSwFuAfQBAAH0AXMBSwHvAf8BvAF0AXkBegKa
ApkBeQFRAUsCSgHvAf8BBwFKARwB8wH/AbwDSgHvAf8VAAG8AkoBSwGZAf8BAAL/AbwBoAF6AZkB8AH0
AbwBcwFLAe8B/wkAAfQBcwH0EgAB/wMVAkMDFQNEAUsBbgN0BZoBmQF5BXQBbwFMAksBSgJEARUEQwEV
AeoB8BYAAf8B8wHsAhUBbQG8Av8B8gHtAesC7AHvAfMC/wHvAUMBFQHsAbwB9AH/GAAB9AEcAkoBbQH/
AQAB9AGZAXQB7wEHAXQBegEaAfABvAHxA/IBBwEcAUsBSgFEAe8BSgFuAbwB/wEAAfEDSgHvAf8VAAEH
AUoBRAFLAQcB/wEAAv8BmQGgAXoBmQHwAf8BGgF5AVEBHAH0CQAB/wHvAf8TAAESAxUBFAETAhIC6gFt
AW4BdAKTC5kBkwR0Am4CSgEUBBUBFAFtAfIXAAH/AfMB7AEUARMB6wHwAfMB9wHtAe8B7QLrAQcB9AHv
AhQB7AG8AfQC/xgAAfQBHAIjAeoB/wEAAf8B8gEcAbwBcwF6ARoB8AH0BP8CAAH/AbwBcwFLARUB9wGZ
AfIB/wEAAfADSgEHAf8VAAEHAUoBRAFLAe8B/wEAAv8BvAGgAXoBeQG8Af8BvAGaAZkBvAH/CQAC/xQA
AewBQwIVARQB6gHtAu8DBwG8AxoC8QEaBJkB8QHwBBoBvAEHApkCHAHsARQCFQEUAUoB6wH0GQAB9AHs
ARQBEwFtAesB7AHvAfEBvAH3AesBbQHqARUBFAHtAbwC/xoAAfQBHANKAfMCAAH/AfQB7wF0AZkBvALv
AfAB8wL0AfMB8gEHAe8B7QJLAewB8gH/AgABBwFLAkoBBwH/FQABvAJEAUoBHAH0AQAC/wHwAaACegGZ
AfIB/wLyAv8IAAL/FQABBwRDARIBkgH0Bf8F9AHzApkCGgEHAfIF8wT0Af8B8QIVAkQBbgGSAf8aAAH0
AewBFAESAesB7QHwAfEB8wG8AZIBbQESARMB7AG8A/8aAAH/Ae8BRAJKAbwDAAH/ARwBdAEHARwBdAFR
A0sBbgJLAlEB7AEcAUsB7AH/AwABHANLAbwB/xUAAfIBSgEjAUQBbgHyA/8B8gEaAnoBeQGZAbwC8gHz
Av8HAAL/FQAB9AEVA0MBFAHsAf8KAAH0Ae8BmQEaAfIBvAH0Cf8BAAHxARUCRAFKAXMBvAH/GwAB8wEU
ARIB7QG8AfEC9AHzAQcB7QJtAZIB9AL/GwAB/wEHAkQBSgHsAf8CAAH0AXMB7QHzARwBmQGaBHoBoAKa
AZkBBwHyAVEB7QH/AgAB/wFuAksBcwHxFgAB9AFLAiMBSgG8Af8BAAH/AfQBvAGaAXkBegGaAZkBHAGZ
AfAC/x8AAesDQwEVAesB/wkAAf8B9AEHARoC8wG8AfQB/wkAAbwCRAFKAW4BHAHyGwAB/wHvARQB6wEH
AfEB9AP/AfMBBwHsAW0B6gEHAfQB/xwAAfEBSgJEARMB8wIAAfQBcwH3Af8B9AIbAhoBoAGZAbwB8ALy
AfQB/wFzARwB/wEAAf8B8QJLAVEBmQH0FgAB/wHsAkQBSgHtAfQD/wHyAfABGgN6AaABGwHwAv8FAAL/
GAAB8AEVA0MBEgHzCQAB/wH0AbwB8ALxAfAB9AH/CQAB9wFEAUoBbgEcAQcB9BoAAf8B9wERARIB7wHx
AfQC/wEAAv8B8wEHAewBEgHqAQcB9AH/GwAB9AFzAkQBIwHvAf8BAAH/ARwB7wEAA/8B9AHzAXoBcwHz
AvQC/wEAARwBBwH/AQAB/wEcAlEBdAEHAf8XAAG8AUQCIwFKAbwD/wH0AfIBvAEaAZoBeQF6ARoB8AL/
BAAE/xcAAfQB6wFDAhEBFQHwCQAC/wH0A/IB8wH/CQAB/wHrAUsBbgF0AQcB8AH/GQAB/wH3AUMBFQH3
AfEB9AL/AwAC/wHzAQcB6wHqAW0BBwH0Af8aAAH/Ae8BSgFEASMBSgHyAgAB8AEHAf8DAAH/AfQBeQHs
BP8BAAH/AZkB8gL/AfEBcwFSAXQBmQHyAf8XAAH/AUoBRAEjAUQB7AHzA/8B9AHzAfEBvAF0AXkBmgHw
Av8EAAX/FgAB/wG8ARQCEQEVAfcB/wkABv8KAAH0AW4CdAGZAQcB8wH/GAAB/wHvAUMBEAESAQcB9AL/
BQAC/wH0AZIC6wHtAfEB/xsAAfIBcwFKAUQBIwHsAfQBAAH/AfAB/wQAAfQBdAHrAf8EAAHzAbwC/wH0
ARwCdAGZAe8B/xkAAbwERAGSAfQBAAP/AfQB8AF0AVIBmQHxAv8DAAH/AfIB9wEHAfQC/xYAAfQB7AFD
AhEB6gH0GQABvAJ0AZkBBwHwAfQB/xgAAf8B8AETAREBQwHrAfIB/wcAAf8B8QFtAesB9wHwAfQB/xsA
Af8B7wFKA0QB7wP/BQAB9AF5AesB/wQAA/8B9AEHAXkBegF5ARoB8gH/GgAB7AFKA0QBkgHzBP8B8gFz
AVEBeQHwAv8BAAL/AbwDSwG8Av8WAAH/AfIBEgIRAUMBvAH/FwAB/wHtAZMBmQK8AfMB/xoAAf8B8AES
AREBQwHsAfIB/wUAAf8B8QLrAe8B8QHzAv8cAAH0AXMCSgFEARQB7wH0Af8FAAH0AXQB6wH/BQAB/wH0
AbwBmQKaARoBvAH/GwAB8wFzAUoDRAHsAfAB9AL/AfIBSwFRAXkBvAP/AfMB7wFRAlIBdAG8Af8YAAH/
AQcBEwIRAewB9AH/FQAB/wHxARwBmQK8AfIC/xsAAf8B8AESAUMBFQHsAfIB/wMAAf8B8QLrAe8B8AHz
Av8eAAHyAUsCSgJEAfcB8wH/BAAB9AF0AesB/wMAAv8B8wEHAZkDoAG8AfQcAAH/AfEBcwFLAkoBRAFt
ARwB8AHzAfECSwF5AbwB9AHyAQcBcwFSA3kBmQHzAf8ZAAH/Ae8BFAERARUBBwH/FAAB/wH0Ae8BmQEa
AbwB8QH0Af8dAAH/AfAB6gFDARUB7AHyAf8BAAH/AfEBbQESAfcB8AHyAv8fAAH/AfABcwJKAkQB6wEH
AfQB/wIAAfQBdAHrAf8CAAH/AfQBvAKZAqABGgG8AfMB/x0AAf8B8gEcAXMBSwRKAuwCSwFRAewBHAFz
AVIBeQJ6AZoBGgHxAv8aAAH0Ae8BFAFDAW0B8QH/EgAC/wG8AQcBGgG8AfEB9AH/HwAB/wHwAW0BQwEV
AZIB/wEAAfQB6gEUAe0BvAHzAv8hAAH/AfABcwNKAkQB6wHvAfEB9AHzAXQB6wLzAfEB7wEcAXkBmgKg
ARoBvAHyAf8eAAL/AfMBvAF0AXMBSwRKBEsBUQFSAXQBeQGaARoB8AHxAfQC/xsAAf8BBwFKARUB7AHz
Af8QAAL/AfEB7wHwAbwB8QH0Av8gAAH/AfEB6gFDAewB9AEAAfEBFQHsAbwB8gL/IwAB/wHyARwBSwZK
ARIB6gFLA0oBUQFSAXoDoAEaAbwB8wL/HwAC/wH0AbwBmQF0AVEFSwFSAnQBeQGaARoBGwG8AfIB9AL/
HQAB/wHxAewBEwHtAfMB/w8AAf8B8QHvArwB8gL/IwAB/wHwAW0B7AH0Af8B8QHrAQcB8gL/JQAB/wH0
AQcBcwFLAkoESwFSAXQEUgJ6AaABGwHwAfQC/yIAAv8B8wG8ARoBmgF5A3QBmQGaARoBwwEbAbwB8gHz
AfQC/x8AAf8B9AH3ARIB7AHyAf8NAAH/AfABHAG8AfAB9AH/JgAB/wHwAe8B9AH/AfIBBwHzAv8oAAH/
AfIBBwFzBksCUgJ0AnkBmQG8AfMB9AH/JQAC/wH0AfMB8QTwAfEC8AHxAfMC9AP/IgAB/wHyAfcB7wHx
Af8KAAH/AfQCBwHwAfQC/ygAAf8B9AL/AfQD/ysAAf8B8wHwAZkCHAFzAnQBHAKZARoB8AHzA/8oAAT/
B/QD/ycAAf8B8wHxAfQB/wkAAf8C8gP/LAAD/zAAAv8B8wXyAfMB9AP/LAAL/zgAAv9kAAj//wD/AP8A
YwABQgFNAT4HAAE+AwABKAMAAeADAAHgAwABAQEAAQEFAAGAARgWAAP//wD/AP8A/wD/AP8AJwAB/wEE
AUwB/AHZAQwBfxb/AgABMAIAAT8O/wH4BQABAQH/AgABMAIAAT8O/wHwBQABAQH/AgABMAIAAT8O/wHw
BQABAQH/AgABeAIAAX8O/wHwAgABCAEAAQgBAwH/AgABCAIAAX8B4AMAASABggEhB/8B4AIAAQgBBAEI
AQMB/wUAAX8B4AUAAQEH/wHgBQABAwH/BQABfwHgAwABEAEAAQcB+AEAAQQCGAEgAQ8BwAUAAQMB/wIA
AXgCAAE/AeABAgIAARABMAEHAfgCAAEIARABAAEHAcACAAFAAgABBwH/AgABcAIAAT8B8AECAgABEAEw
AQcB+AIAAQgCAAEHCP8CAAFwAgABPwHgBQABBwH8AgABCAEgAQABHw7/AeAFAAEHAfwCAAGMAQEBAAE/
Dv8B4AUAAQ8B/AIAAYwBAQEAAT8V/wH8AgABgAEBAQABPwL/Af4BAAE/BP8B+AEAAT8J/wH4BQABPwL/
AeABAAEHBP8BwAEAAQcJ/wH4BQABPwL/AYABAAEBBP8BgAEAAQEJ/wH4BQABfwL/AwAD/wH+AwAF/wGI
C/8B/gMAAT8C/wH+AwABPwL/AfwB/gEIAR8Bnwn/AfwDAAE/Av8B/AMAAT8C/wH8AXgBCAEPAR8J/wH4
AwABHwL/AfgDAAEfAv8B/AEwAQgBBwEfCf8B8AEAARABAAEPAv8B8AMAAQ8C/wH8AwABHwn/AfABAAF4
AQABBwL/AeADAAEHAv8B9AMAATcE/wHwAT8D/wHgAQEB/AEAAQcC/wHgAwABAwL/AeADAAEjA/8BgQGA
AQcD/wHgAQMB/gEAAQMC/wHAAwABAwL/AeADAAEDA/8CAAEBA/8BwAEHAf8BAAEDAv8BwAMAAQEC/wHg
AwABAwL/AfADAAP/AcABDwH/AQABAQL/AYADAAEBAv8B8AMAAQcC/wHwAwABfwL/AcABHwH/AQABAQL/
AYADAAEBAv8B8AEGAQABGAEHAv8B8AIAAXABPwL/AYABfwH/AYABAQL/AYAEAAL/AfABBgEAARgBBwL/
AfwCAAEEAT8C/wGAAR8B/wEAAQEC/wGABAAC/wHwAQ4BAAEYAQ8C/wH+AgABAQP/AYABHwH+AQABAQL/
AYAEAAL/AfgBDwEAARgBHwP/AgABAQP/AYABDwH+AQABAQL/BQABfwH/Af4BDwEAATgBPwL/Af4CAAEB
A/8BgAEHAfgBAAEBAv8FAAF/Af8B/gEPAQABOAE/Av8B/gIAATsD/wGAAQcB+AEAAQEC/wUAAX8B/wH+
AQ8BAAE4AT8C/wH8AQABAQT/AYABgQHgAQABAQL/BQABfwH/Af4BBwEAATABPwL/AfwBAAEHBP8BgAMA
AQEC/wUAAX8C/wEHAQABMAF/Av8B/gEAAQME/wGAAUACAAEBAv8FAAF/Av8BAwEIASABfwL/Af4CAAFx
A/8BgAMAAQEC/wGABAABfwL/AYABCAEAAX8C/wH+AgABAQP/AcABIAIAAQEC/wGABAAD/wGAAQgBAAT/
AgABAQP/AcABEAIAAQEC/wGABAAD/wGAAQgBAAP/Af4CAAECAT8C/wHAARgCAAEBAv8BgAMAAQED/wHA
AQgBAQP/AfADAAE/Av8B4AEMAgABAwL/AcADAAEBA/8B4AEIAQMD/wHwAwABfwL/AfABBgEAARABAwL/
AcADAAEBA/8B+AEIAQ8D/wHwAwAD/wHwAQEBgAEAAQMC/wHgAwABAwP/AfwBCAEfA/8B/AIAAQED/wH4
AQABPAEAAQcC/wHwAwABAwT/AYgF/wIAAQMD/wH8AwABDwL/AfADAAEDBP8BiAX/AcABAAEHA/8B/gMA
AQ8C/wH4AwABBwT/AcgG/wHAAT8D/wH+AwABHwL/AfwDAAEPBP8ByQz/AwABPwL/Af4DAAEfBP8ByQz/
AeACAAT/AwABPwT/AckM/wHwAQABAQT/AYACAAE/Ef8B/AEAAQcE/wHAAgAT/wEAAR8E/wHgAQABARP/
AfAF/wH8AQABBxr/AQABHzr/Af4B+wEOAfcBHAHHAb8V/wH8AWABBAFEAQABAwEfD/8B+AHGAQgBiAGD
Af8B/AEgAQABQAEAAQMBHw//AeABAAEIAQABAQH/AfwCAAFAAgABHw//AcABAAEIAQABAQH/AfwDAAFA
AQABHwH/AQABgAEAARABIAF/Af8B4gFjAREBkwEnAv8BwAMAAQMB/wH+AQABYAEAAUABAAE/Af8DAAEQ
ASABfwH/AeABAgEBAQABAwL/AcADAAEPAv8BAAFgAQABQAEQAX8B/gEAAQYBMAEAASABfwH/AeABAgIA
AQMC/wHAAwABAwL/AQQBAAJAARABfwH+AQABBgEwAgABfwH/AeABAgIAAQMC/wHAAwABAwL/AQQBAAJA
ARgBfwH/AQIBBgEwAgABfwH/AeABAgIAAQMC/wHAAwABAwL/AQ4BBAJAATgBfwH/AQIBJgEwARABAAF/
Af8B4AECAQgBAAEDAv8BwAMAAQMC/wGfA/8B/Qn/AeADAAEDAv8BwAMAAQEQ/wHgAwABAwL/AcADAAEB
C/8B5wT/AeABIAEAASABAwv/AQEG/wGAE/8B4AEAAQ8E/wH8AQABHxL/AYABAAEDBP8B8AEAAQcL/wH+
AQgBfwT/AwAE/wHAAQABAQv/Af4BAAE/A/8B/gMAAX8C/wH+AwABfwT/AQABPwT/Af4BAAE/A/8B/AMA
AT8C/wH+AwABPwP/AfwBAAEfBP8B/gEAAX8D/wH4AwABPwL/Af4DAAE/A/8B8AEAAQcE/wH+AQABfwP/
AfABAAEPAcABHwL/Af4DAAE/A/8B4AEAAQEE/wHgAQABAwP/AeACAAEgAQ8C/wH+AwABPwP/AQIBAAEg
AX8D/wHAAQABAwP/AcACAAEQAQcC/wH+AwABPwP/AQYBAAEwAT8D/wHAAQABAQP/AcABBAEAARgBAwL/
Af4DAAE/Av8B/gEGAQABMAE/A/8BgAIAA/8BwAEMAQABHAEDAv8B/gEAAQgBAAE/Av8B/gEOAQABOAE/
A/8DAAP/AYABHAEAARwBAwL/Af4BAAEIAQABPwL/AfwBDgEAATwBHwP/AwABfwL/AYABPAEAAR4BAQL/
Af4BAAEIAQABPwL/AfwBHgEAATwBHwL/Af4BAwEAAcABfwL/AYABfAEAAR8BAQL/Af4BAAEIAQABPwL/
AfgBPgEAAT4BDwL/Af4BAwEAAeABPwL/AQAB/AEAAR8BAQL/Af4BAAEIAQABPwL/AfgBPgEAAT4BBwL/
AcABBwEAAeABAQL/AQAB/AEAAR8BgQL/Af4BAAEYAQABPwL/AfABPgEAAT4BBwL/AcABBwGJAeABAQL/
AQEB/AEAAR8BgQL/Af4BAAF/AQABPwL/AfABPwEAAT8BBwL/AcABAQGIAYABAQL/AQEB/AEAAR8BgAL/
Af4BAQH/AYABPwL/AfABPwEAAX8BBwL/AcACAAGAAQEC/wEBAfwBAAEfAYAC/wH+AQEBCAEAAT8C/wHw
AT8BgAF+AQcC/wHAAgABgAEBAv8BgQH8AQABHwGAAv8B/gEAAQgBAAE/Av8B8AE/AcEB/gEHAv8BwAIA
AYABAQL/AYEB/AEAAR8BgQL/Af4DAAE/Av8B8AEfAYAB/gEHAv8BwAIAAYABAQL/AYEB/AEAAR8BgQL/
Af4DAAE/Av8B8AEeAQABPAEHAv8BwAEBAQABgAEBAv8BgAH8AQABHwEBAv8B/gMAAT8C/wHwAQ4BAAE4
AQcC/wHAAQcBgAHgAQMC/wGAAfwBAAEfAQEC/wH+AwABPwL/AfABBgEAATABBwL/AcIBAwEAAeABPwL/
AYABfAEAAR4BAQL/Af4DAAE/Av8B+AEGAQABEAEPAv8B/gEDAQABwAE/Av8BwAE8AQABHAEBAv8B/gMA
AT8C/wH4AwABDwL/Af4BAQEAAcABPwL/AcABPAEAAQwBAwL/Af4DAAE/Av8B+AMAAQ8D/wMAAX8C/wHg
ARwBAAEIAQMC/wH+AwABPwL/AfwDAAEfA/8BgAIAA/8B8AEEAgABBwL/Af4DAAE/Av8B/gMAAR8D/wGA
AgAD/wHwAwABBwL/Af4DAAE/Av8B/gMAAT8D/wHAAQABAQP/AfgDAAEPAv8B/gMAAR8C/wH+AwABPwP/
AeABAAEBA/8B/AMAAQ8C/wH+AwABHwP/AwABPwP/AeABAAEDA/8B/gMAAR8C/wH+AwABHwP/AwABfwP/
AfgBAAEHA/8B/gMAAT8C/wH+AwABPwP/AcACAAT/Af4BAAE/BP8BwAIAAX8C/wH+AwABPwP/AfABAAED
BP8B/gEAAT8E/wHgAgAD/wH+AwABPwP/AfwBAAEPBP8B/gEIAT8E/wH4AQABAwT/AfwCAAE/A/8B/gEA
AT8F/wH4Bf8B/AEAAQ8E/wH+AgABfxL/AYABf47/AfwBIAFgAeABcAEAAX8V/wH8AQABYAHgAWABAAEf
CP8CAAEEAgABfwf/AfwBAAJgAUABAAEfB/8B/gUAAX8B8AJAAQABBAEIAQcB/AEAAmABQAEiAQ8H/wH+
BQABfwHwAQABQAMAAQcB/AEEAwABIwEPAf4CAAGEAgABfwH/BAABgAH/AfgEAAEQAQ8B/AEcAwABIwGP
Af4CAAGEAgABPwH/AgABIAFAAYAB/wH4AgABBAIAAQ8B/AEMAgABEAEjAY8B/gIAAYQCAAE/Af8BgAEA
ASABQAEAAf8B+AIAAUYCAAEPAfwBBAFiAQgBEAEiAQ8B/gIAAYQCAAE/Af8BggEAATABwAEAAf8B+AEA
AeABRgIAAQ8B/AEAAWABCAEQAQABDwH+ARABAAGEAgABPwH/AYIBDAEQAcABAAH/AfABAAFAAwABDwH8
AQABQQEIAXABAAEfAf4FAAE/Af8BwgEMARABgAEAAf8B8AEAAUADAAEHAfwBAAFBAQgBcAEAAT8B/gUA
AT8B/wHCARwBGQGAAQEB/wHwAYABQAEAAQgBEAEPA/8BnwP/Af4FAAE/GP8BAQb/AYEM/wH4AUABDwv/
AfwBAAE/Cv8B/AFwAQABBwEfCv8B8AEAAQ8F/wGABP8B+AFwAQABBwEPCv8BgAEAAQME/wH8AQABHwP/
AfABcAEAAgcD/wH+AT4BPwT/AwAE/wH4AQABBwP/AeABcAEAAgcD/wH8ARwBHwP/Af4DAAF/A/8B4AEA
AQED/wHgAfABAAEHAYMD/wH8AQgBDwP/AfwDAAE/A/8BwAIAA/8BwAHwAQABBwGBA/8B+AEIAQcD/wH4
AwABHwP/AwABfwL/AcAB8AEAAQcBwQP/AeABAAEDA/8B8AECAQABYAEfAv8B/gMAAT8C/wGAAfABAAEH
AcAD/wHAAQABAQP/AfABBgEAAXABDwL/Af4CAAGAAT8C/wGAAfABAAEHAcAD/wGAAgAD/wHgAQYBAAFw
AQcC/wH8AgAB8AEfAv8BgAQAA/8DAAF/Av8B4AEOAQABeAEHAv8B/AEAAUAB8AEfAv8BgAQAAv8B/gMA
AT8C/wHgAQ4BAAFwAQcC/wH4AQEBAAH4AQ8C/wUAAv8B/gMAAT8C/wHAAQ4BAAFwAQMC/wH4AQYBAAH+
AQ8C/wUAAv8B/gEEAQABEAE/Av8BwAEOAQABcAEDAv8B8AIAAf4BDwH/Af4FAAE/Af8B/AEEAQABCAE/
Av8BgAEOAQABcAEBAv8B8AIAAf8BDwH/AfwFAAE/Af8B/gMAAT8C/wGBAQwBAAEwAQEC/wHwAQABAQH/
AQ8B/wH8BQABPwH/Af4DAAE/Av8BgQIAARABAQL/AfABEAEAAf8BjwH/AfwFAAE/Af8B/gMAAT8C/wGB
AwABAQL/AfABIAEAAf8BjwH/AfwFAAE/Av8DAAF/Av8BgQMAAYEC/wHwASABAAH/AY8B/wH+BQABPwL/
AYACAAF/Av8BgQEAAQYBAAGBAv8B8AEgAQAB/wGfAf8B/gUAAT8C/wHgAQABAQP/AYEBgAEAAQEBgQL/
AfABIAEAAf8BPwH/Af4FAAE/Av8B8AEAAQED/wGBAcABAAEDAYEC/wHwAgABfwE/Af8B/gEBAf8BgAEA
AUABPwL/AfgBAAEDA/8BgAHAAQACAwL/AfABEAEAAX8D/wEBAf8BAAF/AcABfwL/AfABAAEDA/8CwAEA
AQIBAwL/AfACAAF8A/8BAQH/AQABfwHAAX8C/wHgAQgBAQP/AcABRAEAASIBAwL/AfgCAAF4AX8C/wEB
Af8BAAH/AYABfwL/AcABHAEAA/8BwAFjAYABQAEDAv8B+AIAAXgBPwL/AQAB/wGBAf8BgAF/Av8BgAE+
AQAD/wHgASMBwwHAAQcC/wH8AQQBAAFwAR8C/wGAA/8BgAF/Av8BgAF/AQAD/wHgAQcBwwHAAQcC/wH+
AgABQAEfAv8BgAF/Av8BAAP/AcABPgEAA/8B8AEHAcMB4AEPAv8B/gMAAT8C/wHAAT8B/wH+AQAD/wHg
ARwBAQP/AfgBAwHDAYABHwL/Af4DAAE/Av8B4AE/Af8B/AEBA/8B8AEIAQMD/wH4AQABwwEAAR8D/wMA
AT8C/wHwAR8B/wH4AQMD/wH4AQgBBwP/AfwDAAE/A/8DAAE/Av8B+AEPAf8B8AEDA/8B/AEIAQ8D/wH+
AwABPwP/AYACAAF/Av8B/AEHAf8B8AEPA/8B/gEAAR8E/wMAAX8D/wHgAgAD/wH+AQMB/wHgAT8E/wEA
AT8E/wHAAQABAQT/AfABAAEBBP8BgQH/AYABfwT/AYABfwT/AfABAAEDBP8B/AEAAQ8E/wHgAf8BgQX/
AeMF/wH8AQABHwT/Af4BAAE/Bv8Bzwz/AQBs/ws=
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterWindow.Designer.cs
================================================
namespace EVEMon.BlankCharacter
{
partial class BlankCharacterWindow
{
///
/// 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.buttonCancel = new System.Windows.Forms.Button();
this.buttonOK = new System.Windows.Forms.Button();
this.bottomPanel = new System.Windows.Forms.Panel();
this.blankCharacterControl = new EVEMon.BlankCharacter.BlankCharacterControl();
this.bottomPanel.SuspendLayout();
this.SuspendLayout();
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(412, 23);
this.buttonCancel.Margin = new System.Windows.Forms.Padding(3, 20, 20, 3);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 0;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
//
// buttonOK
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.Location = new System.Drawing.Point(331, 23);
this.buttonOK.Margin = new System.Windows.Forms.Padding(3, 20, 3, 3);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 1;
this.buttonOK.Text = "Import";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// bottomPanel
//
this.bottomPanel.BackColor = System.Drawing.SystemColors.ControlLight;
this.bottomPanel.Controls.Add(this.buttonCancel);
this.bottomPanel.Controls.Add(this.buttonOK);
this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.bottomPanel.Location = new System.Drawing.Point(0, 425);
this.bottomPanel.Name = "bottomPanel";
this.bottomPanel.Size = new System.Drawing.Size(497, 57);
this.bottomPanel.TabIndex = 2;
//
// blankCharacterControl
//
this.blankCharacterControl.AutoSize = true;
this.blankCharacterControl.BackColor = System.Drawing.Color.Transparent;
this.blankCharacterControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.blankCharacterControl.ForeColor = System.Drawing.SystemColors.GrayText;
this.blankCharacterControl.Location = new System.Drawing.Point(0, 0);
this.blankCharacterControl.Name = "blankCharacterControl";
this.blankCharacterControl.Padding = new System.Windows.Forms.Padding(13);
this.blankCharacterControl.Size = new System.Drawing.Size(497, 425);
this.blankCharacterControl.TabIndex = 3;
//
// BlankCharacterWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.SystemColors.Window;
this.ClientSize = new System.Drawing.Size(497, 482);
this.Controls.Add(this.blankCharacterControl);
this.Controls.Add(this.bottomPanel);
this.MaximizeBox = false;
this.Name = "BlankCharacterWindow";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Blank Character Creator";
this.Load += new System.EventHandler(this.BlankCharacterWindow_Load);
this.bottomPanel.ResumeLayout(false);
this.bottomPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonCancel;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.Panel bottomPanel;
private BlankCharacterControl blankCharacterControl;
}
}
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterWindow.cs
================================================
using System;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.Helpers;
namespace EVEMon.BlankCharacter
{
public partial class BlankCharacterWindow : EVEMonForm
{
#region Constructor
///
/// Initializes a new instance of the class.
///
public BlankCharacterWindow()
{
InitializeComponent();
}
#endregion
#region Inherited Event Handlers
///
/// Handles the Load event of the BlankCharacterWindow control.
///
/// The source of the event.
/// The instance containing the event data.
private void BlankCharacterWindow_Load(object sender, EventArgs e)
{
EveMonClient.TimerTick += EveMonClient_TimerTick;
Disposed += OnDisposed;
buttonOK.Text = "Save";
buttonOK.Enabled = false;
}
///
/// Called when the instance get disposed.
///
/// The sender.
/// The instance containing the event data.
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.TimerTick -= EveMonClient_TimerTick;
Disposed -= OnDisposed;
}
#endregion
#region Global Event Handlers
///
/// Handles the TimerTick event of the EveMonClient control.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
buttonOK.Enabled = !string.IsNullOrEmpty(BlankCharacterUIHelper.CharacterName);
AcceptButton = buttonOK.Enabled ? buttonOK : buttonCancel;
}
#endregion
#region Control Handlers
///
/// Handles the Click event of the buttonOK control.
///
/// The source of the event.
/// The instance containing the event data.
private async void buttonOK_Click(object sender, EventArgs e)
{
// Three choices for one button
switch (buttonOK.DialogResult)
{
// Save blank character
case DialogResult.None:
await BlankCharacterUIHelper.SaveAsync(OnCharacterSaved);
break;
// Add blank character
case DialogResult.OK:
await BlankCharacterUIHelper.AddBlankCharacterAsync(OnCharacterImported);
break;
}
}
///
/// Handles the Click event of the buttonCancel control.
///
/// The source of the event.
/// The instance containing the event data.
private void buttonCancel_Click(object sender, EventArgs e)
{
Close();
}
#endregion
#region Callback Methods
///
/// Called when character is saved.
///
private void OnCharacterSaved()
{
buttonOK.Text = "Import";
buttonOK.DialogResult = DialogResult.OK;
// Disabling control editing
blankCharacterControl.Enabled = false;
}
///
/// Called when character is imported.
///
private void OnCharacterImported()
{
Close();
}
#endregion
}
}
================================================
FILE: src/EVEMon/BlankCharacter/BlankCharacterWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: src/EVEMon/BlankCharacterControl.Designer.cs
================================================
namespace EVEMon.BlankCharacter
{
partial class BlankCharacterControl
{
///
/// 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(BlankCharacterControl));
this.rbFemale = new System.Windows.Forms.RadioButton();
this.rbMale = new System.Windows.Forms.RadioButton();
this.tbCharacterName = new System.Windows.Forms.TextBox();
this.gbRace = new System.Windows.Forms.GroupBox();
this.tlpRaces = new System.Windows.Forms.TableLayoutPanel();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.rbCaldari = new System.Windows.Forms.RadioButton();
this.rbAmarr = new System.Windows.Forms.RadioButton();
this.rbGallente = new System.Windows.Forms.RadioButton();
this.rbMinmatar = new System.Windows.Forms.RadioButton();
this.pbAmarr = new System.Windows.Forms.PictureBox();
this.gbBloodline = new System.Windows.Forms.GroupBox();
this.tlpBloodline = new System.Windows.Forms.TableLayoutPanel();
this.rbBloodline3 = new System.Windows.Forms.RadioButton();
this.rbBloodline2 = new System.Windows.Forms.RadioButton();
this.pbBloodline3 = new System.Windows.Forms.PictureBox();
this.pbBloodline1 = new System.Windows.Forms.PictureBox();
this.pbBloodline2 = new System.Windows.Forms.PictureBox();
this.rbBloodline1 = new System.Windows.Forms.RadioButton();
this.gbAncestry = new System.Windows.Forms.GroupBox();
this.tlpAncestry = new System.Windows.Forms.TableLayoutPanel();
this.lblAncestry1 = new System.Windows.Forms.Label();
this.rbAncestry2 = new System.Windows.Forms.RadioButton();
this.pbAncestry1 = new System.Windows.Forms.PictureBox();
this.rbAncestry1 = new System.Windows.Forms.RadioButton();
this.rbAncestry3 = new System.Windows.Forms.RadioButton();
this.lblAncestry3 = new System.Windows.Forms.Label();
this.lblAncestry2 = new System.Windows.Forms.Label();
this.pbAncestry2 = new System.Windows.Forms.PictureBox();
this.pbAncestry3 = new System.Windows.Forms.PictureBox();
this.ilAncestry = new System.Windows.Forms.ImageList(this.components);
this.gbGender = new System.Windows.Forms.GroupBox();
this.gbCharacterName = new System.Windows.Forms.GroupBox();
this.ilBloodline = new System.Windows.Forms.ImageList(this.components);
this.tlpGender = new System.Windows.Forms.TableLayoutPanel();
this.pbFemale = new System.Windows.Forms.PictureBox();
this.pbMale = new System.Windows.Forms.PictureBox();
this.lblFemale = new System.Windows.Forms.Label();
this.lblMale = new System.Windows.Forms.Label();
this.gbRace.SuspendLayout();
this.tlpRaces.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAmarr)).BeginInit();
this.gbBloodline.SuspendLayout();
this.tlpBloodline.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline2)).BeginInit();
this.gbAncestry.SuspendLayout();
this.tlpAncestry.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry3)).BeginInit();
this.gbGender.SuspendLayout();
this.gbCharacterName.SuspendLayout();
this.tlpGender.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbFemale)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbMale)).BeginInit();
this.SuspendLayout();
//
// rbFemale
//
this.rbFemale.AutoSize = true;
this.rbFemale.Checked = true;
this.rbFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbFemale.Location = new System.Drawing.Point(3, 3);
this.rbFemale.Name = "rbFemale";
this.rbFemale.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpGender.SetRowSpan(this.rbFemale, 2);
this.rbFemale.Size = new System.Drawing.Size(43, 94);
this.rbFemale.TabIndex = 0;
this.rbFemale.TabStop = true;
this.rbFemale.UseVisualStyleBackColor = true;
this.rbFemale.Click += new System.EventHandler(this.rbFemale_Click);
//
// rbMale
//
this.rbMale.AutoSize = true;
this.rbMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbMale.Location = new System.Drawing.Point(3, 103);
this.rbMale.Name = "rbMale";
this.rbMale.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpGender.SetRowSpan(this.rbMale, 2);
this.rbMale.Size = new System.Drawing.Size(43, 87);
this.rbMale.TabIndex = 1;
this.rbMale.UseVisualStyleBackColor = true;
this.rbMale.Click += new System.EventHandler(this.rbMale_Click);
//
// tbCharacterName
//
this.tbCharacterName.Dock = System.Windows.Forms.DockStyle.Fill;
this.tbCharacterName.Location = new System.Drawing.Point(13, 16);
this.tbCharacterName.Name = "tbCharacterName";
this.tbCharacterName.Size = new System.Drawing.Size(200, 20);
this.tbCharacterName.TabIndex = 4;
this.tbCharacterName.TextChanged += new System.EventHandler(this.tbCharacterName_TextChanged);
//
// gbRace
//
this.gbRace.Controls.Add(this.tlpRaces);
this.gbRace.Location = new System.Drawing.Point(13, 13);
this.gbRace.Name = "gbRace";
this.gbRace.Size = new System.Drawing.Size(470, 135);
this.gbRace.TabIndex = 5;
this.gbRace.TabStop = false;
this.gbRace.Text = "Race";
//
// tlpRaces
//
this.tlpRaces.ColumnCount = 4;
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tlpRaces.Controls.Add(this.pictureBox3, 3, 0);
this.tlpRaces.Controls.Add(this.pictureBox2, 2, 0);
this.tlpRaces.Controls.Add(this.pictureBox1, 1, 0);
this.tlpRaces.Controls.Add(this.rbCaldari, 1, 1);
this.tlpRaces.Controls.Add(this.rbAmarr, 0, 1);
this.tlpRaces.Controls.Add(this.rbGallente, 2, 1);
this.tlpRaces.Controls.Add(this.rbMinmatar, 3, 1);
this.tlpRaces.Controls.Add(this.pbAmarr, 0, 0);
this.tlpRaces.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpRaces.Location = new System.Drawing.Point(3, 16);
this.tlpRaces.Name = "tlpRaces";
this.tlpRaces.RowCount = 2;
this.tlpRaces.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 71.94244F));
this.tlpRaces.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 28.05755F));
this.tlpRaces.Size = new System.Drawing.Size(464, 116);
this.tlpRaces.TabIndex = 0;
//
// pictureBox3
//
this.pictureBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image")));
this.pictureBox3.Location = new System.Drawing.Point(351, 3);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(110, 77);
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox3.TabIndex = 7;
this.pictureBox3.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image")));
this.pictureBox2.Location = new System.Drawing.Point(235, 3);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(110, 77);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox2.TabIndex = 6;
this.pictureBox2.TabStop = false;
//
// pictureBox1
//
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(119, 3);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(110, 77);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// rbCaldari
//
this.rbCaldari.AutoSize = true;
this.rbCaldari.Location = new System.Drawing.Point(168, 86);
this.rbCaldari.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbCaldari.Name = "rbCaldari";
this.rbCaldari.Size = new System.Drawing.Size(14, 13);
this.rbCaldari.TabIndex = 1;
this.rbCaldari.UseVisualStyleBackColor = true;
this.rbCaldari.Click += new System.EventHandler(this.rbCaldari_Click);
//
// rbAmarr
//
this.rbAmarr.AutoSize = true;
this.rbAmarr.Checked = true;
this.rbAmarr.Location = new System.Drawing.Point(52, 86);
this.rbAmarr.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbAmarr.Name = "rbAmarr";
this.rbAmarr.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.rbAmarr.Size = new System.Drawing.Size(14, 13);
this.rbAmarr.TabIndex = 0;
this.rbAmarr.TabStop = true;
this.rbAmarr.UseVisualStyleBackColor = true;
this.rbAmarr.Click += new System.EventHandler(this.rbAmarr_Click);
//
// rbGallente
//
this.rbGallente.AutoSize = true;
this.rbGallente.Location = new System.Drawing.Point(284, 86);
this.rbGallente.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbGallente.Name = "rbGallente";
this.rbGallente.Size = new System.Drawing.Size(14, 13);
this.rbGallente.TabIndex = 2;
this.rbGallente.UseVisualStyleBackColor = true;
this.rbGallente.Click += new System.EventHandler(this.rbGallente_Click);
//
// rbMinmatar
//
this.rbMinmatar.AutoSize = true;
this.rbMinmatar.Location = new System.Drawing.Point(400, 86);
this.rbMinmatar.Margin = new System.Windows.Forms.Padding(52, 3, 3, 3);
this.rbMinmatar.Name = "rbMinmatar";
this.rbMinmatar.Size = new System.Drawing.Size(14, 13);
this.rbMinmatar.TabIndex = 3;
this.rbMinmatar.UseVisualStyleBackColor = true;
this.rbMinmatar.Click += new System.EventHandler(this.rbMinmatar_Click);
//
// pbAmarr
//
this.pbAmarr.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAmarr.Image = ((System.Drawing.Image)(resources.GetObject("pbAmarr.Image")));
this.pbAmarr.Location = new System.Drawing.Point(3, 3);
this.pbAmarr.Name = "pbAmarr";
this.pbAmarr.Size = new System.Drawing.Size(110, 77);
this.pbAmarr.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAmarr.TabIndex = 4;
this.pbAmarr.TabStop = false;
//
// gbBloodline
//
this.gbBloodline.Controls.Add(this.tlpBloodline);
this.gbBloodline.Location = new System.Drawing.Point(13, 156);
this.gbBloodline.Name = "gbBloodline";
this.gbBloodline.Size = new System.Drawing.Size(148, 212);
this.gbBloodline.TabIndex = 6;
this.gbBloodline.TabStop = false;
this.gbBloodline.Text = "Bloodline";
//
// tlpBloodline
//
this.tlpBloodline.ColumnCount = 2;
this.tlpBloodline.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpBloodline.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpBloodline.Controls.Add(this.rbBloodline3, 0, 2);
this.tlpBloodline.Controls.Add(this.rbBloodline2, 0, 1);
this.tlpBloodline.Controls.Add(this.pbBloodline3, 1, 2);
this.tlpBloodline.Controls.Add(this.pbBloodline1, 1, 0);
this.tlpBloodline.Controls.Add(this.pbBloodline2, 1, 1);
this.tlpBloodline.Controls.Add(this.rbBloodline1, 0, 0);
this.tlpBloodline.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpBloodline.Location = new System.Drawing.Point(3, 16);
this.tlpBloodline.Name = "tlpBloodline";
this.tlpBloodline.Padding = new System.Windows.Forms.Padding(0, 0, 0, 6);
this.tlpBloodline.RowCount = 3;
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tlpBloodline.Size = new System.Drawing.Size(142, 193);
this.tlpBloodline.TabIndex = 0;
//
// rbBloodline3
//
this.rbBloodline3.AutoSize = true;
this.rbBloodline3.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline3.Location = new System.Drawing.Point(3, 127);
this.rbBloodline3.Name = "rbBloodline3";
this.rbBloodline3.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline3.Size = new System.Drawing.Size(43, 57);
this.rbBloodline3.TabIndex = 5;
this.rbBloodline3.UseVisualStyleBackColor = true;
this.rbBloodline3.Click += new System.EventHandler(this.rbBloodline3_Click);
//
// rbBloodline2
//
this.rbBloodline2.AutoSize = true;
this.rbBloodline2.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline2.Location = new System.Drawing.Point(3, 65);
this.rbBloodline2.Name = "rbBloodline2";
this.rbBloodline2.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline2.Size = new System.Drawing.Size(43, 56);
this.rbBloodline2.TabIndex = 4;
this.rbBloodline2.UseVisualStyleBackColor = true;
this.rbBloodline2.Click += new System.EventHandler(this.rbBloodline2_Click);
//
// pbBloodline3
//
this.pbBloodline3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline3.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline3.Image")));
this.pbBloodline3.Location = new System.Drawing.Point(49, 124);
this.pbBloodline3.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline3.Name = "pbBloodline3";
this.pbBloodline3.Size = new System.Drawing.Size(93, 63);
this.pbBloodline3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline3.TabIndex = 2;
this.pbBloodline3.TabStop = false;
//
// pbBloodline1
//
this.pbBloodline1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline1.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline1.Image")));
this.pbBloodline1.Location = new System.Drawing.Point(49, 0);
this.pbBloodline1.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline1.Name = "pbBloodline1";
this.pbBloodline1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.pbBloodline1.Size = new System.Drawing.Size(93, 62);
this.pbBloodline1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline1.TabIndex = 0;
this.pbBloodline1.TabStop = false;
//
// pbBloodline2
//
this.pbBloodline2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbBloodline2.Image = ((System.Drawing.Image)(resources.GetObject("pbBloodline2.Image")));
this.pbBloodline2.Location = new System.Drawing.Point(49, 62);
this.pbBloodline2.Margin = new System.Windows.Forms.Padding(0);
this.pbBloodline2.Name = "pbBloodline2";
this.pbBloodline2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5);
this.pbBloodline2.Size = new System.Drawing.Size(93, 62);
this.pbBloodline2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbBloodline2.TabIndex = 1;
this.pbBloodline2.TabStop = false;
//
// rbBloodline1
//
this.rbBloodline1.AutoSize = true;
this.rbBloodline1.Checked = true;
this.rbBloodline1.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbBloodline1.Location = new System.Drawing.Point(3, 3);
this.rbBloodline1.Name = "rbBloodline1";
this.rbBloodline1.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.rbBloodline1.Size = new System.Drawing.Size(43, 56);
this.rbBloodline1.TabIndex = 3;
this.rbBloodline1.TabStop = true;
this.rbBloodline1.UseVisualStyleBackColor = true;
this.rbBloodline1.Click += new System.EventHandler(this.rbBloodline1_Click);
//
// gbAncestry
//
this.gbAncestry.Controls.Add(this.tlpAncestry);
this.gbAncestry.Location = new System.Drawing.Point(165, 156);
this.gbAncestry.Name = "gbAncestry";
this.gbAncestry.Size = new System.Drawing.Size(166, 212);
this.gbAncestry.TabIndex = 7;
this.gbAncestry.TabStop = false;
this.gbAncestry.Text = "Ancestry";
//
// tlpAncestry
//
this.tlpAncestry.ColumnCount = 2;
this.tlpAncestry.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpAncestry.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpAncestry.Controls.Add(this.lblAncestry1, 1, 1);
this.tlpAncestry.Controls.Add(this.rbAncestry2, 0, 2);
this.tlpAncestry.Controls.Add(this.pbAncestry1, 1, 0);
this.tlpAncestry.Controls.Add(this.rbAncestry1, 0, 0);
this.tlpAncestry.Controls.Add(this.rbAncestry3, 0, 4);
this.tlpAncestry.Controls.Add(this.lblAncestry3, 1, 5);
this.tlpAncestry.Controls.Add(this.lblAncestry2, 1, 3);
this.tlpAncestry.Controls.Add(this.pbAncestry2, 1, 2);
this.tlpAncestry.Controls.Add(this.pbAncestry3, 1, 4);
this.tlpAncestry.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpAncestry.Location = new System.Drawing.Point(3, 16);
this.tlpAncestry.Name = "tlpAncestry";
this.tlpAncestry.Padding = new System.Windows.Forms.Padding(0, 0, 0, 6);
this.tlpAncestry.RowCount = 6;
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.32972F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33514F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
this.tlpAncestry.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33514F));
this.tlpAncestry.Size = new System.Drawing.Size(160, 193);
this.tlpAncestry.TabIndex = 0;
//
// lblAncestry1
//
this.lblAncestry1.AutoSize = true;
this.lblAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry1.ImageIndex = 0;
this.lblAncestry1.Location = new System.Drawing.Point(56, 44);
this.lblAncestry1.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry1.Name = "lblAncestry1";
this.lblAncestry1.Size = new System.Drawing.Size(104, 18);
this.lblAncestry1.TabIndex = 8;
this.lblAncestry1.Text = "Liberal Holders";
this.lblAncestry1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// rbAncestry2
//
this.rbAncestry2.AutoSize = true;
this.rbAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry2.Location = new System.Drawing.Point(3, 65);
this.rbAncestry2.Name = "rbAncestry2";
this.rbAncestry2.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry2, 2);
this.rbAncestry2.Size = new System.Drawing.Size(50, 56);
this.rbAncestry2.TabIndex = 5;
this.rbAncestry2.UseVisualStyleBackColor = true;
this.rbAncestry2.Click += new System.EventHandler(this.rbAncestry2_Click);
//
// pbAncestry1
//
this.pbAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry1.Location = new System.Drawing.Point(56, 0);
this.pbAncestry1.Margin = new System.Windows.Forms.Padding(0);
this.pbAncestry1.Name = "pbAncestry1";
this.pbAncestry1.Size = new System.Drawing.Size(104, 44);
this.pbAncestry1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry1.TabIndex = 2;
this.pbAncestry1.TabStop = false;
//
// rbAncestry1
//
this.rbAncestry1.AutoSize = true;
this.rbAncestry1.Checked = true;
this.rbAncestry1.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry1.Location = new System.Drawing.Point(3, 3);
this.rbAncestry1.Name = "rbAncestry1";
this.rbAncestry1.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry1, 2);
this.rbAncestry1.Size = new System.Drawing.Size(50, 56);
this.rbAncestry1.TabIndex = 4;
this.rbAncestry1.TabStop = true;
this.rbAncestry1.UseVisualStyleBackColor = true;
this.rbAncestry1.Click += new System.EventHandler(this.rbAncestry1_Click);
//
// rbAncestry3
//
this.rbAncestry3.AutoSize = true;
this.rbAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.rbAncestry3.Location = new System.Drawing.Point(3, 127);
this.rbAncestry3.Name = "rbAncestry3";
this.rbAncestry3.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.tlpAncestry.SetRowSpan(this.rbAncestry3, 2);
this.rbAncestry3.Size = new System.Drawing.Size(50, 57);
this.rbAncestry3.TabIndex = 6;
this.rbAncestry3.UseVisualStyleBackColor = true;
this.rbAncestry3.Click += new System.EventHandler(this.rbAncestry3_Click);
//
// lblAncestry3
//
this.lblAncestry3.AutoSize = true;
this.lblAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry3.ImageIndex = 2;
this.lblAncestry3.Location = new System.Drawing.Point(56, 168);
this.lblAncestry3.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry3.Name = "lblAncestry3";
this.lblAncestry3.Size = new System.Drawing.Size(104, 19);
this.lblAncestry3.TabIndex = 9;
this.lblAncestry3.Text = "Religious Reclaimers";
this.lblAncestry3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// lblAncestry2
//
this.lblAncestry2.AutoSize = true;
this.lblAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblAncestry2.ImageIndex = 1;
this.lblAncestry2.Location = new System.Drawing.Point(56, 106);
this.lblAncestry2.Margin = new System.Windows.Forms.Padding(0);
this.lblAncestry2.Name = "lblAncestry2";
this.lblAncestry2.Size = new System.Drawing.Size(104, 18);
this.lblAncestry2.TabIndex = 7;
this.lblAncestry2.Text = "Weathy Commoners";
this.lblAncestry2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// pbAncestry2
//
this.pbAncestry2.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry2.Location = new System.Drawing.Point(59, 65);
this.pbAncestry2.Name = "pbAncestry2";
this.pbAncestry2.Size = new System.Drawing.Size(98, 38);
this.pbAncestry2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry2.TabIndex = 10;
this.pbAncestry2.TabStop = false;
//
// pbAncestry3
//
this.pbAncestry3.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbAncestry3.Location = new System.Drawing.Point(59, 127);
this.pbAncestry3.Name = "pbAncestry3";
this.pbAncestry3.Size = new System.Drawing.Size(98, 38);
this.pbAncestry3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbAncestry3.TabIndex = 11;
this.pbAncestry3.TabStop = false;
//
// ilAncestry
//
this.ilAncestry.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilAncestry.ImageStream")));
this.ilAncestry.TransparentColor = System.Drawing.Color.Transparent;
this.ilAncestry.Images.SetKeyName(0, "Liberal.png");
this.ilAncestry.Images.SetKeyName(1, "Wealthy.png");
this.ilAncestry.Images.SetKeyName(2, "Religious.png");
this.ilAncestry.Images.SetKeyName(3, "Free.png");
this.ilAncestry.Images.SetKeyName(4, "Border.png");
this.ilAncestry.Images.SetKeyName(5, "Navy.png");
this.ilAncestry.Images.SetKeyName(6, "Cyber.png");
this.ilAncestry.Images.SetKeyName(7, "Unionists.png");
this.ilAncestry.Images.SetKeyName(8, "Zealots.png");
this.ilAncestry.Images.SetKeyName(9, "Merchandisers.png");
this.ilAncestry.Images.SetKeyName(10, "Scientists.png");
this.ilAncestry.Images.SetKeyName(11, "Tube.png");
this.ilAncestry.Images.SetKeyName(12, "Entrepreneurs.png");
this.ilAncestry.Images.SetKeyName(13, "Mercs.png");
this.ilAncestry.Images.SetKeyName(14, "Dissenters.png");
this.ilAncestry.Images.SetKeyName(15, "Inventors.png");
this.ilAncestry.Images.SetKeyName(16, "Monks.png");
this.ilAncestry.Images.SetKeyName(17, "Stargazers.png");
this.ilAncestry.Images.SetKeyName(18, "Activists.png");
this.ilAncestry.Images.SetKeyName(19, "Miners.png");
this.ilAncestry.Images.SetKeyName(20, "Immigrants.png");
this.ilAncestry.Images.SetKeyName(21, "Artists.png");
this.ilAncestry.Images.SetKeyName(22, "Diplomats.png");
this.ilAncestry.Images.SetKeyName(23, "Reborn.png");
this.ilAncestry.Images.SetKeyName(24, "Sang.png");
this.ilAncestry.Images.SetKeyName(25, "Saan.png");
this.ilAncestry.Images.SetKeyName(26, "Jing.png");
this.ilAncestry.Images.SetKeyName(27, "Tinkerers.png");
this.ilAncestry.Images.SetKeyName(28, "Traders.png");
this.ilAncestry.Images.SetKeyName(29, "Rebels.png");
this.ilAncestry.Images.SetKeyName(30, "Workers.png");
this.ilAncestry.Images.SetKeyName(31, "Tribal.png");
this.ilAncestry.Images.SetKeyName(32, "Slave.png");
this.ilAncestry.Images.SetKeyName(33, "Drifters.png");
this.ilAncestry.Images.SetKeyName(34, "Mystics.png");
this.ilAncestry.Images.SetKeyName(35, "Retailers.png");
//
// gbGender
//
this.gbGender.Controls.Add(this.tlpGender);
this.gbGender.Location = new System.Drawing.Point(337, 156);
this.gbGender.Name = "gbGender";
this.gbGender.Size = new System.Drawing.Size(146, 212);
this.gbGender.TabIndex = 8;
this.gbGender.TabStop = false;
this.gbGender.Text = "Gender";
//
// gbCharacterName
//
this.gbCharacterName.Controls.Add(this.tbCharacterName);
this.gbCharacterName.Location = new System.Drawing.Point(135, 371);
this.gbCharacterName.Name = "gbCharacterName";
this.gbCharacterName.Padding = new System.Windows.Forms.Padding(13, 3, 13, 3);
this.gbCharacterName.Size = new System.Drawing.Size(226, 46);
this.gbCharacterName.TabIndex = 9;
this.gbCharacterName.TabStop = false;
this.gbCharacterName.Text = "Blank Character Name";
//
// ilBloodline
//
this.ilBloodline.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilBloodline.ImageStream")));
this.ilBloodline.TransparentColor = System.Drawing.Color.Transparent;
this.ilBloodline.Images.SetKeyName(0, "amarr.png");
this.ilBloodline.Images.SetKeyName(1, "ni-kunni.png");
this.ilBloodline.Images.SetKeyName(2, "khanid.png");
this.ilBloodline.Images.SetKeyName(3, "deteis.png");
this.ilBloodline.Images.SetKeyName(4, "civire.png");
this.ilBloodline.Images.SetKeyName(5, "achura.png");
this.ilBloodline.Images.SetKeyName(6, "gallente.png");
this.ilBloodline.Images.SetKeyName(7, "intaki.png");
this.ilBloodline.Images.SetKeyName(8, "jin-mei.png");
this.ilBloodline.Images.SetKeyName(9, "sebiestor.png");
this.ilBloodline.Images.SetKeyName(10, "brutor.png");
this.ilBloodline.Images.SetKeyName(11, "verokhior.png");
//
// tlpGender
//
this.tlpGender.ColumnCount = 2;
this.tlpGender.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
this.tlpGender.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 65F));
this.tlpGender.Controls.Add(this.rbFemale, 0, 0);
this.tlpGender.Controls.Add(this.pbFemale, 1, 0);
this.tlpGender.Controls.Add(this.rbMale, 0, 2);
this.tlpGender.Controls.Add(this.pbMale, 1, 2);
this.tlpGender.Controls.Add(this.lblFemale, 1, 1);
this.tlpGender.Controls.Add(this.lblMale, 1, 3);
this.tlpGender.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpGender.Location = new System.Drawing.Point(3, 16);
this.tlpGender.Name = "tlpGender";
this.tlpGender.RowCount = 4;
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpGender.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tlpGender.Size = new System.Drawing.Size(140, 193);
this.tlpGender.TabIndex = 2;
//
// pbFemale
//
this.pbFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbFemale.Image = ((System.Drawing.Image)(resources.GetObject("pbFemale.Image")));
this.pbFemale.Location = new System.Drawing.Point(52, 3);
this.pbFemale.Name = "pbFemale";
this.pbFemale.Size = new System.Drawing.Size(85, 74);
this.pbFemale.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbFemale.TabIndex = 2;
this.pbFemale.TabStop = false;
//
// pbMale
//
this.pbMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbMale.Image = ((System.Drawing.Image)(resources.GetObject("pbMale.Image")));
this.pbMale.Location = new System.Drawing.Point(52, 103);
this.pbMale.Name = "pbMale";
this.pbMale.Size = new System.Drawing.Size(85, 66);
this.pbMale.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pbMale.TabIndex = 3;
this.pbMale.TabStop = false;
//
// lblFemale
//
this.lblFemale.AutoSize = true;
this.lblFemale.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblFemale.Location = new System.Drawing.Point(52, 80);
this.lblFemale.Name = "lblFemale";
this.lblFemale.Size = new System.Drawing.Size(85, 20);
this.lblFemale.TabIndex = 4;
this.lblFemale.Text = "Female";
this.lblFemale.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// lblMale
//
this.lblMale.AutoSize = true;
this.lblMale.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMale.Location = new System.Drawing.Point(52, 172);
this.lblMale.Name = "lblMale";
this.lblMale.Size = new System.Drawing.Size(85, 21);
this.lblMale.TabIndex = 5;
this.lblMale.Text = "Male";
this.lblMale.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// BlankCharacterControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.Controls.Add(this.gbCharacterName);
this.Controls.Add(this.gbGender);
this.Controls.Add(this.gbAncestry);
this.Controls.Add(this.gbBloodline);
this.Controls.Add(this.gbRace);
this.Name = "BlankCharacterControl";
this.Size = new System.Drawing.Size(497, 425);
this.Load += new System.EventHandler(this.BlankCharacterControl_Load);
this.gbRace.ResumeLayout(false);
this.tlpRaces.ResumeLayout(false);
this.tlpRaces.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAmarr)).EndInit();
this.gbBloodline.ResumeLayout(false);
this.tlpBloodline.ResumeLayout(false);
this.tlpBloodline.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbBloodline2)).EndInit();
this.gbAncestry.ResumeLayout(false);
this.tlpAncestry.ResumeLayout(false);
this.tlpAncestry.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAncestry3)).EndInit();
this.gbGender.ResumeLayout(false);
this.gbCharacterName.ResumeLayout(false);
this.gbCharacterName.PerformLayout();
this.tlpGender.ResumeLayout(false);
this.tlpGender.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbFemale)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbMale)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox gbRace;
private System.Windows.Forms.RadioButton rbAmarr;
private System.Windows.Forms.GroupBox gbBloodline;
private System.Windows.Forms.GroupBox gbAncestry;
private System.Windows.Forms.GroupBox gbGender;
private System.Windows.Forms.GroupBox gbCharacterName;
private System.Windows.Forms.RadioButton rbCaldari;
private System.Windows.Forms.ImageList ilBloodline;
private System.Windows.Forms.TableLayoutPanel tlpRaces;
private System.Windows.Forms.RadioButton rbGallente;
private System.Windows.Forms.RadioButton rbMinmatar;
private System.Windows.Forms.PictureBox pbAmarr;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.RadioButton rbFemale;
private System.Windows.Forms.RadioButton rbMale;
private System.Windows.Forms.PictureBox pbBloodline1;
private System.Windows.Forms.PictureBox pbBloodline2;
private System.Windows.Forms.PictureBox pbBloodline3;
private System.Windows.Forms.TableLayoutPanel tlpAncestry;
private System.Windows.Forms.TableLayoutPanel tlpBloodline;
private System.Windows.Forms.RadioButton rbBloodline3;
private System.Windows.Forms.RadioButton rbBloodline2;
private System.Windows.Forms.RadioButton rbBloodline1;
private System.Windows.Forms.RadioButton rbAncestry1;
private System.Windows.Forms.RadioButton rbAncestry2;
private System.Windows.Forms.RadioButton rbAncestry3;
private System.Windows.Forms.Label lblAncestry2;
private System.Windows.Forms.ImageList ilAncestry;
private System.Windows.Forms.Label lblAncestry1;
private System.Windows.Forms.Label lblAncestry3;
private System.Windows.Forms.PictureBox pbAncestry1;
private System.Windows.Forms.PictureBox pbAncestry2;
private System.Windows.Forms.PictureBox pbAncestry3;
private System.Windows.Forms.TextBox tbCharacterName;
private System.Windows.Forms.TableLayoutPanel tlpGender;
private System.Windows.Forms.PictureBox pbFemale;
private System.Windows.Forms.PictureBox pbMale;
private System.Windows.Forms.Label lblFemale;
private System.Windows.Forms.Label lblMale;
}
}
================================================
FILE: src/EVEMon/BlankCharacterControl.cs
================================================
using System;
using System.Drawing;
using System.Windows.Forms;
using EVEMon.Common.Constants;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
namespace EVEMon.BlankCharacter
{
public partial class BlankCharacterControl : UserControl
{
private Font m_amarrFont;
private Font m_caldariFont;
private Font m_gallenteFont;
private Font m_minmatarFont;
///
/// Initializes a new instance of the class.
///
public BlankCharacterControl()
{
InitializeComponent();
}
///
/// Handles the Load event of the BlankCharacterControl.
///
/// The source of the event.
/// The instance containing the event data.
private void BlankCharacterControl_Load(object sender, EventArgs e)
{
ForeColor = SystemColors.GrayText;
m_amarrFont = FontFactory.GetFont("Niagara Solid", 10f);
m_caldariFont = FontFactory.GetFont("Impact", 8.25f);
m_gallenteFont = FontFactory.GetFont("Arial Rounded MT Bold", 8.25f);
m_minmatarFont = FontFactory.GetFont("Moolboran", 9f);
BlankCharacterUIHelper.Race = Race.Amarr;
UpdateBloodlineControl();
}
#region Update Methods
///
/// Updates the bloodline controls.
///
private void UpdateBloodlineControl()
{
int index = 0;
switch (BlankCharacterUIHelper.Race)
{
case Race.Amarr:
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_amarrFont;
break;
case Race.Caldari:
index = 3;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_caldariFont;
break;
case Race.Gallente:
index = 6;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_gallenteFont;
break;
case Race.Minmatar:
index = 9;
lblAncestry1.Font = lblAncestry2.Font = lblAncestry3.Font = m_minmatarFont;
break;
default:
throw new NotImplementedException();
}
pbBloodline1.Image = ilBloodline.Images[index];
pbBloodline2.Image = ilBloodline.Images[index + 1];
pbBloodline3.Image = ilBloodline.Images[index + 2];
pbBloodline1.Tag = (Bloodline)Enum.ToObject(typeof(Bloodline), index);
pbBloodline2.Tag = (Bloodline)Enum.ToObject(typeof(Bloodline), index + 1);
pbBloodline3.Tag = (Bloodline)Enum.ToObject(typeof(Bloodline), index + 2);
if (rbBloodline1.Checked)
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline1.Tag;
if (rbBloodline2.Checked)
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline2.Tag;
if (rbBloodline3.Checked)
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline3.Tag;
UpdateAncestryControl();
}
///
/// Updates the ancestry controls.
///
private void UpdateAncestryControl()
{
int index = 0;
switch (BlankCharacterUIHelper.Bloodline)
{
case Bloodline.Amarr:
break;
case Bloodline.Ni_Kunni:
index = 3;
break;
case Bloodline.Khanid:
index = 6;
break;
case Bloodline.Deteis:
index = 9;
break;
case Bloodline.Civire:
index = 12;
break;
case Bloodline.Achura:
index = 15;
break;
case Bloodline.Gallente:
index = 18;
break;
case Bloodline.Intaki:
index = 21;
break;
case Bloodline.Jin_Mei:
index = 24;
break;
case Bloodline.Sebiestor:
index = 27;
break;
case Bloodline.Brutor:
index = 30;
break;
case Bloodline.Vherokior:
index = 33;
break;
default:
throw new NotImplementedException();
}
pbAncestry1.Image = ilAncestry.Images[index];
pbAncestry2.Image = ilAncestry.Images[index + 1];
pbAncestry3.Image = ilAncestry.Images[index + 2];
lblAncestry1.Text =
((Ancestry)Enum.ToObject(typeof(Ancestry), index)).ToString().ToUpper(CultureConstants.DefaultCulture).Replace(
"_", " ");
lblAncestry2.Text =
((Ancestry)Enum.ToObject(typeof(Ancestry), index + 1)).ToString().ToUpper(CultureConstants.DefaultCulture).Replace
("_", " ");
lblAncestry3.Text =
((Ancestry)Enum.ToObject(typeof(Ancestry), index + 2)).ToString().ToUpper(CultureConstants.DefaultCulture).Replace
("_", " ");
lblAncestry1.Tag = (Ancestry)Enum.ToObject(typeof(Ancestry), index);
lblAncestry2.Tag = (Ancestry)Enum.ToObject(typeof(Ancestry), index + 1);
lblAncestry3.Tag = (Ancestry)Enum.ToObject(typeof(Ancestry), index + 2);
if (rbAncestry1.Checked)
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry1.Tag;
if (rbAncestry2.Checked)
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry2.Tag;
if (rbAncestry3.Checked)
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry3.Tag;
}
#endregion
#region Event Handlers
///
/// Handles the Click event of the rbAmarr control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAmarr_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Amarr;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbCaldari control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbCaldari_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Caldari;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbGallente control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbGallente_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Gallente;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbMinmatar control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbMinmatar_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Race = Race.Minmatar;
UpdateBloodlineControl();
}
///
/// Handles the Click event of the rbBloodline1 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline1_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline1.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbBloodline2 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline2_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline2.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbBloodline3 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbBloodline3_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Bloodline = (Bloodline)pbBloodline3.Tag;
UpdateAncestryControl();
}
///
/// Handles the Click event of the rbAncestry1 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry1_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry1.Tag;
}
///
/// Handles the Click event of the rbAncestry2 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry2_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry2.Tag;
}
///
/// Handles the Click event of the rbAncestry3 control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbAncestry3_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Ancestry = (Ancestry)lblAncestry3.Tag;
}
///
/// Handles the Click event of the rbFemale control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbFemale_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Gender = Gender.Female;
}
///
/// Handles the Click event of the rbMale control.
///
/// The source of the event.
/// The instance containing the event data.
private void rbMale_Click(object sender, EventArgs e)
{
BlankCharacterUIHelper.Gender = Gender.Male;
}
///
/// Handles the TextChanged event of the tbCharacterName control.
///
/// The source of the event.
/// The instance containing the event data.
private void tbCharacterName_TextChanged(object sender, EventArgs e)
{
BlankCharacterUIHelper.CharacterName = tbCharacterName.Text;
}
#endregion
}
}
================================================
FILE: src/EVEMon/BlankCharacterControl.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
rkJggg==
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
0MbAg2HgfwFn37I1Hks2+gAAAABJRU5ErkJggg==
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
galotLtVDAAAAABJRU5ErkJggg==
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
BEXWJdoXTfdOAAAAAElFTkSuQmCC
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
gg==
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
Ba4QkBKiAAAAAElFTkSuQmCC
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
126, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
+QAAAk1TRnQBSQFMAgEBJAEAASgBAAEoAQABMAEAATABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABwAMAAeABAQIAAQEBAAEIBgABaAEBFwABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHA
AdwBwAEAAfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANC
AQADOQEAAYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/
ATMDAAFmAwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJm
AgABZgGZAgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEz
AgABzAFmAgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEA
AWYBAAEzAQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/
AQABMwFmAgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEA
ATMBmQFmAQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEA
ATMCzAEAATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEA
ATMBAAFmAQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEz
AZkBAAFmATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEA
AWYBmQFmAQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFm
AcwB/wEAAWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEz
AZkBAAGZAQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIA
AZkBZgEzAQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHM
AQACmQH/AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZ
Af8BMwEAAZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEA
AZkBAAHMAQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFm
AgABzAFmATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFm
AQABzAKZAQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/
AgABzAH/ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEA
AZkBAAHMATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEz
AQABzAJmAQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEA
Af8BmQHMAQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEA
Av8BMwEAAcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEA
Av8BZgEAASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4
AQAB8AH7Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA///AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/ACYAAf+8AAL/AQAC9AH/ZAAB/wH0Af9QAAT/AvMBvAEcAe8B8QH/YAAC/wHyAe0B8QH/TwAC/wHy
AfMC9AHxAZMB7QGSAfAB9AT/WgAB/wHzAfQBBwFEAbwC/1AAAfcB8AEHAfIB9AG8ARwB6wFtAZIC8gHv
AfEB/wMAAv9TAAH/AfIBBwHvAQcBbgG8AvEB9AT/SwAB7QHzAf8B8wG8AQcC7AHtAe8B7QH3Ae8B9wEH
AfIB8wHyArwB8wL/TQAC/wL0AfAB7wEHAe8BvAHxAfABBwHwAfID8AHyAfQB/xkAAv8BAA//HQAB7QHy
A/8B8AFuAesB7wH0AfEBBwH3AewB7QGSAe8DkgHvAfEB8wH/HAAR/x8AAf8B8QEHAe8C7AEHAbwB8AHy
AbwBBwLwBAcB8QH/FgAE/wH0Av8N9Ab/GAAB7AHxAf8BAAH/AfABbgHsAe0BvAH3AvMB7wLsAZIB9wPv
AgcB8wH/GQAC/wP0BfMG9Ab/HAAB/wHyAQcB7AFLARMB7AIHAusGBwHxAfIB/xQAA/8C9AfzAfIB8AIH
AfMB8gHxAvIB8QX0B/8SAAHsAbwB/wEAAf8BBwFuAe0B8AH0AW4B7wHyAfMB8AEHA5IB7wMHAfAB9AT/
EwAC/wH0AfMB8QHwAbwBBwHvAZMB7wEHAbwB8AHxAfIC8wX0Af8ZAAP/AQAB/wHzAewBcwFuAUoB7QHs
AUsBEwXvAbwC8gH0AQAE/w4AAv8B9AHzAfABBwG8AfEBBwLvAQcB7wHtA+wB7QHvBOsB8ALyAvMF9AP/
EQAB7AHwAf8BAAH/Ae8C7AHzAQAB7AHvAfEB8AG8AQcC8AQHAbwB8AH0Av8C9AH/EQAC/wHzAfABBwFz
AW4BFAFEAUMBIgFDARUBEgHrAewB7QHvAgcBvAEHAbwB8gH0GQAB8wHwAfMC9AG8AXMBwwGZAW4BkgHs
AXQBSgHtAW4BSwJuAe8B8AG8AfMC/wH0AfMB9AH/DQAB/wH0AfMB7wIVAesBkgHsARMB6gEVAeoCFALq
AfcB7AHrARIB6gHrAewBBwHvARQBBwHyBPMD9AL/DwABbgG8Af8BAAH0ARwC7AHzAfABbgHxAf8B8wHv
AUQBBwW8AfAB8QHyAfMB/wH0AfMB9AH/DwAC/wH0AfABbgkOAwsDEQFEAfcB8gH0Av8ZAAHzAQcB7wHq
AewB9wEcAsMBmQHvAQcBcwFEAXMBdAFKAREBFQFuAbwB8AHyAfQB/wH0AfIB8wH/DQAB8wG8Ae8B7AFt
AUMBEgFtAesB7AHrAeoB6wGSAusB9wHvAQcC7wHsAe0B6wFtARQBQwHqAQcBvAHvAQcB8QPzAvQD/wwA
AW0BvAH/AQAB9AHtAusB7QHrAZIB9AEAAf8B8AETAfcBvAHzAfQC8wHyAvMB8gLzA/QC/w0AAf8B9AHw
AW4GDgEQAUsBdAQcAgcBvAHxAvMB9AL/GQAB9AG8AW4DSwFEA24B9wEcAW4BSwFKAXQBSgJEAW4BBwHy
AfQC/wH0AvMB9AH/CwAB8QHtARIBFQFtAesBEgGSAuwBbQESAewB9wMHAbwBBwHwAQcC7wIHAe8B9wHr
AuwBFAJtAewBvALyAvMB9AL/DAABbgG8AgAB8wHtA+sBbQHsAe8B8AHvAewBFAHvAvEB8gH0BP8B9ALz
AvQD/w0AAf8B9AG8AREGDgFLAXQCkwSZAQcCvAHyAfMB9Af/FAAB/wHxARwBGgEHAUsBRAHvAfEB7QOT
AUsBbgFEARABQwFEAW4BBwH0A/8B9ALzAfQB/woAAfIB6gESAeoB9wHvAQcBvAHwAgcBvAEHAfcB7wG8
AfECvAEHBu8BBwG8Ae8BBwG8AewBFAHrAe8B6wHwAvEB8gHzAfQB/wwAAewB8AIAAfIBHALsAm0BbgES
AUMBEQFKARQB8QHyAvAB8QHyAfMB9AEAAv8E9AH/DgAB/wH0AfABFQUOAQ8BSwJ0AZMCdAFzAm4BdAGT
AQcB8gH0Bf8B9AP/EwAB8wH2ARsBBwFLAe8B8QFvApQCmQREAUMBRAHvAfEB8wH/AgAB/wPzAfQJAAH/
AfEC6gHvAfQB8wHyAvMB8gHxA/ABvAPwAQcBkgHtAuwC7QL3Au8BBwG8AQcBkgLsAesB9wG8AfEC8gHz
Af8LAAH/AW0BvAIAAfIBBwEcAewC6wHqARMBQwFEAUoB8QH/AfIBvAHyAfMC8gHxAfMD9AT/DAAD/wH0
AfEBkwFEBg4EEQEQBA4BEAESAbwD9ALzAfEB8gHzAvQC/xEAAf8BvAGTAe0B6wGSAXQBdQKaApkBRQJE
AUUB7QHvAbwB8QHyBPQB8wL0Af8KAAH0AuwBBwH3AvEBvAEHAbwE8gHxAfIB8AHtAeoBFQJDAeoBbQHr
Ae0BkgTvAwcB7wHtAewB9wHxAvMB9AH/CwAB/wHqAbwCAAHyAe8D7AH3ARMBFAFDAUQBbQHvAfIB/wHw
AbwB8wL0AfMB8QLyAvMB9AH/DAAC/wLzAfIB8QG8AZMBbgFEAQ8NDgHtAbwB8gHzAfIB8AG8Ae8BbQHs
AQcB8wL/DwAB/wIAAfQBvAHxAfIB7wEWAXUBlAGaApkBRQNEAe0BcwHvA/IC8wP0Av8LAAHyAewB6gES
Ae0BFAERAUMBbQHsAQcB7APqARUBEQEPBQ4BFQHrAZIF7wEHAfABvAHtAW0B6gHwA/QB/wwAAeoBBwIA
AfEBHAGTARwBbgEcARIBFQFDAUoB7wHsAe8B/wHxAfAB9AH/AfQB/wH0A/MC9AL/CwAC/wHyAewB7wEH
ArwBBwKTCEsBRAMOAUsBkwG8A/ABvAEHAZMBRAEOARMB8AH0Af8PAAHzAv8BBwFuAewB/wHwAXQDdQHD
ARoBbgNEARQBRAGSAfIB8wLwAvQD/w0AAfQB8AEHAm0BBwG8AZIBEwMVAUMFEQIQAg8BDgEVAewB9wEH
Ae0C7wG8AQcB7wHtAe8B7AHyBP8MAAHqAbwBAAH/AfEBcwEcAZMBHAHtAeoBQwFEAW4B7AFuAfQB/wLw
AfQB8wj0BP8IAAP/AfQB7wFDARUB7AHvAgcDkwF0BHkBdAEiAg4BSgJ0BW4BSgFEAg4BDwG8AfQB/w0A
Af8B8QG8Af8B9AGUAUsBRAH0AfABdAF1AZQBGwL2Ab0BdAFLAUUCRAHsAfEB8gHvARwB8wX/DQAB/wH0
AfAB7wFtARQB6wG8AfcB7AFDARUCQwERAkMDEQEQAg8BFQHsAesBFAFtAewBvAGSAfcB7AHrAQcB8gP/
DQABbgG8AQAB/wHwAW4B6gEcAXQBSgFtAUMBSgFzAW4B8gEAAfQBvAHxAf8B8QHyAv8C9Af/BgAD/wL0
AfMBvAEcAUoBbgFzARwCkwN0BHkBSwIOAUQCdAFEAg4BIgUOARAB7AHxAfQB/w0AAfQBHAEHAf8B8wGU
AUsBRAH0AfMBkwEaA/YBGgGaAZMBmgFvAkQB7QHzAfEBHAF0AfEG/w4AAf8B8wG8Ae8B8AH0AfIB8AHs
AREBQwYVAxECEAHqAewBFQLqAW0B7wHsAm0BvAH0EAABbgG8AgABBwFKAUQBbgF0AW4BSgETAXQBkwEH
AgAB8wEHAfEB/wHwAfMCAAHzAf8BAAL/CgAC/wH0AfMB8gHwAbwBkwFvAW4BSwJEAUMDIgMRAUQDDgFE
AksCDgFLAW8BbgFKAUQBSwFzAZMB8AH0Av8NAAHxAW4BHAHyAfMBbwFLAW4B/wG8AQcEGgGaAZQCkwFv
AUQBSwEcAfMBvAF0AXUBBwH0A/8UAAH/AfQB8wHxAe0CQwETBBIBEwIVAxEBEwHtARIBQwHsAfEB8wEH
AfcB8AHzEQABSgG8AgABHAEVAUQBSgFuAXMBSwFtAW4BmQG8AQAB/wHzAbwD8AH0Av8B8AH0DAAC/wHx
AQcB7wHtAW4BHAFEFA4BDwFLAW8BdAOTAQcBvAHyAfQC/w0AAbwBGgGTAbwB8wGTAZoBkwHwAW4BSgFu
ARwFkwFuAUsBbwF0AQcB8gK8AZoBmQH0FwAB/wLzAfIB7AEVARIB6gHrAuwB6wHqARMBFAEVAhEBEwHv
AQcB7wG8AvQB/wH0Af8SAAFKAQcCAAEcAkQBSgFLAW4BSwFuAUoBmQHwAQAB/wHyA7wD8AK8AfQMAAH/
AfQBBwESARABDgFEAW4GDgEiAhUBSgNLBEoBQwEPBA4BFQFuAZMBcwHtAQcBvAHzAfQC/w0AAe8BvAGT
AbwB9AKTAQcB7QJLAkQBbQFuARwB7QHvAewBbgF0AbwB8gH0AfMBvAGaARoB9A4AAfIBBwG8AfMC9AH/
AfQBvAEHAfcB7wHwAewBFAHqAewB9wIHAfcB6wESARQCFQERARMBvAHzAfQE/xQAAUoBvAIAARwERAJK
AW4BkgEHAZkC/wHzAfACvAIHAe8BBwHzDgAB/wH0AfEB7wESARwBcwEPAw4BSgF0AXoDmgN0AXMCmgJ6
AZkBSgQOAUQBkwEVAg4B6gHvAfEC/w0AAbwBdAGTAQcB9AP/AewCbghEAe0B8wL0AfMB7QJKARwB9A0A
AfQBBwHvA/cBEgGSAesCkgLsAQcBbQETAW0B7AEHAvIB7wHsAW0BEgEUARUBQwHqAfAZAAH/AW4BBwL/
AbwBSgFDAUQDSwHsAf8B8wGZAQcB/wHzA/ABvAIHAbwB8gH/DQAC/wH0AfMB8gHwAbwBHAFDAg4BbgJ0
AXoBeQFKBA4BQwF5AnoBmgFSAg4BAAEOAW4BHAESAesB7QEcAQcB8AH0Af8NAAHzAXQBbgEcAf8CAAH/
AW0BRAEjASIBQwMiARABIgERAW0B8QH/AQAB/wEHAksBHAHyDQAB8gHvAfEB8AIHAW0BEgHsAfMB8gHv
AfQB8QH3AeoB7AHtAQcB8QH0AbwB7QHrARIBEwEVARQB7AHyGQAB8wFLAW4B8wEAAfEB7AFDAUQBSgFL
AW4BvAEAAfMBHAHsAf8B8gK8AfABvAIHAvAB9A0ABP8C9AHzAfAB7wFzAUQBEQFzAXQBmgF0ASIEDgFD
AXkBmgKZAUoCDgFDAW4BkwK8AfEB8gHzAfQD/w0AAfMBcwFuARwB/wIAAfQFRAEVAUQBFQFDAiIBEQHw
Af8CAAHwAXMBFQEcAfINAAHzAfcB7wL/AfQC7AEHAbwB8wMAAfAB7AHrAe0B7wG8AfABBwHtAesBEgET
ARUBEwGSAfQZAAHyAUsCRAHzAfQBHAFEARUCRAFuAfIBAAHzAhwB/wHxBLwBBwG8AQcB8gH/EQAD/wH0
AfMCvAHvAesBSgFzAXQBIgMOAUoBdAGaAXQBbgFKAQ4BEQFuAZMBvAHyAfMD9AP/DwAB8AFzAW4BRAHt
Af8BAAHyASIBbghEARUBIgHxAgAB/wG8AUQBSgGTAfQNAAH/AfAC7wEHAe8BkgHxAQAB/wMAAf8B8wHv
AuwB7QP3AewBbQESAhMB7AHxGQAB/wG8AkoBcwEVAhwBcwFEARUBRAFKAfIBAAHxAW4BvAH/AfABBwO8
AQcBvAHxAf8UAAL/AfQB8wHyAfABvAEHAZkBdAFKAw4BIgJ0AXMCHAIHAbwB8AHzAfQG/xAAAQcBdAFL
AUQCSgG8Ae8BbgFLAkQBQwIiAUMBFQJEAUMBvAHwAe8B7AJEAUsBBwH/DgAB/wP0AfMB9AH/BgAB/wHy
Ae8B7AHrAewB7QHsAW0B6gISAesBBwH0GQAB/wEcAUoB7AGZAXMBRAFuAXQBSwFEARABRAHxAQABkgFK
Av8BvAMHAbwBBwG8AfIVAAP/AvQB8gHwAbwBmQFEAksBDwIOAUQBcwGTAQcBvAHwAfEB8wL0A/8UAAHy
ARwBbgFzAnQBbgFLAXQBSwJKAUQCDwEiBEQBEgNEAUoBSwFzAfAB/xwAAf8B8gHvAewCbQISARQB6gHt
AQcB9AH/GQAB9AEcAUoBBwHwAXQBRAFLAW4BdAFKARABQwG8AfEBSgFtAv8BvAQHA7wB/xUAA/8C9AHy
AbwBbgIPAXQBbgEQAg4BDwFzAZkBvAHxA/QC/xYAAf8B8wEHAZkBmgF6AXQBSwF0Am4BSwFEAw8BQwFK
AkQBFQFEAksBdAGaAQcB/x4AAf8B9AG8Ae0B7ALrAewBBwHyAf8bAAH0AW4BSgG8Af8BvAFzAW4CSwFz
AUQBFQHsAeoBSgGSAv8B8QQHAfAB/wG8AfIB/xQABP8B9AHyAQcBEwEOAUoBkwF0AW4BDwMOAewB8AHz
AfQE/xcAAf8B9AHxAbwBGgGZAZoDdAFLAiIBDwELARACRAFzAW4BSwGZAZoBmQG8AfQB/yAAAf8B8wHx
A/AB9AH/HAAB8gFuARIBvAH/AfMBcwFuAUoBFQFLAXMCRAIRAZIB8gH/AfMB7wMHAfMB/wHyAfAB/xYA
Av8B9AHxAe8BDwEUARwBmQGTAXQBRAMOAW0B8AH0Bf8ZAAH/AfMB8AGZARoBdAGZAZoBdAMiAQsBIgFE
AUoBdAEaAXQBmQEHAfIB8AH/RQAB9AEcAXMBvAEAAfMBmQF0AhUBRAGaAZkBbgFDARUB9wEHAfAB8gEH
Au8BBwHzAQAB8AHyAf8WAAL/AfQB8QHsAQ4BHAKZAZMBcwELAw4B7QHxAfQD/x4AAfABdAFLAZkBdAFL
AiIDCwFEApoBwwF0ARwBSgLtAf9FAAHzAXQBSgHwAQAB/wHyAbwCSgFEAUoBGgEbApkBBwHwAQcCvAEH
Au8B8wH/AQcB9BcAAv8B9AHwAW0BHAEHAZMBcwFLARACDgERAXMBvAHzA/8fAAHzAQcB7wGZAXQBbgNL
AUQBCwFLAXkBdAGZARwBvAEcAW4BvEYAAfIBBwFuAfADAAHyAUsBSgFEASIB8wH0AfMBBwHwAf8B8AQH
Ae8C8QEHAfQXAAL/AfQBvAHvAbwB7wFKASIBDgEPAUMBbgGTAfAB8wH0Av8hAAH/AfQB8wHwAQcBdAJv
AW4CRAJKAW4B7QHvAewB6wHsAbwB9EQAAf8B8AGZARoDAAEHAkoBRAFtAfQBAAH/AbwB8QEAAfQBvAMH
Ae8BBwHvAfAYAAP/AfMB8gHxARwCDgFLARwBBwG8AfIB8wP/JQAB8gGTBHQBbwNEAUoBRAFKA0QBSgFE
AfJEAAH/AeoBBwH/AQAB/wHtARwBSgFEAXQB9AEAAfQBvAHxAQAB9AG8AQcB7wEHAbwCBwHyGQAD/wH0
AfMB7wEQAREBkwEHAfAB8wH0A/8lAAH/AfABkwJ0AcMBmQFvAkoBbQZLAW4B8AH/RQAB6gG8AgAB9AHs
AkQBcwGZAfQBAAH0AbwB8QEAAf8B9AG8AQcB7wHyAvAB8hsAAv8B9AHwAewBIgHsAfAB8wH0A/8mAAH/
AfABdAFLAXQBwwFuAUsCSgFzAfAB8QEHAnMBvAH0Af9GAAFEAe8CAAH/AQcDGgGZAf8BAAH0AvACAAH/
AbwBBwHvAfMfAAH/AfQB8wHyAQcBbQHwAfQC/ygAAf8BvAFLAW4BdAHDAZkBbgFEAewB/04AAUoBvAMA
AfQBGgHxARoB8AMAAfQB8AH/AQAB9AMHAfMgAAL/AfQB8wHxAfIC/ykAAf8BvANEA0MBSwHzTwABbgG8
BAAB/wH0AfMB/wMAAfQB8QIAAfMDBwH0IQAD/wL0Av8pAAH/AfQB7wF0AZkCdAFuAe9PAAHyARwB8wsA
Af8B8QIAAf8B8AK8Af8kAAL/LAAB/wG8AXMDmgEcAfMB/00AAf8BBwG8DAAB/wHxAwAB/wHzAfRTAAH/
AfQBHAGTARsBBwHyTwAB/wHzAf8MAAH0AfNaAAH/AfQB8wH0AfYB/10AAf8B8gH/vQAC//8A/wD+AAT/
uwAD/wH0Av+IAAn/KAAD/wH0ARQD/4cADf8kAAP/Ae8BRAH0A/8VAAH/FQAE/wwAAv9GAAX/AvMB9AHz
Cv8hAAL/AfMB7AFLAe8B9AP/FAAB/xAAC/9QAAX/AfQB8wHwAewBvAHxAfIB8wL0Cv8aAAX/AfABEwFz
AXQB8wj/FQAc/0kABP8B9AHzAfIB8AH3AUQBSgGSAQcB8AHxAfIB8wL0CP8YAAT/AvQB7wFKARwBcwEH
AfIB9Aj/EgAN/wH0BPMB8QHyAfMB9A3/QgAE/wH0AfMB8AEHAe8B7AFKAUwBRAHrAe8BvAHwAfEB8gHz
AvQH/xYABP8B9AHyAfABFAFzAnkBBwHwAfIB8wP0Bv8PAA3/AfMB8gHwArwB7AEPAUMB8AHyAfMB9Az/
QAAD/wH0AfIB8AHvAZIB6wESARUBSwJSAkoBkgG8AfAB8gHzBfQG/xIAA/8B9AHzAfIB8AG8AQcBSgEa
ARwBmQFzAgcC8AHxAfIC8wH0Bv8KAAX/AvQC8wHyBPMB8gG8AfcB7AHrAW0BEQFKAUMBEgEHAfAC8wT0
C/87AAP/AfQB8gEHAfcBEgFDAUoBUQVSAVEBSgHsAbwC8gHzBvQF/xEAAv8B9AHyAfEC7wHsAesBbQG8
Ae0BbgFtAusB7wO8AvAB8QHzAfQE/woAA/8C9AHzAfEEBwO8AQcB7QESARQBEQEPAUoBHAFKAUMB6wHv
AQcB8ATyA/MC9Af/FwAC/yIAAv8B8gEHAewBQwFLBFgEWQF6AZoBGgG8AfEC8gHzAvQD8wL0BP8PAAL/
AfQB8gEHAe8B6wJDARABmQK8AeoBmQFEAhABbQHwAfEEvAHxAfMB9AT/CAAD/wHxAe8BBwGSARIBDgET
AesC7wHtAhAB7QGZAUoBFQFDARwBRAFDARMB7QHvBPcCBwO8AfIB8wH0Bf8WAAL/AfIXAAH/CQAC/wH0
AbwB6wFKAXkCmgIaAXQBWAF6AZoCGgK8AfED8wLxAvQB8wPyAfQE/w0AAv8B9AHzAfAB7AEUAUoBSwJ0
AZkB8AHyAfcBHAF5AXQBSwFEARUB7QLxAfACvAHwAfIB9AT/BwAB9AK8Ae0BFQFDARQBEwFKARUBEQEP
ARMBFQFDARUBDwEVAXMBSwEPAhEBEAEPARQB6wHsAesB7QHsApIC9wIHAfAB8gHzAfQD/wQABP8OAAH/
AfMB8QL/DwAD/wMAAf8JAAH/AfQB8wHtAXMBmQIbAfAC8QFKAZkBGgHwBAcB8AG8AfAB8QLvAfEB9AHz
AfIC8AHyAfQD/w0AAv8B8wHwAesBFAFLApkCGgEHAewB8gHrAe8BvAGZAXkBUgFLARUBbQG8AfIB8QHw
AbwB8AHyAfMD/wcAAfEB6gFKAW0BEgHsAUQBFQHqAW0BSwFKAUQBEQIVAUMBDgFDAUQBEQMPAUoB7QH3
Ae8CHAFzAUoBFAHrAvcC7wG8AfEB8wP/BAAB/wH0BP8CAAP/BwAB/wHyAQcB9AP/CAAG/wHzAfQB/wIA
Af8JAAH/AfQBBwHsARoBGwHzAbwB8AHyAfEBUgHzAgcC7wIHAbwCBwQcAfMB9AHyAfACvAHyAfQD/w0A
Af8B8gHrARUBeQEaAfMB8gG8AfABmQFuAewBbQG8AvAB7wGZAXQBUgFEARIB8QH0AfMB8QG8AfAB8QH0
A/8GAAHzARwBSgEVAUMBFAFzAXQBRAEVAeoBRAJRARABDwFDARAEDgEVAfIC8wEbAhoBmQF5AlgBRAES
Ae0C9wEHAfAB8gH0Av8EAALyC/8CAAT/AfABBwP0Av8DAAn/AfIBvAH0Av8BAAH/CAAC/wHxAe8BBwHw
AfIBBwG8AvMB8gEHAfEBBwHvAfcB7wG8AfADvAHvAxwBcwLzAfICvAHwAfME/woAA/8B7wFKARoBGwHw
AbwC8gHxARwBmQFzARoDBwG8AQcBHAJSAUoB6wHyAfQB8wHxAbwB8AHyAfQD/wQAAf8B8wHsAUoBSwJK
AUMBEgFzAXQBSgFEAUoCSwFEAREDDwFDAewB8gHzARsBmQEcBVECSwFEARUB7QLvAfAB8gH0Av8EAAH/
AfcB8wH/AfQB/wH0AfID9Aj/AQcB8AHyAfMB8gHzAfQG/wHzAfIC9AH/AfQBkgHxAvQB/wEAAf8IAAH/
AfQBvAIHAbwB9wEHAfEB9AH/AfMB8gHxAfABBwH3AQcB8AHxAfIB8QG8AQcB9wNzAQcB9AHyAfACvAHy
AfQD/woAAf8B9AHwAUoBHAH0AfAB7wHwAvMB8gG8AZkBGwG8Au8B9wHvAQcB9wFzAlIBSgHsAfMB9AHz
AfEBvAHwAfMD/wQAAf8BBwEUAUMBRAFKAXQBSwFEAUMBSgFuAUQBFQNDAREBDwEOAeoBBwHzARoBdAFR
AUsESgZEAW0B7wEHAfAB8gH0Av8EAAH/AbwB7wL/AfQB8wHvAfMK9AIHAfIB8QHwAfEB8wP0A/MBkgHw
AvMB9AG8Ae8B8gHzAfQB/wEAAv8HAAH/AfQB8AK8AgcB7wHwAfMB/wL0AfMB8AMHAfAD8gHwArwBHAJz
AXQB8wH0AfICvAHxAfQD/wkAAv8B8wEVAW4BGwH0Au8B8QHzAfQB8gHxAbwB8gIHAfcBkgHsAu8B9wFL
AlIBRAG8AvQB8wHwAbwB8gH0A/8DAAH/Ae8CRAEVAREBQwFzAXkB7AFKARUBDgEQAQ8CDgEPAUMB6gHz
ARsBHANKAVEEWAFKARUCEAFDARUBRAHtAbwB8QHyAfQC/wUAAf8B7AHyA/8C7wPzAfAB8QLzAfIC8wLv
AfEBvAEHAbwB8QHyAQcC8gHxAQcB9wPyAfEB7wHyAvMB9AX/BwAB9AHyAfEC8AHvArwB8gLzAbwB7ANK
AewBBwHwAvEC8AHxAbwCcwFMAZkB8wHxAvAB8QH0A/8IAAL/AfQBBwEVAZoB9AG8AQcBvAHxAfMB9AHz
AvECvAHvAfcC7wH3A+8BSwFSAUsBcwHzAfQB8wHxAfAB8gH0A/8EAAHzAQcB7AFKAUQBQwEVARMB6wEU
ARABFQFRAUoBEAIPAeoB8AEaAXkBUgFRB1gBUQFLAUoBEQEQAUMB6wHvAbwB8QHzAfQC/wYAAfAB9wP/
AfMB7AHyAvMBvAGSAfIC8QHyAfAB7ALvAgcBvAHxAu0C8AG8Ae0BvAHyAvEB7wEHAvIB8wH0Bf8HAAH/
AvQC8gHwArwC8QH3AW4BdAJ5AVIBUQFLAfcB8AHxAvIC8wFzAkwBHAHyAfEB8AHxAfIB9AP/CAAC/wHz
AesBUQEaAfAB8gHxAQcB7QG8AfMB9AHzAvIB8QHwAgcB9wEUAfcCBwHtAUsBUgFLAfEC9AHyAfAB8gH0
A/8EAAH/AfQB8wHvAewB6gFEAkoBRAFKAhwBUQFEAQ8BbQHyApkBGgdYAVEBWAF5AlEBRAERARMBHAEH
AfAB8QHzAfQC/wYAAf8B9wG8AQAC/wLvAvQB8QHtAbwB8QLwAZIB6wEHAesB7wEHAfABvAESAQcC8QLv
AfEB8gHxAQcB7wHwA/MB9AH/AQAD/wYAA/8D9AHyAfEB8AEHAfcBSwGaARoCGwGZAXkBUgFLAQcB8QHz
AvQB/wHvAkwBUgHxA/IB8wL0Av8IAAH/AfQB8AEUAVkBGwHwAfMBBwISAesB8QLzAfQD8QG8AQcBbQER
AUMBkgEHAe8BSwFYAVIBBwH0AfMC8gHzAfQD/wUAAv8B9AHzAe8BcwJKAUQBHAEaAUoBFQFDARIB8AHv
ArwBeQdYAVEBWAGZAVECSgFEAesB7wHwAfEB8gHzAfQC/wcAAfIB7AHyAgAB/wHsAfIB/wHzAQcB9wHw
AfEB7wFtAfcB7wHrAewC8AHtAbwC8gHxAesBvALyAfAB6gHwAfQC8wH0Av8BAAP/BgAH/wHzAfEBvAHs
AZkBGwG8Ae8B8AEHARwBeQFSARwB9AT/AfABSwFMAVIBvAHxA/MB9AP/BwAC/wH0Ae8BSgFZARoB8gH0
AfEB8AHyAQcB7wHxAQcB6wEVARMB9wEHAewB6gG8AZkB7wG8AQcBbQJSARwC8wLyAfQE/wYAA/8B9AHy
AbwBHAFKAXMBHAFEAhEB7wK8AfABmQhYAVEBUgEaAVEDSgFtAQcC8gLzAfQC/wcAAf8B7wFtAfMB/wEA
AQcBkgH0Af8B8wHvAbwB8QHsAe8CvAGSAesBvAEHAfcB8gHzAfEB7AH3AfIB8wHxAewB8AHzAf8C9AL/
AgAD/wYAAf8B9AX/AfQB8gHwAXMBGgHzAewBEgEUAeoB6wFRAVgBeQH0BP8B8QEVAUwBUgG8AfIB8wL0
BP8HAAL/AfQB7AFLAVgBGgHzAfQB/wH0AfMB8gEHAeoBFQFKAksBFQEUARwB7wS8AfEB7AFKAVIBdAHy
A/MB9AT/BwAD/wL0AfIB7wEcARIBFQERAe0BGgG8AfIBGgGaAXkDWAJ5AlgBUgFRARsBcwJKAXMBkgHx
AvMD9AL/CAAB9AHsAe0B8wEAAfIB6gHsAfQB/wHyAfMB9wEHAfAC9AHxAewB6wHzAfEB9AHzAZIBbQEH
AfQB8wH3ARwB8QX/AwAD/wYAAv8B9AX/AfQB8QGZARsBvAFmAosBswESARUCeQH0A/8B9AG8AUMBTAFS
AbwB8wH0Bv8HAAL/AfQB7AFLAXoBmQL0BP8B8wFzAVIBegFYAUwBdAG8AQcB8QTyAfEBkgEVAUwBcwHx
AfIB8wH0BP8LAAL/AfQB8wHwARwCEwH0AZkB8gEbARoBmgF6AZkCeQKZAnkCUQHzAXMBFQFKAXQBBwHy
AfME9AL/CQAB8gHtAewB9AHtAewBFAHsAfQBAAHzAQcB8gH/AgAB/wEHAW0B8gL/Ae0B6gHvAewB8ALs
AfAJAAP/BgAB/wLzAfQE/wH0AfMBmQHzAewBkQG1Ae8BtQGRARQBmQG8Af8B8wH0AvMBvAFDAUwBUgG8
AfMB9Ab/BwAC/wH0ARIBSwF0AZkB8wX/AfQBBwFKAXkBWAFSAUsB6gHxAfIB8wHyAfEC8wEHARABUgF0
AfMB9AX/DQAC/wH0AfMB8QHrAe8B8AHxAhsBGgWZAhoBvAGZAVIBUQHzAW4BFQFKARwB8AHzA/QE/woA
AfAC7AGSAfEBvAHrAfcB8wIHAfIBAAHzAfIBAAH0AQcBkgHyAe8B6wG8AfEB7wHtAesBvAH0CQAC/wcA
Af8B8QHwAfMC9AL/AfQB8wEHAfMBHAH3AbwB8QEJAbQBbQEaAbwC8wHxAfAB8gEHAUMBUgFYAbwB8wf/
BwAC/wH0AesBSwFSAZkB8wH0AfIBBwHxAQcB7AEVAUoBmgEaAXQBRAEOARMB7AH3AuwC9AEHARABUgF0
AfQF/w8AAv8B8wHyAe0B8QEcAxsCGgKZAbwD8AG8AZkBdAFYARsBSgEVAUQBcwHxAfQH/woAAf8BvAHs
AfEB/wEAAbwB7AGSAQcB8QL/AQcB9wL/AfEB7wHsAe8B8AL/AfEBkgEHAfQB/wkAAf8HAAH/AfQBvAEU
ARwC8wL0Af8B8wHwAhsB9wEHAbwBuwHrAZkC8QH0AfMB9wFDAQcB9wEVAVIBeQHyAfMD/wsAAv8B9AHs
AUsBTAEcAfMB9AHvARUBEQEcAZkBHAGZARoBBwFLAUUBEAEHARoBTAFKARwC/wHvAUMBdAGZBP8SAAH/
AfMB8gGSAfEBGwLzARsCGgK8AfACGwHxArwBdAGZARoBSgEVAUQBHAHzCP8MAAHwAfMDAAHxArwB9AEA
AfMB7AEcAbwBAAH/AfAB8QHwAf8CAAH0AfAD/xEAAf8B9AEHAUsBSgHsAfAB8wP0AfIB8QHyARsBBwG1
Ae0BBwHyAfAB8wH0AfMBkgFSAUsBSgFRAVgBmQHyAfMC/wwAAv8B9AHvAUsBUgF0AfAB8wHwAZkB8gHw
ARwBGwHxARoBSwF0AbwBdAGZAfEBvAGZAbwB/wH0Ae0BRAF0AZkB9AL/EwAB/wHzAfAB7wHwAvMCGwG8
AhoB8QTyAfABvAF0ARsBmQFKARUBSgGZAfQI/xEAAf8B8wHwAv8B7wHwAfIB7wHzAQAB8wHyAf8GAAL/
EQAB/wH0AQcBUQFMAksB9wHyAvQB8wHyAfEB8AHyAfMB8QHwAfEB8wL0AfMB7AJ5AVIBWAF5AbwB8gH0
Af8OAAH/AfQBvAFKAVIBTAG8AfMB9AHyAvQBcwJ0AUwBUQJMASsBUQHwAfQB8wH0Af8B8gFtAUsBmQG8
AfQB/xQAAf8B9ALwA/MCGwHwBBsB8gHxARsB8gGZAXkB8wGZAUoBFQFKAZkI/xMAAv8BAAH3AbwB/wEA
AfEBBwP/AgAB/xcAAf8B8wG8AVEBWAJMAUsB6gHwAvQC8wPyA/MD9AHyAXMBmgJ6AVkBUgG8AvMB/w4A
Af8B9AHxAesCUgF0AfIB8wL/AfMBSwEsASsBRAFSAUMBJQEsASMB7wH0Av8B9AEHARQBWAEaAfEB9AH/
FAAB/wH0AfIB8QEbAfMDGwHxAhsE8wIbApkB8wGZAUoBFQFuAbwF/xgAAfQB7AH0A/8BvAHyHAAB/wHz
AQcBUgFYA1IBdAEcAfEE9APzAfQD/wH0AfIBHAEaApoBegF5AXMBBwHyAfQB/w0AAv8B8wH3AVEBUgFK
AQcB8gH0Af8B8QEVAUwBSwFzAZkBeQJKASQBdAP0AfIB6wFLAZkBvAHzAv8UAAL/AfMB8AHyBRsB8gbz
ARsBvAEbAfMBdAFKAUQBcwHxHQAB8gHqAfIB/wEAAfQBBwHxAf8bAAH/AfMBBwFSAVkBWAJSAbwB8AHy
AfQK/wH0AfEBHAQaARsBGgG8AfMC/w4AAf8B9AHwAUQBTAFLAUoB8AHzAfQBBwFKBRoBGwF5AVMBUgLz
AfIB7QFEAXQBGwHwAfQB/xUAAv8B9AHxAfIGGwbzAfEBGgH0AfABUQJKAQcB8x0AAf8B7wHsAfQBAAGS
Ae8B/xwAAf8B9AHvAVIDegFYAXMB8AHzAfQK/wH0AfABHALzAvQB8AHzAfQC/w8AAf8B9AHzAQcBSwFS
AUsBbQHwAfIB7wFRAZoEGgL0AXoBeQLyAZIBQwFRAhoB8wH0Af8WAAH/AfQB8wHwAfQEGwfzAfAB9AHz
AXkCSgF5AfAB9B8AAe0B8QHyAe0B9B0AAf8B9AG8AZkBvAGZAXoBWAFRAesBBwHzCv8B9ALwAvIB8AHy
AfMB9AL/EQAB/wH0AfIBHAJSAUoBbQG8AfcBcwGaBRoB9AHzAZkB8AGSAUoBUgGaARoB8QH0Af8YAAH/
AfQB8gHwAfICGwfzAfIB8wH0ARoCSwFzAbwB8gH/HwAB9AH3ARwB8wH/HQAC/wG8AfAB8gHwAZkBegF5
AVIBSwHrAQcB8wj/AfME8QHzAvQD/xEAAf8B9AHzAfABdAJSAUoBEwHsAW4BegGaBBoB9AEbARwBbQFK
AXQBGgLxAfMB9AH/GAAC/wHzAfIB8AHyARsK8wF0AUsBdAHwAfEB9AH/HwAB/wHxAfAB/x8AA/8C9AHy
ARoBmgF6AVkBUgFKAusBHAG8AfAB9AH/AfQB/wLzAvID9AL/FAAB/wH0AfMBvAF6A1gBSgFDAUwBmgIa
ARsB9AEbAXkBFAFRAZoBGwH0AfAB8wH0Av8ZAAH/AfQB8wHxAfICGwTzARsC8wEbAZkBWAF5AfAB8QH0
Af9EAAX/AfMB8AEaAZoBegF0AhwC7wEHAfQC/wH0Av8B9AT/FwAB/wH0AfMB8QEHAZkBeQJ0AVgBmgIa
ARsC8wHwAhsB8wHyAfAB8gH0Av8bAAL/AfMB8QHyAfMBGwbzARoBmQEaAfAB8gH0Av9HAAP/AfQB8wHw
ARoBmQIcAQcCvAHzAv8B9AP/GwAC/wH0AfMB8gHwAQcCmQIaARsG9AHxAfAB8QHzAfQC/x0AAv8B9AHy
AfEH8wLyAfAB8gP/SwAC/wL0AfMDvAHwAfEB8wH0Av8gAAH/AvQB8wHyAfABvAHwARsB8gHzA/QCvAHx
AfIB8wH0Av8fAAL/AvQB8gG8AvEC9AHxAbwB8wH0Av9OAAP/BPQG/yEAAv8B9ALzAvIB8QPwAfED8gHz
AvQC/yIAAv8C9ATzAfQD/1EAC/8jAAP/AvQG8wP0A/8lAAr/gwAD/wP0Bf+4AAP//wD/AP8A/wD/AP8A
jQAQ/4EAAv8LAAb/GwAB/wHzDPID8wH/WAAE/yMAB/8FAAP/AfQB8wH0Av8bAAH/AfAN7wEHAbwB/yEA
Af8B9AH/CgAB/ygABv8iAAH/A/QJ/wL0AfMB7wH3AfQB/xwAAQcG7QfsAe0B7wHzHwAC/wHzAfIB8wL/
BAAC/wX0A/8aAAb/AgAK/xcAB/8BAAH/AvMF9AL/AvQD8wHwAewB7QEHAfQC/xcAA/8FSwRKBkQBcwHx
Bf8ZAAL/AfQB8gLwAfMC/wIAAv8B8wHyAvEB8gLzAfQD/xgAB/8BAAH/BvQD/xcACP8B8gHtAe8B8QHz
AfQE8wLyA/EBkgLvAbwB8wb/EgAB/wHzAfABvAFLAUoCSwREARUCQwREAXMBvAHxAvMB8gL/GAAB/wH0
AfMB8gEHAeoB8QHzAf8BAAH/AfQB8gTxAvID8wL/FwAB/wH0A/MC9AP/BfMC9AL/GAAC/wH0Af8C9AH/
AQcB7wH3AeoB7AHyAfMC8gHxAvACvAHsAe0BBwHyAvME9AT/DwAB/wHyAbwC7wJLA0QBQwIiAUMEIgFE
ARUBcwHwBPEB8wH0Af8VAAL/AvQB8wHyAe0BFAHtAfEB8wH/AfQE8QG8Ae8B9wHvAQcB8QHzAfQB/xcA
Af8B8wLwAfEB8gHzAfQB/wH0B/MB9AL/FwAD/wb0AfEB7wLqAe8B8AHyAfACBwHvAewBkgEHAfEC8gTz
BPQC/w4AAf8B8wG8AQcB7wFLAUoCRAFDCSIBFQFzAfEB8wTyAfMB9AH/FAAC/wL0AfMBBwFsARMBQwEH
AfEB8wHyAvEB8AEHAesB6gISAeoB7AHvAfQB/xcAAfQBvAMHAbwB8AHyAvMF8gPzAfQB/xUABP8B9AHz
AvQC8wH0Af8B9AEHAfcB6wFtAe0B7wHrAm0B6gEHAvEC8gfzAvQB/w8AAf8B9AHzAbwBSwEVAUQCQwQi
AhADIgEVAXMC9ATzAfQB/xUAA/8B9AHyARECbAEPAewF8QHwAewBEgGuAWwCEgEUAQ4B7wH/FgAB/wHz
Ae8BkgL3Ae8BBwG8A/EG8gLzAfQWAAH/AvQB8wHyAvQB8wHyAvMB9AH/AfQBvAHvARQBEQESAesB7wH3
AewBkgHxAvIB8wj0Af8PAAH/AQAC/wFEAUMCEAQiBxAB7AL0AvMC9AH/FgAD/wHzAewBQwFtARIBDwET
AbwE8QHvAW0B7AH3AewBEgFtAewBbQHqAfAB/xUAAf8B8gHtA+wB7QL3AgcBvAHxB/IB9AH/FQAC/wHy
AfEBvAHzAf8B9AHzAfICvAHxAfQB/wHyAbwB6wETAW0B7QLvAZIB7AGSAQcB8AHzBf8B9AL/DgAB/wHz
A/8CQwERASIBFQMiBRABQwEiAW0B8gHzAbwB8gL/FwAD/wG8ARQBQwHsAeoBDwFDAe8C8QHyAfABbQHs
AbwBBwHsAW0B7QHvAbUBbQHsAfQVAAH/AfIB7AFtAusD7AGSAfcB7wXxA/IB8wH/FgAB/wHyAbwB7wHx
AfQB/wH0AfIB8AL3AZIB8wH0AesB7AHvAesBEwHsAbwB8AEHAe8BkgH3Ae8BBwHxAfIB8wT/DgAB8wGS
AewBbQFEAkMDRAFKASIBQwJEA0oBRAEQASIBbQHzAewBBxoAAf8B9AESARUBQwGRARQBDwFDAW0C8QHz
ARIBkQH3Ae8B7QHsAesB7AHvAbsB6wESAfIVAAH/AfEBbQESAuoE6wHsAfcB8AbxAfIB8wH/FwAB8wEH
Ae8B8AP/AfQB8gHxAe8B7AHrAhUB7AHvAbwB9wETARIB7AEHAfMB8gHxAu8B9wHsAe8B/w8AAv8BvAEi
AUQCSgJLAkQBSgFRAUQBSgFLAUoBRAVKAUQB7AFKAZID/xcAAf8B6wETAUMBEwHsARQBDgFDARUB9wG8
AfcBbAL3Ae0B7AHrAewB6wHsAfcB7QHrAfEC/xMAAf8B8gISAhME6gFtAe0B8AfxAfMB/xcAAfQB7wHs
Ae8B8wIAAf8B9AHzAfEBBwHrAewB6gHtAbwD7wLsAfcBkgEHAfEC9AHzAbwB8xAAAfQBGgEcAQ8BRAFL
AXQBeQJ0AVIBSwFRAUsGdAJ5AXQBSgFEAUMB7AHzAfIB/xYAAf8BBwFmAkMBEwHrARUBDgERARQBEwEH
AesBrgPtAesBbQHrAuwB7QHvAewBvAL/EwAB/wHyAeoBFAFEARIBSgHqAhIBRAHrAfAH8QHzAf8XAAH/
AbwB7AHtAfACAAL/AfQB8gHsAeoB7AHtAvcC7wL3AuwCvAPvAQcBvAH0Af8PAAH/AZkBmgEVAUMBSwF5
ApoBdAFRAksBSgV5A6ABmgFLAUoBRAF5ARoB8hcAAfMBEgERAQ4BEAHtAQcB7AEOAQ8BEQEVAewB6wGR
AuwB7QLrAewB9wLsAe8C9wL/DgAC/wMAAf8B8gHqAkQBEgETAUQBFQFEARQB6wHwB/EB8gH/GAAB8wHs
AeoB7wH0AwAB/wG8AewBBwLvAewBBwLtAe8DBwHtAbwB/wH0AQcB7AESAZIB8w8AAgcBeQF0AUQBUQFL
AnkBcwFLAUoCRANKAksBdAJ5AXMBSwFDAUoBeQFzAfIB/xYAAe0CEQEQAeoBkgHvAZIBFAEOAQ8BEQET
AeoB7QHsAesBkQHtAfcB7QH3Ae8B7QP3Av8NAAHzAuwB8gH0AgAB8gHqAhECQwIVAkQB6wHwAfIG8QHz
AfQB8wL/FQAB9AH3ARMB7QG8Af8BAAL/AfQB8wHxAbwBBwHvAe0B9wGSAesB7AGSAbwB8gHzAfQCAAH0
AfABvAH/DwAB8AEHAZkBdAFLAXQBSgHvAXMDSwFKBEQBSgFLAnQBbgHsAUsBQwF0AXMB6wG8Af8VAAHw
AhUCEQESAeoC6wJDARQBDwEQARQB7QHrAeoB7wH3AQcB9wHtAZIB7QH3Ae8B9wL/DQAB/wHyARwBbgHs
Ae8B8wG8ARUCDwIRAUMCFQFEAW4B8AHyBvEB8wHyAvEB9AH/FQABvAEUAW0BBwHzA/8B9AHzAfEBvAMH
Ae8D7AHvAfAB9AL/BAAB/xAAAf8BvAEcAUoBSwF0AUsB8gEcAUQCSwFKAkQCSgFLAkoBkgH/AewBdAFD
AksBBwH/FQAB/wFDARQBDwJtARIBrgHqAWYBEQEOARQBFQEQAeoB9wHsAesB9AG8AfMB8QLvAfcCBwH3
Av8QAAHzAe0BEgJEAw8BEAIiAREBFQFEAesB8AHyCPEB8gHxAfIB/xYAAewBEwK8AfMC9AHzAfIB8QHw
AgcBvAHwAQcBkgH3AQcB8wL/FwAB/wHzARwBmQGaAXQBHAHyA0QBSgJEAkoBRAFKAUQBvAHwAUoBeQGZ
AUoBHAH/FQAB/wHsARABQwITAQ8BFQERBQ4BEAFtAewBBwHrAe0B8QG8AfAB8QG8AfcC7AH3AewC/xAA
AfQB8QG8AeoCbgJEAg8DIgEQAewB7wHrAQcBvAjxAfMB/xYAAQcBFAHsAbwB8wH0AfMC8gHwAwcBvAHw
AfECBwHyAfQB/xoAAfMBmQGgAXQBbgFKAUQBSwFuCEsB7QEUAXQBmgHDARwB9BYAAf8BBwHtAeoBEAMP
Aw4BEAIOARAB6wHvAfMC7AH3AewCkgHsAe0C7AHvAewC/xAAAbwCbgFtAW4BGgEcAW4BQwEiBA8B7AFt
AkQB7QHwB/EB9BcAAfMBbQEUAbwB8gH0AvMB8gHsA+sB7AEHAfIC8wH0Av8bAAEaAXkBdAFLAkQBSwFz
BHQBSwF0AXMBSwFtAUoBdAGaAUsB9BkAAfEBFAFDAewCBwL3AewBrgFtAhAB6gHwAf8B9wHsAZIB6wHt
AfcB7QEHAuwBvAHsAv8PAAHzAW4BSgFtAnQBSwVEAw8BFAMRAW0BvAHxAvIE8QH0FwAB/wHtAQ4B9wG8
AQAC9AG8AesB6gJtAeoBEgHxA/QB/xwAAfMBHAF0AXMCRAFLAXMBdAJ6AnQCSwFKAUQBSwJ0AfAZAAHz
AeoBFAHsAfAB9AHzAfABBwL3AZIBbQERAeoBBwK8AewB7QHrAfcBkgHsAe8BbQHtAbwB6wL/DwAB8gNu
AXMBHAREARQDRAFDAkQBQwFEAe0D8QHyBPEB8gH0Av8VAAHwAQ8BbQG8AfMB/wH0AW0B7QFtAesCbQHq
AfcB9AP/HAAB/wEHAXQBcwJEAUoCSwJ0AksDSgFLAnQBBxoAAfQB7AFtAfcBBwHxAe8BEwFDARIBrgHr
Aa4BEgFDAesB9AHwAewB7QHrAfcC7AHtAW0BkgHzAesC/w8AAfIBbgFKAUQB7QH/AW4FRAJDAUoBbgFE
AkMB7AfxAfMB8gHxAfIB9AH/FAAB9AETARUBBwG8Af8B8AEPAewB6wHqA20B7QHzAf8fAAH/AXQBcwFK
AUQBSgRLAVEBSgEVAUoDSwFzAfQaAAH0ARIB7AH3AuwBBwJtAe0BrgFsAa4BbQERARQB9AHwAZIB7wHs
AQcC7AH3AW0BBwH/AewC/w8AAfACbgFEAe0B9AJuAkoDRAFtAW4BdQFLAUMBFQHsB/EBAAH/AfMC8QHz
FQAB9wEOAewBuwHyAe0BFQHrAewBFAESAW0BEgHsAfIhAAHyAUsBSgJLAUoERANKAUsBUQFKAQcB/xkA
Af8B7wESAfcC7wFtAfcCBwGSAW0BEwHsAesBEwFtAfQB8gHvAfIB9wG8Au0BBwHqAQcB/wHtAv8QAAGT
AW4BSwFEAewBdAJuAUsBbgFKAhMBbQREAW4BkgG8AfAD8QHzBAAB9AHzAfEB9AH/EgABvAEOARMBvAHs
ARMBvAH3AuwB6gESAW0B9wHwIQAB/wHsAUMCRAFKAXMDRAJLAkoCRAHzGgAB9AHsARIB9wLvAbwB8gGS
AewC9wHtAfcB6wESAe8B9AHyAe8B8gH3AQcC7AH3AeoBBwHzAQcB/xEAAfQBBwFLAUQBbgF0AW8BSwJE
AUoBEgJKAQ4BDwFEAW4BbQJuARwB8QLyAf8FAAL/AfQB/xIAAbwBDwERAQcBvAHvAfQBEgFDAZIB7wH3
Ae8BvAHzIAAB/wG8AZkBmgOgAXQDRAFKAXkBegF0AUsBSgHzGgAB8wHqARIB9wLvAgcB6wIVAvcBkQHr
ARMB8AH0AfIB8AHyAe0BvAH3AewBBwHqAQcBvAH0EwABBwFLAUQBmQF0AW8BbgNEAUsCbgFEAUMBSgHx
AfABkgFuAUsB7QHyAf8cAAG8ARABQwFtAe8BuwHsAhEB6wP0AfAB/x8AAf8BBwSaAaABmgF5BEoBdAOg
AZoBmQG8AfQYAAHzAeoBbAGSAfcC7AG1BPcBkQHsAesBbAG8Af8B8wHyAfQB9wHxAbwB7wHxAfcB8wL/
FAACHAHDAXUBdAFLA0QBSgFLAm4BSgFuAfID8QEHARwBcwG8Af8bAAG8ARUBQwFtAeoB7wETARUBbQLz
AvAB/yAAAf8BvAEbAfMBGgGZAZoBmQFLAkoBSwFKAXMBmgKZAbwB8wG8AfAYAAH0AewBbAHtAfcB7AFt
AZEB8QHzAQcBkQHsAe0B7AFtAfAB/wH0AvMBvAHyAQcCvAHxA/8UAAH0ARwBmQF1AXQCRAFKAkQBbwGU
ApkBvAPxAfMBAAH/AfMB8AH0GwABvAERARABEQHqAe8BEQHtAfAB9AG8AfAB/yQAAv8B9AIHAUoBcwF5
AXQBSwFuAZMB8QP/GgAB/wHtAWwBrgFsAm0BkQG8AfMB9wJtAZEB7QFtAfAD/wH0AfEB8AH3AfMB9AP/
FQAB8AJzAXUBbgFEA0oBRAJ0AXMB8AHzBPEB/x4AAf8B7AEPAg4B9wFtAREB8ALvAfMB/yUAAv8C9AHz
AQcCdAF5ARwB8AHzAfQD/xoAAfQB7AFtARIDEwHrAfABBwHtAeoCEwGuAeoBvAT/AfMC8AT/GAAB/wHy
AQcBcwFLAkQBbgEHAfIBAAH/AfIE8QH0GAAB9AHxAfMB/wEAAfQB8QEVAhABEQH3AUMBFQHzAZIBvAH/
JgAC/wL0AfABHAFzAXQBcwF0AbwB8wL0Av8aAAH0AewBbQHqAusBkgEHAfAB8wG8Ae8B7AHrAa4B6gHv
Bf8B9AT/GwAB/wHvA0QB7QH/AgAB9ALxAfIC8QH0GAAB9ALsAfAC9AGSAUMCEQFDAZIBDwEVAfEB7AHw
JwAC/wL0AQcBcwF5ApoBeQEHAfMC9AL/GgAB9AHsARQB6wG1B/8B8gEHAfcBbQEHAf8DAAX/HAAB/wEc
A0QBSwH/AgAB8wHxA/IB8QH0GAAB9AHtARUB7AHvAZIBEgMRARQB9wEPAREBvAHrAfAnAAL/AvQBvAF6
AZoBwwGgAZoBmQHzAvQD/xkAAf8B7wFsAW0B9wH0Bv8B8wEHAe0B6wHxAf8kAAHzAnMCSwFuAbwCAAH0
AvEB8gLxAfQZAAHwAewCFQFDBBEB6wHvAREB7QH0AfAB8ScAAv8C9AG8AZkCwwGgAZoBvAHzAfQD/xoA
Af8B8gHrAW0B9wHxBv8B8QHvAe0B9wH0Af8kAAHwAXQBkwEaAnQBBwIAAf8B8gHxAfIC8QH0GQAB/wHy
Ae0BQwERAkMBFQHqAfIB7AH3AfQB8gHwAf8nAAP/AfQB8wGZAsMBoAGaAfAC9AP/GwAB/wG8AewB9wHw
Bv8BvAEHAe0B8QH/JQABBwEcAhoBmQF0AQcDAAH0AfEB8gHxAfIcAAHyAbwD7AHvAfMB7QHsAQcBvAHy
AfQoAAP/AvQB8AGZApoBvAHzAfQD/xwAAv8B8gEHAbwB9AX/AbwB7wG8AfQB/yUAAbwBcwFuAZoBdAFu
AQcEAAH0AfMB9B4AAfIB8QPyAbwB9wG8AfEB9CsABP8B9AHyAfAB8gHzAfQE/xwAA/8B9AHxBvAB8QHz
A/8lAAHzARwBdAGaAnQB8AUAAv8fAAH/BfQC/y4ABP8C9AX/HwAC/wP0A/MC9AP/JgAB/wEHAXQBmgF0
Ae0B/1wACv8gAAb/AfQG/ygAAbwBHAEHAf9gAAX/IgAM/ykAAf8B9AH/iwAG//8A/wD/AMAAB/+NAAP/
JgAO/4gAAf8B9AHzAfQB/yUAA/8B9AL/AfQI/1QAD/8jAAH/AfQB8gHsAfAB9AH/IwAD/wHzA/IC8QHy
AfEC8gH0BP9QAAP/BPQF8wT0A/8hAAH/AfQB8AERAewB8gH0Af8iAAP/AfIBvAH3A20CFAHqAfcBvAHz
AfQC/yIAC/8iAAL/AfQB8wHyAvEG8APxAfIB8wL0Av8bAAT/AfQB8gHtAREBcwEHAfIB9AT/HwAC/wHw
AewBFAMVARQBQwJKAewB7wHyAv8cABf/GwAB/wH0AfMB8QHwAgcB9wPtApIC9wHvAgcC8AHyAfMB9AP/
FwAC/wL0AfIB8QEHARIBRAFzARwBvAHyAfMC9AL/HgAB/wH0AfcB6gEVAUMBFQFEAksBdAF5ApkBvAH0
Af8bAAT/AvQG8wLyA/MB9Af/GQAB/wH0AfMB8AEHAfcC7AFtAeoBbQHrAW0C6wLsAe0BkgH3Ae8BBwHw
AfEB8wH0Av8VAAL/AfMB8gHwAbwB7wHtARUBSwJzAu8BvAHxAfIB8wH0Av8dAAH0ARwB6gFKAkQBSwFS
AXkBmgEaARsCvAHzAf8aAAP/AfQB8wHxAbwB9wFtARQGQwESAewBvAHxAvMB9AX/FgAB/wH0AfMBvAGS
Ae0BkQFtAmwBFAVsAm0C6wPtAu8BvAHxAfMC/xIAAv8B9AHyAbwBBwH3AZIB7AFtAUQBUQF0AUsB7AHt
AvcBBwHwAfEB8wH0Av8aAAL/AfIB7QFLAXMCSwFSAZoBGgEbAfIBvAHxAfQB/xkAA/8B8wHxAQcB7AHq
AUoBSwF0AXkCmQJ5AXQBUQFLAUoB6gGSAQcB8gHzAfQF/xQAAf8B8wHwAu0BkQGuAWwBFQIUAUMBFQJD
ARQBbAGuAeoC6wLsAe0BkgHvAQcB8AHzAfQC/xAAAf8B9AHyAQcB9wHsAesBEgEUARUBSgJ0AUsBFAFt
AesB7QGSAfcBBwHwAfIB9AL/GgAC/wHyARwBcwJLAVIBmgEbAfEBBwG8AfIB9AH/GAAD/wHzAfABkgES
AXMBmQMaArwB8AG8AQcDmQF0AVEBSwFtAe8C8AHyAfQE/xMAAfQBBwGRAfcBkQFsAhQBEQFDAhEBEAER
AhUCQwEVARIBbQHrAewC7QGSAe8BBwHwAfMB9AH/EAAB/wHzAQcB9wHrARABEQEVAUsBdAMcAXQBSgFD
ARMBFAHsAu0B7wEHAfEB8wH/GwAB/wH0AfMB7AMVAUsBmQLvAbwB8gH0A/8TAAX/AfMB8AFtAeoCGgIb
AfAB8gLzAfQB8wHyAfECBwKZAXkBUQFtAe8BvAEHAfEB8wH0A/8SAAG8AfcBuwGuARQBEAFsARMDFAEV
AQ8BDgEQAkMBDgEPAUMBbAFtAewB6wPtAe8BBwHwAfMB9AH/DQAC/wH0AfABkgETAUMBSgFzA5kEHAJ0
AUoBFQESAewC7QGSAQcB8QHzAv8ZAAL/AfQB7QFDAUQBeQEbAZkBHAHvAQcB8wX/DQAK/wHyAW0BcwEa
AfMB8gHwAfMD9AHzAfIC8QHwAbwDBwGZAXkBUQHsAQcB8AEHAfAB8gH0B/8MAAH0AfcBugGRAWwBFQEU
AW0C6wGSAewB6gEUAg8CEQEQAREBDwFDAeoBbQLsAu0B9wHvAQcB8QHzAv8LAAL/AfQB8gH3ARIBRAFz
ARoBmQFzAUoBFAIVARQBSgFuAhwBcwJKAewC7QGSAQcB8QHzAv8XAAP/AfQBFAFEAUsBdAGZAZoBmQGS
Ae8B8QH0Bf8MAAj/AfQB8wH3AewBGwH0AbwB8QHyAfQD8wHxAbwBBwLvAQcC7wIHARwBeQF0AXMCvAEH
AfAB8gH0Bv8LAAH0Ae0BkQGuARQCbAHsAe8BvAIHAe0B7AHqARUDEQEPARACEQEUAW0B6wPtAu8BBwHw
AfMB9AL/CAAC/wL0AfIBBwESAUoBmgEbARwBQwIRAUMDFQERASIBQwFuARwBcwFLAUQB7ALtAe8BBwHy
AfQD/xQABP8B9AHzAUQCQwHrAbwB7wHtAfcBBwHyCf8IAAj/AfQBBwFtARsB9AEHAbwB8AHxA/IB8AG8
Ae8B9wTvAvcCBwJ5AXQB7AG8AgcB8AHzAfQF/woAAf8BvAKRAWwBEQJsAewC9AHzAQcC7AFtARMBFQIR
AQ4CEQEQAUMBEgFtAewBkgLvAgcB8AHyAfMC/wcAAv8B9AHzAfEBBwESAUsBwwHyAewCEQFDBBUCFAIV
AUMBSgJzAUsBbQHtAZIB7wEHAbwB8gHzAfQE/w0ACP8B9AHzAe8BFQFLAZkBHAGSAe0BkgHvAbwB8gL0
B/8GAAj/AfMB8QHrAQcB9AG8AgcCvAHwAbwBBwL3AW0BFAHqARQB6wH3BAcBHAF0AXkBdAEcAbwC8AHx
AfMB9AT/CgAB8wH3ApEBbAETARQB7AH3AbwB8wG8Ae8B9wLsAW0BEwFDAQ4BFQIRAQ8BQwESAesB7QH3
Ae8CBwHwAfEB8gHzAfQB/wcAAf8B9AHzAfIB8AHrAUoBGgH0AewBEQEVARQEFQIUARMBFAEVAREBQwFE
AnMBbgHsAu8CBwHwAfIC8wL0Av8MAAf/AfQB8wHxAfcBFAF5ARsBHAKSAewBkgEHAbwB8QHyAfMB9Aj/
AwAI/wHyAZIB7AHzAfQCBwG8AQcBvAEHAe8B6wIUAUMBEQFDARMBHAFtAfcB8AG8AvABcwF0AXkBHAG8
AfAB8QHyAvME/woAAQcBtAGRAW0CFAETAesBbQHrAQcC9wHvAe0B7AHrARIBQwEOAg8CEAFDARIB6gHs
AfcCBwG8AvEB8wH0Av8HAAH/AvQB8wEHARUBHAH0AZkBEQFEAxIDFAQSARUBQwFEARUBSgF0AnMB7wIH
AvAC8gHzAvQC/wwABP8D9AHzAfABvAHtAUQBcwGZAewB9wGSAewC7wEHArwB8QHyAvMB9AX/AwAH/wH0
AfEBbQGZAfQDBwK8AQcB6wESAUMBEAESAUQBEAEPAUQB7wHtAW4B9wHyAfAB8QEHAXQBeQF0AQcE8gL0
A/8JAAH0AbsCkQFsAUMBEAEVAeoBEgHvAfIB9wLvAu0B6wFtARMBDwEOAQ8BQwERAUMCEgFtAe0CvAHx
AvIB8wH0Av8IAAL/AfQB7wFKAcMB8QFEAUoC6wJtAeoDEgJtARIBQwEVAeoCRAFKAXMBUQHvAbwC8AHy
AvMC9AP/DAAD/wH0AfMB8gLxAQcB9wEUAREBSwJKAvcE7wEHArwB8ALxAfIC9A7/AQcBbQEaAfABBwFt
AZICBwH3ARQBSgFEAUMCFQFDARIBSgFDAUoBHAHrAe0B8AHvAesBbgJ5AQcB8gHzAvIB8wH0A/8JAAHy
AfcBtAGuARQCFQJDARABvAEHAewB7wH3Ae0B9wHtAesBEgERAQ8CEQEQAUMBFAFtAesBkgHvAfAC8gHz
AvQC/woAAf8B7QFRAfQBcwFEAXMC7QLsAW0BEwEUAeoB6wFtARQBEQEVAhICRAFLAXMBHALxAfIB8wH0
Bf8OAAP/AfMB8AIHAe8B7AEiAUsBUQFLAUQD7wMHBLwC8ALyAfMB9An/AfQB8QHvAfIB7wF0ARsBHAHs
AQ8BFAHrARQB6gEUAewBcwESAREBEAETAW4BcwJKAUQCSgESARMBQwESAXQBeQEcAfMB7wH3AfIB9AT/
CQABBwK7AZEBbAESAWwBEwEUARMB9wHsAW0C7wIHAe0B7AFtAUMCEAIPAUMBFQFtAewBkQEHAfEB8gHz
AvQC/wkAAf8BvAHtARMBegEbAW4B7AEcAe8B9wHtAewB6wETAUMC6wEUARABEQETARIB6gJEAUoBUQFL
Ae8B8QHzAfQB/xMAA/8B8wG8AgcB7wEUAUsBeQGaAZkB6wHvAQcFvAXwA/IB8wH0B/8B9AHzAewBmQHx
Ae0BmQEaAW0BEAEOAQ8CSwFKAUMBbQFzAUQBFQFEAXMB7wEcAnMBSwFEAXMB6gEUAREBQwFLAXkBHAH0
AesBbgHwAfMB9AP/CQABBwK7AuwCkQH3Ae8B9wHrAeoB7AHzAfQB8gHvAe0B7AHrARUCEAEPARABFQET
AusB7AEHAfIC8wH0Av8GAAH/AfQB8gH3AeoBFQFEAVEBmgGZAUoBbgHvAbwB9wLtAewB7QHqAesBEwER
ARABQwFtAewB6wHqAkQBSwFRAewBBwHxAfQB/xMAA/8B8AHvA7wBbQFLARwBGgEcAeoBBwHwBfEH8gLz
AvQH/wHxAW4BGgHxAe0BmQEaARIBEAEOAQ8BRAF0ARwBbQEUAUoBcwEaAZkCHAOZARwBcwFKARQBQwEV
ARQBRAF0AXkB8wHvAXQB7wHzAvQC/wkAArsBtAHqAhUBFAETARQCQwEUAW0CvAP3AewBbQEUAUMBEQEQ
AREBQwESAusBkQEHAfMC9AP/BgAB/wEcA24DdAGaARwBSgEcAbwB8gH3Au8B7AHtARMBQwERASIBEAHq
AfcC7AFtARIBRAFLAXMBSwETAeoB7QHyAf8SAAP/AbwB6gHrAfEB8AETAUsBmQEaAZkBSgHvAvMB8AHz
AvIB8wr0B/8BvAFzAZkB8gHtAZkBBwESARABDgEQAewBSwFzAQcBbgFDAZkDGwGZARwDGgGZARwBbQES
AhMBFAFSAZkB8wEHARwBvAHyAfQD/wkAAbwBuwGRAeoCFAFDARECEAEVAhMB6wHvAfIBBwH3AuwBbQEV
AhEBQwEUAeoB6wHsAZEBvAL0A/8IAAH/AfABvAEaAZkDeQF0AW0BHAG8AfMB8AO7AfcBEQMiARUC9wHr
AewB6wFtAUQBSwJ0AlECSwFRAfMOAAL/AfQD/wHzAewBEgITARABSwF5ARoBmQFtAfMB7wFtAe8E9Aj/
AfQI/wHwAXMBmQHzAe0BmQEHARIBEAEPAREBcwFKAUMBHAGZAXMBmQIbAZkBSgFLAZkBGwMaARwBEgHq
ARMBbQFRAZkB8wEHARwBGgHyAfQMAAG8AbsBtAFsAkMBEQIQARUBFAEVAeoBFAGSAfQBvAH3Ae0B7AHr
ARUCEAERARUBEgLrAfcBvAH0Av8MAAH/AfQBGwGZA3QBEgHtAbwC8wHxAfAB8gFtBBEB7AEJAfcB7AHt
AewBbQEVAUsBdAKZAhoB8AHyAf8OAAP/AewBvAH0Af8B7wFKAm4BcwFLAZkBGwGZAUoBBwHsAe8B/wL0
AfIB8QH0EP8B8AFzAZkB8gHtApkB6gERARABQwNKAUQBHAHxAhsBvAFKAW4BHAEaAvMCGwEcARQBbQES
AeoBbgGZAfMB7wGZARoB8wH0Af8LAAG8AQkBuwFsARQBQwMRAUMBFQEUAeoBFAHsAfQBBwLtAewBbQEV
AhEBQwEUAeoC7AG7AbwC/xAAAbwBcwF0AXMBSgHsAQcB8gEHAbwC8wFDASIBEQEQAeoB8QEJAe8B9wLs
AeoBFQFzARoCvAHxAfQB/wwAA/8BAAP/AbwBSgHrAQcB7QESApkBdAFLAZkB8AEcAUsCHAGZAfQBBwLs
Ae8B9BD/AfIBHAGZAfEDHAFKA0MBSwEcAm4BSgHsAfABGgFuAe8B8gLzBPQB7wEUAewBbQESAXMBmQH0
Ae0BBwG8AfMB9AH/CwAB8AG8AbsB6wGRAWwBQwERARQBEQFDARQBFQESAfcB9AEHA+0B6wESAkMBFQES
AW0B7AH3AfAB8gH/EQAB/wEcAXQBcwFKAewB7wHwAe0BEwG8AfADIgEUAbwB8wEJAe8C7QHsAkQBHAG8
EQAC/wH3AesB9AL/AfIB6wEcAhMCGgF0AksBdAG8ARwBSgF5ApkBbQETAXMBmQH0BP8EAAn/AfMBHAEa
AfEB7wJ5AW0BFAFKAUMBcwEaApkBcwFKARQB7QEcAfQBGwEaBPQB8wHtARIB7AFtARUBdAEHAfQBHAEa
AfAB9AL/CwAB9AEJAbsBkQHtAWwBFAERAUMBFQEQARUBFAERAQcB9AEHAfcC7QHrARICEQEVAeoB6wGR
AbsB8AH/EwABvAFLAXMBSgHqAewBBwG8AesBFAEVASIBEQFKAe8B9AHyAfABBwH3Ae0BbQERAUoBmQHw
EgAB/wHxAW4BEgHvAfIB7wFKAZkBGgKZAXQBSgFEAUoBcwIcAUQBSgEcARoBGwG8AZkBHAHyAbwB7AEH
AfMC/wQACP8B8QHyAfMB7wF0AXkBcwFDARUBFAFuARoCGwEaAZkBSwGZARsB9AIaBPQB8QHsAW0B7AHq
AUoBmQEHAfQB8ALzAfQB/w0AAbwBCQKRAWwBEwEUA0MCDwEVAe8B9AG8Ae8C9wHsARQCEQETAW0CkQG7
AfAB/xMAAfMBSwFRAUsBRAFtAe0BvAHwAeoBIgFDAe0B8gP0AfIBBwH3Ae0BFAFDARwBvAH/EQAC/wH0
Ae8BbgFEAW0B6wEcARoBmQF0AXMBSwFEARUBcwF5ARwBmQFKARQBbgEcARoCGwGZAW4BEgFzAQcB9AL/
CAAH/wHxAXMCeQEVAREBFQEUAe8BBwEaBBsC8wEbAfMC9AHzARsBvAJtAZIBEwF0AZkBvAP/AfQC/w0A
AfIB8AK7AZEDFAERARABFAEVARAB6wHyAvABBwHtAW0CQwEUAW0BkQH3AbsBvAHzFQABvAJRAUoBFQHr
AfcCvAHrARwE9AHzAfABBwHvAW0BEQFLAZkB8RIAAf8B9AHzAesB6gFRBJkBdAJLAUQCFQEbApkB9AFz
ARUBRAFLAXkBmQEaARsBGgGZAUsBBwL0Av8HAAb/AQAB/wFzAnkBSwIUAewB9AHzAbwB7wEaARsCGgEb
A/MB8gK8AQcB6wHqAewBSgGZAbwB8wEAAf8B9AH/DwAB9ALwArsCkQFsARUCEAERARABQwFtAe8BBwHy
AewBFAEVARIBbQHsAfcBuwG8AfEB9BUAAfQBHAF0AUsCRAFtAe0B7wHwAfMD9AHzAfABvAEcAW4BFQFK
AZoBGwH0EQAC/wHzAZIBEQFzApkBcwFLAW0CRAJDAUoCGgEcARoB9AEaAUoBFQFEAUoBbgFzARwBmQEa
AXMBEwHvAfMB9AH/BwAG/wEAAf8B8AF0AXkBcwHvAfMF/wHzAfABvATwAfIB8wH0Av8B9AHyAW0BdAEa
AfAB/wEAA/8QAALzAfEB8wG7ApEB6gESARQBFQJDARUBEwESAhMCFAFsAZEB9wG7AbwB8gHzFwAB8wJ0
AUsBRAFDAUQB6wGSAQcB8AHyAfMB8gEaARwBSgEVAUsBGgEbAfIB/xEAAf8B9AEHARQBSgKZAUsBRAEV
AW0BSwJzARwBGgEbAQcBdAEaAvQBGgFLAUQBFQJEAUoBcwEcARoBcwHqAfAB9AH/BwAF/wMAAf8BHAF5
AXQBHAH0D/8C9AHzAe8BSwEaARsB8gH/BAAB/w8AAf8B8ALzAbsBkQG7AZEEbAIUARUBFAMTAeoBkQH3
AbsB8AHyAfAB/xgAAfACdAFLARUCIgFEAW0DcwFuAUoBRAEVAVEBwwHzAfESAAL/AfQB7QFKAZkBHAES
AUMBbQHxBPQB8gHwARsB7wFuAZkB8AG8AvQBGgGZAe0B6wESARUBRAFzAZkBcwESAfMB/xAAAfMBHAF5
AXQBkg7/AvQB8wEHARUBmQEbAbwC/xYAAfAB8wHyAQkBtAJsAesBuwFsAeoEbAFtAewDuwHwAfIB8AH/
GQAB/wHwAZkBHAFzAUoBFQERAyIBEQEVAUoBSwGZAfQB8QHyEwAC/wHzARUB7wEHAe0B6wGSAvIE8ALx
AfABBwFuAZkB8QHwAbwF8gG8Ae8C6wHsAZkBcwH3AfQB/w8AAf8B8gEcAXQBcwHsAfAE9AX/A/QB8wHx
AfcB6wEaARsB8AHzAv8WAAH/AfIB8wHxAQkBuwKRAa4GkQL3AbsB8AHxAvIB/xsAAf8B9AG8Ae8BmQFz
AW4BSwJKAUsBcwEaARsB8wHwAfMB/xMAAv8B8AHtArwB7wEHAfAB8gLzAvIE8wHvAUsB7wHwAfIC8QHw
A/EBvAHwAfEBBwLvAQcB7QHyAf8QAAH/AfABmQF5AXQBbgGSAfEB8gfzAfIB8AHvAesBHAEaAfQB8AHx
AfQC/xcAAf8D8QEJArsBtAK7AZEB9wK7AQkBvAHwAfMC8QH/HwAB8wG8A5kDeQEbAfIBvAHzFgAB/wH0
AewBvAHxAfIB9wHwAfMJ9AEHAXMB8AHxAfMB9ALzAvIB8QHzAfEB8AHzAfACvAHvAfEB/xIAAfEBBwGZ
AXkBUQEVAewBvAHwAfEC8gHxAbwBBwLrARoB8wH0AfAB8QHzAfQB/xoAAfQB8AHzAfEBCQLwAQkE8AHy
AvQB8AH0IwAB/wHzAbwCdAGZARsB8xgAAf8B9AHsAfAB8wG8AQcB8gr/AfMBvAHwAfIB9AP/BPQC8wG8
AfAC8gG8AfAB/xIAAf8B8QEHApkBeQFzAUoC7AHtARwB7AFuAewBmQEbAfMB8gHwAfIB8wL0Af8bAAH/
BPIB8wH0A/MD8gHzAf8mAAH0AXMBdAGZAbwB/xgAAv8B7wHxAfQC8wL/BwAH/wEAB/8B9AHzAfAB8gHz
AQcBvAH/EgAC/wHzAfABBwOZARwBcwJ0AZkBGgEbAfMB8gHwAfEB8gHzAfQC/x4AAv8H9AL/KQAB7wF0
AZkB8BkAAv8B8AL0Av8NAAH/BgAG/wP0AfMB9AH/EwAC/wH0AfMB8QG8AfAEGwHzAfEB8AG8AfEB8gHz
AvQC/1MAAfEBdAEaAfQZAAb/GAAC/wEABf8VAAP/AvQK8wL0Av9VAAH/AXQBGgH/GgAE/xwABf8WAAX/
B/QF/1cAAQcB8lsABv9dAAH/AfT/AP8A/wD/AP8AbgAI/7YADf+xAAT/CvQE/yIACv+BAAP/AvQK8wH0
A/8iAAb/AfQE/1YACv8gAAL/AfQB8wLyCfEB8gHzAfQC/xoACP8B9AHzAfID8QH0A/9UAA3/HgAC/wH0
AfMB8gLwArwBBwS8AvAB8QHyAfMB9AL/FwAF/wL0A/8B8QFLARoBmQF0AUQB7QHzA/8DAAj/FAAF/wkA
Av8jAAL/C/QC/x0AAv8B8wHyAfABBwH3Ae0C7AGSAfcC7QH3AQcBvAHxAfIB8wH0Av8WAAP/AfQC8gLx
AfMB9AHwAZkBGwGZAXMBSwHsAfAB8w3/FAAB/wPzAfQB/wYAAv8B9AHzAv8gAAL/AfQB8wTyBPEB8gHz
Av8dAAH/AfQB8gHwAe8BbQIUA2wD6gESAW0B7AEHAfAC8wL/FgAD/wHzAe8D9wG8AfIB8QGZARsBmQES
AUoB6gH3AfMB9A3/EgAB/wHzAe8BkgHvAbwB8wH0BAAB/wH0AfICBwHyAfQB/x8AAv8B9AHxAbwFBwHv
AQcBvAHxAfQB/xwAAv8B8wHxAfcBEgFDBGYCEwISARMCFAHqAe8B8QHzAv8WAAH/AfQB7QHrAW4BRAER
AesB9wIHAZkBGwGZAksB6gH3AbwB8gHzBP8E9AX/EQAB/wH3AREBFQFtAewB7wG8AfMD/wH0AfEB6gFD
AesB7wHzAf8fAAL/AfMBBwH3AZIC7QGSAu0BkgHvAfAB9AL/BQAB/xUAAf8B9AHyAe8BEgIVA0MBDQEV
AUMBFQEUARMBFAFmAREBEgHvAfMC/xUAAv8B8wFzARoBmQFzAUoBEwHsAe8B9wEaARsBmQJLAeoB7AH3
AQcB8QH0A/8B9AHzAfEB8wH0Bv8PAAHzAeoCSgEUAW0B7AHtAQcB8QLzAfEB7AEQAUQBbQHvAfMB/xkA
B/8B9AHyAZIC7AVtAuwBBwHzCf8TAAL/AfQB8AFtAUMCZgEVAUMBFQINAkMCFALqAWYBEQHqAfEB9AH/
FAAD/wHzAQcBGwGZARIBSgETAusB7AGZARsBmQJLARMB6wHsAfcBvAHwAfMB9wFtAUoBQwFtAfAB8gH0
Bv8OAAH0ARwBcwFLAUQBFQHsAu0B7wEHAbwB7QEVAUQBbgFzAQcB/xkAAf8B9AX/AfQB8gHwAewBbQQS
ARMBEgFtAesB7wHyAfQE/wP0Af8TAAL/AfMB7wEVAmYDbAFmAWwBZgESAmwCrgFtAWwCZgHvAfMC/xIA
A/8B9AHyAgcB7AETAUoBEwHqAesBbQGZAfMBmQFRAUsBSgFzAW0B7QH3AbwB8QHsARoBmQFzARIB7wHx
AfIB8wb/DQAB/wHzARwBcwFLAUQBEgLvAZIB7QHsAhUBSwEcAbwB/xoABPQD8wHyAfABBwHqAhIDEwEU
ARMB6gESAZIBvAHyAvMD9ALzAf8SAAL/AfQB8gHsARUBFAETAWwB6gFsAa4BuwEJArsBkQNsAa4BbAFm
AesB8gH0Af8SAAL/AvQB8QGZARwBbQEUARMBEgHtAQcBbQGZAfMBmQJzARIBmQFuAuwB9wEHAe8BGwGZ
AW0BbgHvAQcB8AHyAfMB9AT/DwAB9AEHAXMBSwFKAZIB8QHvAewBFQERAUsBHAG8AfQbAAPyAvEB8AG8
AQcB7wGSAW0BEgEUARUBQwMUARIBEwHrAe8BBwG8A/EB8gHxAfIB/xIAAv8B9AHzAesBFQFmARMBrgES
ARMCrgH3AbsBtAGuAmwBbQKuAWYBEgHxAfQB/xIAAv8B9AHzAfEBmQHwAXMBQwEUARUB7AEaAW0BmQHz
AZkBeQFzARIBGgFuAW0B7AGSAu8BGwGZAUsBbgHtAgcB8AHyAfMB9AP/EAAB/wEHAXMBbgFEAesB9wHr
ARABSgEcAe8B8AHzAfQOAAL/CgAD8AG8AQcB7wH3Ae0B7AHqARMBFAQVAhQBFQEUARIB7AHtAfcB7wEH
A7wB8AH/EgAC/wHzAbwBEgJmAWwBiwJsApEBtAG1AbQBbAFmAWwBiwFsAa4BbAFmAfEB9AL/EQAC/wHx
AXMCBwG8AfACFQFDAXMBmQFtAZkB8wEaARwBcwHrAbwBbgFtAesB7AH3AZkBGwGZAUsBbgL3AQcBvAHw
AfEB8gH0Av8FAAP/CgABvAJzAUoB6wEUAUMB7QEHAfABvALxAfMB9AL/CAAC/wH0Av8JAAHxArwBBwHv
AZIB7AHqARMBEQEVARQDFQJDAhUBFAEVARMB6gHrAe0B7wIHArwTAAL/AfMBBwNmA2wBZgFsAq4BkQGL
AUMBZgGLAa4BbAGLAWwBZgHxAfQC/xAAA/8BBwEaAQcCvAHwAe0BQwEUApkBbQHvAfMBGgGZAewB6wHv
AUoBbQHsAW0B9wHvARsBmQFLAW0B7AHrAe8BBwK8AfEB8wL/BAAC/wHzAv8HAAL/AfMBBwIcAW0BFQES
Ae8B9AHzAfEB8AG8AfAB8gHzAv8HAAH/AfMB8gH0Af8JAAH0A+8B9wHtAeoBFAERARABEwFsAW0BZgMQ
AREBtAHqAREBEAEVARIB6wHtA+8BBxMAAv8B8wFDA2YBbAGLAmwDZgFDAWYDbAGRAa4CbAFmAewB9AL/
EAAC/wH0AQcBGgG8AQcB8QEHAfMBEwEVAe8BmQESARwB8wEaAZkBbgHrAZkBbgHsAW0C7AHvARsBmQFL
AW4BcwF5AewBBwK8AfAB8wL/BAAB/wHzAvIB9AH/BgAB9AHzAbwB7wH3AhwBbQHtAf8BAAH/AfQB8wHy
A7wB8wH0Af8FAAH/AfMC8gH/CgAB8wLvAfcB7QHqAWwB6gGuA5EBtQFtAWYBEAEVARMBuwGRAq4B6gFt
AesB7QGSAu8BBxMAAv8B8gEUAUMCZgOuAZEBtAGuApEBtAEJAq4CkQGLAmwBrgHxAf8RAAL/AfQBBwG8
AgcB8wGZAfIBkgEVAe8BmQFEAZkB9AEbAZkBSwETAZkBcwLsAQcC7wHzAZkBcwHsAe8BmQH3AQcCvAHx
AfQC/wUAAf8B8wLyAfMB9AX/AfMBvAHvAgcB6gFzARwB7wH/AgAD/wHzAfEC8ALxAvQD/wHzAvIB8wH/
CgABvAP3Ae0B6wKuAbUBuwMJAa4BbAEQAq4BGQEJAfcEkQHtAZIB9wHvAQcTAAL/AfcBFAFDAWYB6gGu
AZEBrgGRAWwBZgNsAZEBrgGRAbUBuwGuAmwBrgHxAf8RAAP/AQcBGgIHAfMBvAEHAbwB6gHvARoB7QEa
AfQB8wEaARwBcwGZAXMC9wGZAu8B8wEaAXQB7AEHAZkB9wHwArwB8gH0Av8GAAL0AfMB8gLzAvQB8wHw
AbwB7wEHAfAB6wHqAQcBvAEcAQcB/wQAAf8B9AHzAfEB8AG8AfAB8gPzAvIB9AL/BQAB9ATvBPcB7QHs
Aa4BtQK7AwkCkQEQAbQBrgEJARkBCQO7AesB7QGSBPcCBwHyAf8PAAH/AesBFAFDAWYBrgGRArQBkQGu
AWYBDQFmA64BtQHcAbsBrgJsAa4B8QH/CwAB/wYAAf8B9AEHARoC7wHzARoBeQHxAfcBmQEaA/QDGwHz
ARoBcwHvAfcBmQLvAfMBGgGZARwBvAF5Ae8B8gHxAfAB8wH0Av8HAAH/AfQE8gHxAbwC7wEHAfIB7AHq
Ae8C/wEHAZkBBwYAAf8B9AHzAfIFvAHyAfMB9AcAAfQB7wL3Be8B9wHtAesBkQGuAWwBFAFmAWwBZgG7
AUMBuwESARMBEgFsAa4BtAGRAewBkgL3Au8E9wHxAf8OAAH/AW0BFAEVARIBrgGRArsCtAG1AbQBuwG0
ApEC4QG0Aa4CbAGuAfEB/wsAA/8EAAL/AQcBGgFKAXQB8wEbAZkBvAHvAZkBBwHzAfQB8AEcAXMBmQEa
AZkB7QHvAfcBvAGSAe0B8wEaAZkB7AHvARwBBwH0AfMC9AP/CAAC/wH0AfMB8AG8Au8BBwHxAZIBbgEH
Af8CAAH/AfABmQEHAf8FAAL/AfQB8gS8AfIB8AH0BwAB/wHwAfcG7wH3Ae0B7AGRAa4BbAEQARUBQwEV
Aa4BQwGuARUBEwERAmwBkQHsAZIB9wHvAfcF7wH3AfMPAAH/AfMB7AEUARIBbAKuAZEDtAHwARkCtAGR
AbsBtAGuA2wB9wH0DAAD/wQAAv8BvAEaAe8BGwH0AfMCGgG8AZkBHAG8AQcBdAFzAW4BSgFzARwD9wEH
AW0BcwHzARsBmQFKAW4BmQEHB/8CAAH/BwAB/wH0AfIB8AIHAfAB7wFzAbwB8wH/AwAB9AEaAZkBvAH/
BAAD/wHzAfID8QHwAe8B9AgAAfIG9wGSAe8BkgH3Am0BEwEVAeoDbQEQAhIBbAEVAW0BrgGRAe0C9wHv
BfcB7wH3Af8PAAL/AbwBFAISAWwBkQG0Aq4BtAG7ARkBuwGuAZEBuwGRAWwBZgJsAfAB/wwAA/8EAAL/
AfMBvAP0ARsBGgEbAfQBGgHtAfIBvAHvAZkBGwEcA+8EBwEbAfQBGwEaAQcBmQF5AQcH/wIAAfABBwcA
Af8B9AHzAvIBvAHsARoB8gX/AQAB9AEaAZkBBwMABP8C8wL0AfMB7AHwCQAB9AP3AZIG9wHrAWwBEgKu
AmwBrgEVAW0BrgKRAeoBrgHrAewB7wf3Ae8B8hAAAv8BvAEUAWwCZgFsAa4BbAFmAZEBCQEZAZEEbAJm
AWwB6gG8AfQMAAP/BAAC/wH0AfAB8gEbAfABdAESAXMBmQEcAesBBwG8AfEBGgEbARoE7wG8AQcD9AEa
AZkCGwF0AfAE/wIAAf8CAAH0AewB8gH/BgAD/wHzAewBHAG8Cf8BGgGTAbwB9Ab/AfQC/wG8Ae0B/woA
AQcC9wGSBfcBkgHsAeoBkQK7A5EBbAFtAbQBtQEJAfcBrgHsAe0I9wHvAf8QAAL/AbwBEwHqAWwFZgGu
AQkBGQGLBGYDbAHqAbwB/wwAA/8EAAL/AfQB8wHxAbwBmQIcAW4B7wLsAesB8wH0ARsBGgGZAe8BvAIH
AbwCBwHyARoBdAFLAXMBHAEHAfME/wIAAf8DAAHxAe8B9AgAAfQB7AEcAfAJ/wEAAfQBGgGZAe8B9Ab/
AQAB/wHvAfALAAH0CfcBkgHsAxkBuwGRAWYBQwETAbUDCQG1AewBkgj3AfASAAH/AfABEwHqAusDbAKR
AQkBGQauAmwB6gG8Af8MAAP/BAAC/wL0AfMCvAGZARsCvAEHAfAB6wHvAvQBGwEcAQcB8gPwAbwCBwEc
AZkBvAEcAfAB8wH0A/8DAAH/BAAB7wEHBwAB/wHvAXQB8AH/CwAB9AHvAXQBBwL/BQAB8QEHAf8MAAEH
AfcD7wX3Ae0B9wG7ARkBkQESAhUBEwFtAbUCCQKSBPcD7wH3AbwB/xIAAf8B8QETAW0BrgG0AbsBtQK7
ARkB/wEZArsDtAGRAYsBbAEUAfEB/xMAAv8C9AHyAfEB8wEaAbwBGgEHAfEBvAHtAeoBvAHyAfABvAHy
AfMC8gG8AfACvAHwARoBGwG8AfAB8gH0A/8DAAH/BAAB9AH3AQcB/wQAAf8BBwFuAbwB9AH/AwAC/wIA
AfQB/wMAAfQBBwHrAe0B8wH/AwAB8gHvAfINAAHxBe8D9wPvAu0CrgEUARUBrgFsAW0B9wPvBPcE7wEH
AfQTAAHyAeoBbQGRAbQBGQLiA/8D4gHcArsBkQFsAWYBbAH0Af8TAAP/AfQB8gHxAvQBGgHvAQcB8gG8
AQcBEwH3AbwB8AHxAe8B8gPzAvEB8AH0AfMBGgGZAfAB8wH0Af8FAAH/BAAB/wHxAbwB8AH/AgAB9AHv
ARIBHAHzAf8EAAH0ARwB8gK8Af8EAAH0AXMBRAHrAfECAAHzAe0B8gH/DQAB9AEHA+8F9wLvAfcB7AG0
AZEDrgG0Ae0BkgHvAQcF9wTvAQcB9A4AAv8DAAH/AewBbQGRAbQBCQLiA/8D4gHcAQkBtAGuAWwBZgHt
Af8VAAL/AvQB8AG8AfQB8gEHAfEC8wEHAusB8QHvARQB6gG8A/QB8wHyAfAB8wH0AfABHAHxAfQC/wUA
Af8GAAHwAgcC/wHvARABUQG8BwABmQFKAVEB8gYAAfQCSgESAe0BBwHsAfIB9BAAAfIB8AHvBfcB7wMH
ARIBbQGRAq4BbQG8AfMB8AG8BvcBBwHwAfEB/w4AAf8D9AH/AQAB/wEHAWwBrgGRAbsC4gX/AeIB4QG7
AbQBiwFsAWYBBwEAA/8B9AL/EAAC/wH0AfMB8gG8AfAB8gPzAe8BbQEUAeoB6wEcAQcBkgHyA/QC8wO8
AfIC9AL/BQAB/wcAAfEBkgFtAeoBEQFLAQcB9AUAAf8B8wKZAXkBBwH0Af8FAAEHAXMBFAEPAREB9wHz
EgAB/wHwBfcB8QL0AfADbQGuAWwBbQHwAfQC/wb3AfQB/w8AAf8B9AHyAbwB8gH0Af8BAAHyAeoBrgGR
AboBGQHiBP8B9AHiAeEBuwG0AYsCbAH/AQAB/wH0AfMB8QHzAv8PAAP/AvQE8wHyAbwC7AHtAQcB8AEa
AZkBHAEHBfQB8wHyAfMC9AP/DQAB/wHwAUMCEQESAfAB/wUAAfMCBwEbAbwBBwHwAf8FAAH/AZIBEQEV
ARQB7AH/EwAB8QT3Ae8B8wEAAf8BvAJtAZEBCQKRAfIC/wEAAe8E9wHvAf8QAAH/AfMBvAIHAfMB/wEA
Af8B7wFtAa4BugEZAeIB9AP/AuIB4QG7AbQBiwFsAfIBAAL/AfMBvAIHAfMB/xAAA/8D9AHzAQcBbQEU
ARwBvAHxARsB7wF0ApkB7AHwB/QD/xAAAfABEQFtARMBEgHzCAAB/wEaAfMJAAHwARQBEgGZAXMBBxIA
Af8B8AT3Ae8B9AEAAf8B8wGuAbsCGQEJAZIB8wP/Ae8E9wG8EAAC/wHwAQcB9AEHAfAB9AIAAf8BvAHt
AZEBuwHhBeIBGQK7Aa4B7AG8AgAB/wH0AfABvAHwAbwB8wH/EQAD/wH0AfEB7AHrARwB8gEbAfABBwHv
Am0BdAEaARwB7QHxA/QF/xAAAf8B7wFzAZkC7AG8Af8HAAH/AfIB9AgAAf8CkgEHARoBvAH/EgAB/wG8
AvcB7wH3Ae8B9AEAAf8B9AGuAbsCGQEJAfcB9AP/Ae8B9wLvAfcBBxAAAv8B8wG8AfABvAHyAf8DAAH/
AfQBvAH3AboBCQMZAQkBuwGRAfcB8gH0AwAC/wHzAfABvAHxAfQB/xIAAv8B9ALvAfIC8wG8ARwB6gH3
AfABcwOZAXMB7QHzAvQF/xEAAfQB8AG8AvIB8AG8AfIHAAL/BwAB9AH3AQcC9AHxAfQTAAH/AbwB9wTv
AfQBAAL/AewBkQEJARkBCQHwAf8CAAH/AfcF7xIAAf8B8gEHAfIB9AH/BgAB/wL0Av8LAAL/AfQB8gH0
Af8TAAL/AfQB8wLxAQcBEgHtAfABvAEaAfMB8AEaAZkBGgGZARIBBwL0Av8VAAP/AQAB9AHwAfQB7wH/
DQAB8wHsAfEB/xgAAfAC7wMHAfQCAAH/AfMB7wHsAfcBBwH0BAAF7wG8EgAC/wHzAfQB/woAA/8MAAH/
AfQB/xQAAv8B9AHzAfEB9AG8AZIB7wHwAfMB8AHxARIBHAGZARoBmQHsAe0B9AP/GgAB/wHyAfEB9wEH
AfIB9AcAAf8B8wHyAewB8QH/GQAB8gPvAQcBvAH/BAAB/wLzAv8EAAEHBO8B9BMAA/8JAAP/AfQD/woA
Av8VAAL/AfQB8wLyAfQB8gH0AfMBHAHrAbwB7QEcApkBvAEHAfAB9AP/HAAB/wH0AfIBBwG8AfMEAAH/
AfIB7wH3Ae8B9AH/GgAB9AEHAu8BBwH0DgAB8QPvAfEgAAH/AfQB8wHyAfMB9AH/IgAB/wH0AvMB8AHz
A/QBbQHvARwCGgEbAbwB8QHzAvQC/yEAAf8B8wMAAf8BvAH3AfAB/x8AAfMB8gH0EAAB9AHyAfMB/x8A
Af8B9AHyAfABBwG8AfIB9AH/IQAC/wH0AfMB8QT0AQcBGwHwAfEBBwG8AfIB8wL0Av8pAAH/VwAB/wHz
AfABBwG8AQcBvAHyAfQB/yAAAv8C9AHzAfAC9AHzAfQB8gHwAfEB9wHrAfMC9AP/gQAB/wHyAQcBvAH0
AgcB8AHzAf8gAAL/A/QB8wP0AfAC8wHyAfEBFAHzAvQC/4IAAf8B8wHxAQcBvAEHAbwB8wL/IQAD/wL0
AfIB8QHzBPQB8gG8AfQD/4MAAv8B8wHxAbwB8AHzAfQB/yMABP8D9An/hQAC/wH0AfIB8wL/JQAI/40A
Bf8pAAL//wD/AP8AkAAI/7MABf8J9Ab/GAAB/wMAAf8WAAP/dAAC/wL0AvMB8gHxB/AB8gLzA/QD/xYA
Af8BAAT/EwAF/1gAAv8ZAAH/AfQC8wHxAvABvAHvAewB6gQUAewB9wEHAfAD8gHzAvQB/xUAAv8B9AP/
EwAB/wH0AfMC9AH/RAAT/wH0A/8WAAH/AfQB8wHxAbwBBwHvAewBEgFDARUBEQQVAREBQwEUAe0B7wHw
A/EB8wH0A/8SAAL/AfQB/wH0A/8PAAL/AfQB8wHyAfEB8wH0Af9DAAH/AfEB8gHzDvQB8QG8AfIB9AH/
FQAB/wH0AfMB8AEHAe8B6wEUARIB6wFtAeoGEgHrAW0CEgHrAQcBvALwAfEB8wL0Af8RAAL/AfMB/wP0
Av8JAAb/AfQB8wHxArwB8QH0Av8VAAH/DgAD/xsAAfMBcwHvB/IC8QPyAfMB8gHwAesBRAHvAfIC/xQA
Af8B8wHwAe8B7QETARIBBwHyAbwB6wHqBRIB7AHvAfcB7QHsARIBFAGSBPAB8QHzAfQC/xAAAf8B8gH/
AfQC8wH0Af8FAAT/BPQC8wHyAfADBwHwAfMB9AH/FAAB/wH0Bv8DAAX/AvQB8xsAAf8BmQF5AQcBvAEH
A+8EBwS8AfcBRAGZAe8B8gH0Av8SAAL/AfIBBwHtARIB9wHwAbwB7wHwAe8BEgHqBBIB7QGSAbwDBwHs
ARMB7AEHBPAB8gH0Av8PAAH0AfAB/wH0A/MB9Af/AfQB8wHyBPEB8AEHAfcC7wEHAbwB8gH0Af8TAAH0
AfID8wHyAfMB9AUAAf8B8wHyAfMC8gLxAf8aAAHzAZkBeQHvAfcC7AHtApIB9wQHAe8BbQF0AgcB8QHz
AvQC/xAAAf8B9AHxAe0B6gEHAfMCBwHvAgcC6gMSAesC7QHvAbwBBwHvAQcB7AEVAewBBwLwAbwB8AHy
AfQB/w8AAfQBvAH0Af8B8wHyAfEB8gbzAfIB8QG8AgcE7wLsAfcB7wEHAbwB8gH0Av8RAAH0BbwBmQG8
AfMFAAH/AgcDvAEHAfcB8QH/GQAB/wHwAXoBcwHsAeoBEwIQAhEB6gHvArwBkgFuARoB9wEHAvAB8gHz
AfQC/xAAAf8BvAESAQcB9AIHAfcD7QHsAm0CEgHtAuwC7QHsAe8BkgHvAesBEwHtAQcB8AG8AQcBvAHy
AfQB/w4AAfQBBwL/AfMB8gfwAbwBBwPvAu0C7wGSAeoB7AH3AQcBvAHxAfIB8wH0Af8QAAH/AfcB7QH3
Au8BBwGgAZkB8gUAAfQBkwKZAe8CHALtAfMWAAT/AfEBGgF0AUoBRAVLAUoBRAFKARIBRAF0Ae8BBwPw
AbwB8AHyAfMH/woAAfQBEgGSAfMBBwG8Ae0B9wHtAewB7QHsAm0B6gFtAfcB7ALrAe0BbQHrAuwB6wHq
ARMB7wG8AfACvAHwAfMB9AH/DQAB9AEHAfQB/wH0AfIB8AK8AwcB7wL3AZIF7QHsARQB6gHsAfcBvAHw
AfEB8gHzAfQC/w4AAf8BBwFuAewB7QEcAe0BmQGgAZkB8gUAAfQBkwGaAZkB7QHsAe0B7AHrAZIB9BUA
Av8C9AHxAXMBegF5AXQEeQF0AXMESwFzAQcB8QLyAfABvAEHAbwB8AHyAfME9AL/CQABBwETAfABvAIH
AewB7wP3AewBEgJtAesB7AGSAuwBkgHsARQBkgHtAesB6gETAewBvALxAvAB8gH0Af8NAAH0AQcB8wL/
AfMB8QPwAQcB7wH3Au0C7AHtAuwBbQEUAW0B6gFtAZIB8QLyAfMC9AL/DgAB8AFuAusBbgFzAW4BmQGg
AZkB8wUAAf8BkwGaARoBcwFuAXMBbgFtAW4BHAH/FAAB/wH0AfMB8AHsAXkBoAGaARoB9wLvAbwBBwHv
AZIBcwFRAksBkgHwA/IB8AQHAfAC8gLzAfQC/wcAAfQBbQH3AbwCBwLtAe8C8AIHARICbQLqAZIC7wEH
Ae0BEQGSAgcB6wISAbwC8wHxAfAB8gH0Af8NAAHzAe8B8gEAAf8B9AHzA/EB8AEHAfcB7AQUARUBEQEV
AW0BcwESARQBkgHyA/MB9AP/DQAB/wHtAm0B6wFuAeoBbgGZAaABmQH0BgAB7wGaAcMBmQJuAW0CEgFt
AfAUAAH/AfQB8QFzAXkBoAEbAfcB7AHtAe8BvAPyAbwBBwH3AXMCSwHvAfED8gHwAQcC7wEHAbwB8QHy
AfMB9AL/BwAB8QETAQcB8AHyAbwB6wGSAbwBBwHyAfEBBwETAe0B7AHrAeoB9wLwAu8BEQHsAfEB8wEH
AW0BEwGSAfMB9AHyAfEB8gH0Af8NAAH0Ae8B8AH0Av8B8wPyAbwB7QFtBBQCFQEUAesBdAFzAeoBFAHs
AfID9AL/DwABvAHqAW0BSgHqAm4BmQHDAZoBmQH0BgABvAGZAsMBcwFuAW0BSgFtARIBkgH/EwAB/wH0
Ae8BdAGgAfQBBwHvAXMBHAHvAQcB8QHyAfMBBwEcAQcB7QJLAW4B8APzAfIB8AEHAu8B8AHyAfMB9AP/
BwAB7AFtAe8C9AG8AeoC7wH3AbwB7wH3Ae0BuwH3AewBbQHsAe8B8AGSAe0BEQFtAfAB/wH0Ae0BbQHs
AfMB9APzAfQB/w0AAfQB7wHsAe0BBwHwAfEB8AEHAfcBbQISAeoBbQESARQBFQEUAW4BeQJzARIBQwES
AfIB9AT/DgAB/wHtARIBbgFKARICbgIaAZoB8AH/BgAB/wGTAZkBwwGZAW4BbQFEAW4BbQHrAfITAAH/
AfIBSwF6AcMBvAH0AfIBBwGZAgcBvAHxAfIBHAG8AfABBwFzAksBHATzAfEBvAEHAbwB8QHzAfQC/wgA
Af8BFAHsAQcBAAH/AewB6wH3AewC7QH3AewBBwHwAbsB7QHrA+wBbQETAREBEgH3Af8BAAHxARIB6wG8
AfQC8wH0Af8NAAH/AfQB7wHrARQCFQLqARUBEgHqA20BEgEUARUBFAHqAZkBegFzAesBEgEVAUMB7wH0
Av8QAAHwARIBbgFzARQBEgFuAcMCmQEcAfQCAAHzAu8B9AH/AQABvAGTAZkBwwGTAW0BRAFuAZMBEgHv
EwAB/wEHAXQBoAHwAv8B9AHzAbwBmQHxAvABHAGZAfABvALwAW4BSwFzAfEC8wHyAfECvAHwAfMB9AL/
CQABBwEUAewB8wH/AfIBFAH3Ae8BvAHvAe0B9wHtAfMB9AHwAbsB7wHtAW0BFAISAeoBEgHsAfIB/wHy
ARUB6wEHA/QC/w0AAf8B9AEHAfcB7ALrAW0B6wHsAe0B7ALrAW0BFAITAeoBHAJ5AusBEgEUAUMB6wL/
EAAB/wHvAW4BmQFuAUQB6gSZAe0C/wG8AewB6wLqAQcBAAHyAZMBGgGTAZkBbgFEAUoBmgFzAW4B9BIA
AfQBcwF5ARoB8wEAA/8B8QGZAfAB8gEcAZkDBwG8AfEBBwJLAQcC8gLxAfAB8QHyAfQC/woAAewBFAHs
Av8B7QHsAe0BkgG7AbwB8QK8AvQB8wHwAbsBkgHrBG0BEgFtAQcB9AHzARIBbQHvAvQC/w4AAf8B9AEH
AfEB8wH3AZEB6wHsAfcBBwGSAewBbQETARIBSgFuAZkBGgHtAXMBbgFtARMCFAHqAfMRAAH0Ae0CmQHq
AUQBcwEaARwCkwHyAQAB8QETAeoC7AFtARMC9AEcAZkBHAKZAeoBRAEcAZkBcwHwEgAB8wFuAXkBGgH/
BAAB/wHxAQcB8wIHAfEBvAEHAbwB8QHyAXMBSwEcAvIC8QLyAfMB9AL/CgAB7AETAewB/wHzARQB7QHr
AewB9wG7AbwE9AHyAfMBvAHvAfcC6wFtAxIB6wHwAfMB7AFtAQcD/w8AAf8B9AEHAfIBAAH3AbsB7AGR
AbsBBwHsAW0BEwEUAUoCdAGZAQcB7QHsAesBEwIUAUsB7AHxEQAB9AHtAZoBkwISApMB8QHvAQcBAAH/
AZIBFAHqAe8B7AETAREBkgH/AfABkwG8AZMBmgFuAUQBbQGaARwBvAwAAf8B8QEHAbwB8QHzAbwBSwF0
ARoFAAH/AfMB9AHxAfIB8wHxArwB8AHyAfMBBwJLAe8BvAEHAu8BBwHzBP8JAAHsARIB7AH/Ae8BbQHs
AesB7AHtAe8BBwHyAfQB8gHxAfAB8QHyAbwBBwHvAe0B7ANtAewB8AHzAewBbQEHAv8QAAH/AfQB7wHy
AQAB8QG7Ae0B9wHvAfcBbQETARUBSgF0A3MBdAGZAe0B6gETARIBSwF0ARwB8wH/EAAB9AGTARoB6wEU
AW4BmQFzAfQBkwHwAf8B8wFtAeoB7QG8AQcB7AEUAW0B9AHyAZkBvAEcApkBSgEUApkBBwsAAf8B8QFt
AkoESwF0ARoB/wHzArwBBwG8AfQB7wEcAZkB8wEcBOwB8AHyAksFSgFzAfAE/wkAAewBEgHsAf8B8AKS
A+wB9wK8AfIB8QHvAfIB8wLwAbwBuwH3AuwB9wIHAfAB9AHsAW0BBxIAAf8B9AEHAfIC/wGSAbsC9wHt
ARIBFQEUAUoBSwFzAW0B7AF5AZkB7wHsAesBcwKZAfEB8wH/EAAB/wEHAW4CFAKZARwB/wGTAQcB/wHy
AW0B6gHsAbwB7QLqAesB9AHwAZkBvAEHAXMBmQHqAUMBSgF0AfMMAAHwARwEmQFzAVEBdAEaAQAB8wLw
ArwB9AG8AfQBwwH/AQcC7wMHAfMBbgFRBRwBmQHwBP8JAAHtARIBbQH/AgAB8gEHA/cBBwH/AQcBkgHr
AbwB8QG8AQAB9AEHAbwC8wHwAfMCAAH0AeoB6wG8EgAB/wH0Ae8B8gL/AbwB9wGRAewBbQEUAREBRAFK
ARIB6wHqAewBHAF0AXkCmQGgARoBmQH/AfMB/xAAAf8BvALrARwBmQFuARwB/wGTAQcB9AG8ARMB7QPz
AfAB6wESAfQBvAGZAbwBBwGTAXMBkwJuAXMB/wwAAf8D8wL0AQcBSwFzARoFAAL/AfQC8gEAAv8B9AIA
Af8B8wFLAXkB8wL/AfQC8wH0DQABBwHqAW0B8wQAAfQB8gHwAfEB/wHyAfEB8wHtAbwB8QIAAfEB8wHy
Av8CAAH/AfIBEQHtAfESAAH/AfQBBwHyA/8B6wLsARMBQwERARQBEwESAesBbQGRAe8BUgF5ApoBeQKZ
A/8QAAH/ApkBBwGZArwBkwHzAvEB9AHwAesCHAGZARoBCAEcAesB9AHzAbwB8wEHAZMBvAGZARwBvAGT
AfQNAAT/AQAB8wJLAZkB/wQAAf8B8QHzAf8BAAHxA/8CAAH/AZIBSwG8Af8FAAH/DQAB/wLqAe8GAAL/
AgAB/wH0AfMB8gHzAgAC/wYAAbwBQwH3AfQSAAH/AfQB7wHyAv8B9ALrAeoBFQIRARUBFAESAusBuwEc
AXQBeQF6AXkBvAHzAQcD/xAAAf8BBwGZAbwBHAHvAfMBkwEHA/QB8AEHA5kCGgGZAe8C8wH0AfEBkwHv
AfIBHAEHAbwBkwH/EgAB9AFzAUsBcwH0BAAB9AG8AfQBAAH0AQcB9AQAAfMBRAF0AfEVAAGSAW0BEgH/
FwAB/wHrARIBBwH0EgAB/wH0Ae8B8gL/AfQBbQHqARQBQwERAhUBFAESAW0B7AH3AXkBUgFMAVIBHAG8
Af8B8BQAAfEBdAEHARwBdAHxAgcD8wG8ARoDCAMaAbwB8gLzAfABkwHzAe8BkwEHAZMBBxMAAf8BHAJL
AZkB/wIAAf8BvAHzAwAC8QH/AgAB/wHrAUsBmQH0FQAB8QFtAeoBBxcAAfIBEgH3AbwB/xIAAf8B9AHv
AfIBAAL/AeoBEgEVAhEBFQEUARIB6wHvARoBmQF0AVIBSwF0AhwBAAHzFAAB9AGTAZkB7wGZAQcB8wH0
AfMB8gHxAbwBGwH0ARsBGgMbARoBvALyAvMB8QF0AZMBBwGZAfEUAAHzA0sB8AIAAbwB8AH/AwAB/wLx
Av8BHAFLAXkB8AH/FQAB9AHsAesB7AH0FQAB/wGSAesBBwHzAf8SAAH/AfQB7wHyA/8CFAEVAUMCFQET
AewBCAHDARoBeQFLAlICHAGZAQAB9BQAAf8B7wGTARwBkwEHAvQC8gG8ARsB9gH0ARsE9AH2AfIB8ALy
AfMB8gF0ARwCkwH0FQABvANLAfQBAAGgAfMFAAH0AfMBAAEHAUsBeQGZAfQXAAEHAesBEgEHBwAB8gH/
BAAB8wH/BgABvAHqAbwB8AH/EwAB/wH0Ae8B8gMAAhQDFQESAesBmQEbAaABmQEcAksBUgEcAbwBmQH/
FgAB9AEcAQcB8QHzAfQB8wHyAbwB9AL2A/QF9gHwAfEB8gHzAfQB8QG8AXQB8AH/FQAB/wGZAXMBSwFz
AfID/wQAAfQB8QHvAVEBeQEaAfMB/xcAAf8B7AFtARIB8QH/BQABbQHyAwAB8gHsAfQEAAH/AfEBEgEH
AfEB/xQAAf8B9AHvAfICAAH0ARUCQwEVARIB7AEcAZkBeQKZARwBUgFLAVIB7wG8AZkB/wIAAv8TAAHz
A/QC8wHxAfAB9gH/BvYD/wH0AbwB8QHyA/QB8QH/FwAB/wGZAVECSwEcAe8BvAHwAfIB8QG8AhwBmQGa
ARoB9AH/GQAB9AHtAW0BEgG8Af8EAAHrAfMDAAHyAfcB9AQAAfEB6wEHAfIB8xUAAf8B9AHvAfICAAFt
AhEBFAFtAe0CHAF5AVIBvAIcAXQBUQFSAQcB8AEcAwAC/xMAAv8C9AHzAfIB8AEbAf8D9gf/AfYBvAHx
AfIB8wL0A/8YAAEcAUsCUQF0AVEBdAFRAXMBeQGaAqAB9AG8AfQbAAHxAewB6wETAQcB/wMAAesB9AMA
AfIB9wH0AwABvAFtAQcB9AHyAf8VAAH/AfQB7wHyAgACEQEVAW0C7wFLAbwBBwEcAfIB8AG8ARwBcwEc
AQcB8AEcAwAC/xMAAv8C9AHzAfIBvAEbAf8D9gj/AbwC8QHzAvQD/xcAAfQB7AGZAbwBmQEcApkCmgMa
ARsB8gK8Af8aAAH/AfAB9wHrAeoB7QHyAf8BAAHsAfMDAAHyAfcB9AH/AfMB9wHsAe8B8wHxAf8WAAH/
AfQB7wHyAQAB8AERARQB7AHvAZkBHAFLAfIBvAH/AfQB8QHvAxwC8wEcGAAC/wL0AfMB8gG8ARsB/wL2
Cf8BGwHwAfEB8wL0A/8WAAH/AfcBSwG8AfQB/wH0AvMC8gHzAvQB/wH0AfABGgHyAf8aAAH/AfQB7wHs
AesB6gHtAbwB7AHzAwAB8gGSAQcB9wFtAfcB8gHxAfMB/xcAAf8B9AHvAfEB/wHsARQB7AG8AfQB8wG8
Ae8B/wHwAv8B9AG8AZkBHAHvAQAB9AEcGAAC/wL0AfMB8gG8ARsC/wH2Bf8D9gH/AbwB8AHxAfMC9AP/
FgABvAFEAaAB/wsAAf8B8wHyAbwB9BwAAf8B8AEHAbsB9wESAesB8wMAAfIB7wHsAfcB9AHzAbwC/xgA
Af8B9AH3AfIBvAETAfcB8QH/AgAB9AIAAfIBAAL/AfMB9AEcAbwCAAHzGAAC/wL0AfMB8gLwAvYB9AH2
BP8B9gH0AvYBvAHxAfIB8wL0A/8UAAH/AfQBHAFzAbwNAAH/AfABvAHwAf8cAAH/AfQB8gHwAQcBvAH0
AwAB8gEHAfAC8gHzAf8aAAH/AfQB7QLqAQcB9AQAAfQCAAH2AQAC/wEAAfQBmQHzAgAB9BgAAv8C9AHz
AfIB8QG8ARsC9AX2AfQBGwH0ARsBvAHxAfIB8wL0Av8VAAL/ARwBmQH0DgAB/wHwAfEB/x4AAf8C9AHx
AfQDAAH0AfAB8wH0Af8cAAH/AfQB9wHsAfEB/wUAAf8EAAL/AQAB9AEcAf8bAAL/AvQC8wHxArwBGwH0
BfYB9AIbAbwB8AHyAfMC9AP/FgAB/wH0AfMB/1oAAfMB7QHyDwAB/wHwAwABvBgAA/8C9AHzAfIB8QHw
AbwBGwHDARsB9gP0ARsBvAHwAvIB8wH0A/91AAH0Ae8BvBAAAfYDAAH0GQAD/wL0AfMB8gHxAfABvAIa
AxsCvAHxAvIB8wL0A/91AAH/AbwB9C4AA/8D9AHzAvIB8QLwArwB8AHxAvIC8wL0A/+pAAL/BPQD8wPy
A/ME9AT/qQAF/wz0Bf+rAAn/AvQI/7EADP+4AAL/AQAC//8A/wD/AOsACv9+AAf/DwAG/xsADP9YAAX/
HwAD/wP0A/8NAAf/GgAC/wn0Av9VAAP/BfQF/xkAAv8B9APyAfMB9AT/CgAC/wH0AfMD9AL/GAAC/wH0
CvMC/y0ABf8fAAP/AfQB8wHyAfEC8AHxAvIC8wP0Bf8SAAL/AfQB8gG8Ae8B9wEHAfAB8wb/BwAB/wH0
AfMB8AHvAfAB8gT/FgAC/wHzAfEF8AK8AfAB8gH0Af8rAAL/BPQB/wIABv8XAAH/AfQB8wHxAQcB7AJt
ARIB6gHsAQcCvALxAvIB8wL0Av8RAAH/AfQB8gEHAesC7AHqAe0BvAHzAfQE/wcAAf8B9AG8AfcBkgHs
AQcB9AP/FgAB/wH0AfEBBwXvAfcB7wEHAbwB9AH/KgAB/wHzAbwD7wHwAfQC/wH0AvIB8wL0Af8WAAH0
AfMB8AHrAUQBSgFEAREBFQERAg4BFQHsAu8CBwG8AfEB8gHzAf8SAAHzAfABbQEHAewBFQEUAeoB9wG8
AfIB9AX/BAAC/wHzAewB6wH3AesB7wHyBP8VAAH/AfQBBwGSAe0G7AGSAQcB8wH/IAAG/wQAAf8BBwHr
A0oBkgHzAf8B9AEHAewBbQHsAbwB9AH/FQAB/wHzAfcBFQFKAUsBcwEcAZMBHAHsAesBSgEUAhABQwFt
AesBkgHvAQcB8QH0Av8OAAL/AfQBBwEcAfMB7AFDARQC6wH3AbwB8gH0Cf8B9AHzArwB8AHvAQcB8AL0
BP8TAAH/AfMB9wHsAesBbQLqARIBbQHrAewB7wHzAf8fAAH/AvQB8gEHAfIB9AL/AgAB/wG8BJkBcwH0
Af8B8AGZAnMBbgESAfMB/xUAAfMB6wFKAXMBmQEaAfQDGwGZARoBGwG8AZkBcwFKAUQBEQEVAewB7wHw
AfMB9AH/DgAC/wHzAQcB6wGSAeoCQwHtAuwB7wEHAfEB9Af/AfQB8wHwAQcBkgG8Ae0BBwHxAfIB8wH0
A/8SAAL/AfMB7AFtAeoDEgEUARIBbQHqAfcB8gH0Af8dAAH/AfQB8wHwAe0BEgHsAfEB8wH0Af8BAAH/
AbwBmgEbAfQBGgEHAfQBAAEHApkBGgGZAUsB8wH/FQABSgFzAZkC9AEbAxoB9AGZAUQBFQFKAXMBmQEa
AZkBdAFLAu0BBwHxAfMB9AH/DQAB/wH0AfIB7wHrAQcB7AESARAB7AHxARIB6wH3AQcB8QH0Bf8B9AHy
AfAB9wHvAbwB8AHvAewBBwLxAfIB9AL/DwAD/wH0AfIBvAHrAuoBEgETAhIB6gFtARIB7AHwAfMB9AP/
FwAD/wHzAfEBBwHvAZIBFQFDAesB8AH0Af8BAAH/AfMBvAHwAfIB8AHxAv8BBwEcARoBGwEaAe8B/xYA
AfECGgIbBRoB9AGZAUoBEQEQAREBRAFKAW4BHAHvAe0B7wG8AfIB9AH/DAAB/wH0AfIBBwHvAewBkgEH
Ae0B6gFtAfABHAESAewB9wHvAfAB8wH0A/8B9AHwAe8B8AG8AwcB7wHsAZIB8AHxAfQC/w4AAf8B8QHy
AfMB8gG8AesBFAISARMBFAETAhIB6gESARQB7QHwAfIB8wHwAfIB/xYAAf8B9AHzAQcB9wGSAvcBFQEP
AUMBkgHxAfQB/wEAAf8C9AHzAvQC8wHxAwcB8AH0GAAB9AHyArwBHAGZBBoBGwHxARwBRAFDAhEBFQFu
Au0B7wEHAfEB8wH/CwAB/wH0AfMBvAHtAZIB9wHrAgcBkgHqAe0B9AFtAeoB7AHtAe8B8AHzA/QB8QG8
AfcB7wEHAu8BBwLvAewB7wHxAfMC/w0AAf8B8gEHAfIB8AEHAZIBFAEVAhMDFAITAhIBQwESAe8BBwHx
AbwB6gHxFQAB/wH0AfIC9wHtAewC7wHtAUMBDwEQAewB8AH0BgAB8wEHAuwBvAH0Af8dAAH0ARoBHANK
AW4CHAEbARoBdAJKAVEBBwGSAe0B7wEHAfEB8wH/CwAB/wH0AbwBEgHvAesBFAFtAesB8AEHAewBEgHw
AQcBFAFtAuwB7wHwA/IBBwHvAbwBBwHtAe8DBwEcAQcB7AHwAfQC/w0AAvIB8AHyAQcB7QFtAQ8BEgJt
AesCQwIUARIBbQIVAesBkgG8AfIB7AFtAfMSAAL/AfQB8AHvAe0B7AHtAfcB7wLtAewBFAEPAUMB9wHy
Af8EAAH/AbwBcwFKAUQBSgHvAf8eAAHzAXMBDwEQAQ8BFQFKARUBSgGZARsBmQF0AZkC9wLvAQcB8QHz
Af8KAAL/AfMB7ALvAW0B7ALrAe8B8AEcAW0B7AHyAewBbQPsAe8BBwHwAe8BvAHxAbwC8AH3AZIB7wEH
AfcBBwHtAfID/wwAAf8B8QLyAfAC7AFtARIB6wHsAfcB7AJDAhQB7QHsAesBbQHqAewB7wHyAQcBbAHs
Af8RAAH/AfQB8AH3Au0B9wHsAvcE7QESAQ4BFAHvAfMB/wIAAf8B9AEHAZkBHAF0AXMB7AH/HgAB/wG8
AewBbgHqAUsBRAERAUMBHAF0AUQBSgFEAesB7wIHAbwB8QHzAv8JAAL/AfMB6wEcAewBbQG8AQcC6wHw
AQcB7QESAe8B8AETAuwB6wHsApIBBwHwAbwBBwG8AvAB7QTvAfcB8wH0A/8LAAHvAfQB8AHzAbwC6wK1
AQcBvAH0AbUB6gEUAuwCvAEHAewD9wLxAa4BtAG8EQAB/wHzAfcB7QH3AfABkgETARIB7AHtA+wB7QFt
AQ8BEAEHBfQB7wF5ARoBGwGZARwB/yAAAfQB8QEHAfcB6gEVAUMBcwEVAUMBcwEQAUMB7QIHAbwB8AHy
AfQB/wkAAv8B8wJtAewB7wHxAfMC7AHvAfABBwLrAfIB7wLtAfcB6wLsAbwBBwHwArwB8QHwARwB6wHv
AbwB7AEHAfIB9AP/CgAB9AGRAf8B8AH0AfIC9wG8Ad0D/wEHAW0BEgEHAfcBvAH/AfQBvAK1AfcB9AHz
AesBrgHvAf8PAAH/AfQB8gH3Au8BuwHtAhEBFAFtAewC9wLtAeoBEAEUAQcC9ALzAbwBmQEbAfMB8AHz
Av8fAAP/AfQBvAIRAXMBRAERAZkBSwFuAQcD8AHxAfIB8wL/CAAC/wHzAe8B7QHwAfMB8QHwAfcB7wHs
AQcBvAEcAW0B7wHzAesBkgH3AZIC7AEHAe8CvAHwAQcB9wEHAeoBBwG8Ae8B8AHxAfIB9AL/CgAB8AG0
Af8B8QH/AfQB7wEHAe8BkgP3AW0BBwHrAfIB7QHsA/cBtQHdAbwC9AHsARMB9wH0DwAB/wHzAfAB7wEH
AfcBBwHwAfcBFAEPARUBEgHsAvcB7QLsAUMBFAHvAbwBHAJzAe0BvAHyAfQBAAL/IQAB8wH0AfIBEAER
AW4BcwEVAW0BmQEHAfAB8QTyAfMB9AH/CQAB/wH0AfAB7QHwAfQB8AHsAe8BHAG8Ae0B8AG8Ae0B6wHx
Ae8B9wEHAfcB7QHsAe8BkgHvAQcB8AG8Ae8B8QFtAfAC8gHxAfIB8wH0A/8IAAH/Ae8BiwHwAgcB7wHt
AQcB7QHrA0MBFAH3AewB/wHtARUBZgESAewB9wEHAfcC7wFtARUBrgHxDgAB/wH0AfIB7wG8AfcBvAHz
AgcBvAHsAhABFAFtAe0B9wHtAewB7QEVAREB9wGaAksBSgHsAfMB9AIAAf8dAAL/AfAB7AHqAewBbQEQ
AUoBHAEaAZkBGgEHAfAD8gPzAfQC/wkAAf8B9AHzAe8BBwHzAfEB6wEcAewB8QLvAfAB7wHqAewB8gHs
AbwBBwHvAfcB7wGSAe0B7wEHAfEBBwHxAfcF9AT/CQAB/wHsAWwBrgSRAu0BbQERAuoBEgHqARMB6wES
AW0BEwHrAewB9wHtAWwDEwEUAesBvA4AAf8B8wEHAe8B9wG8AfMB9AHwAwcB7wHqAhEB6gLsAW0C7AET
Ae8BGgNLAesB8AHzAfQBAAL/GAAC/wH0AbwB7QFtAkoBSwFKAUQBEQFKARwBmQHyAfMB8AHyAvME9AP/
CgAB/wH0AfABbQHxAfQBBwHtARwB7QHxAfcB8wHwAe0BEgLvAewBvAIHAe8B9wLsApIDBwHzAvQH/wgA
AfQB6wKuAZECtAG7Ae0B7AFtARQC7AISAhMBbQHqARMBbQHtAfcBkQGuAW0B6gFtARQBbQEHDgAB/wHx
Au8B8QHyAfQD8wO8Ae8BkgETAQ8BQwEUARMB6wH3AZIBmQEaA0sBEwHtAbwB8wEAAv8YAAH/AfABbQES
AUsCHAGZARoBmQEcAW4CFQFLAfIB8wHyAfMD9AT/DQAB/wHzAQcB9wH0AfICHAHrAfEBBwH3AfIBBwJt
AQcB7AEHAfABBwHvAgcB9wHvAfABvAHvAewC8AH0CP8HAAH0Ae8GGQEHAesB6gH3AuwG9wHrAbUB6wH3
AgcDtQLvAbwOAAH/AQcB9wHyAfEB9AHzAbsBBwT0AfAB9wEHAesBEQFDARIB7AH3AesBvAH0AXQBSwFK
AREBRAFLAewD/xgAAf8BvAHvARoBGwb0ARoBSgFDAXMB9AHzA/QD/xAAAf8B9AHyAewB8QH0AQcBHAGZ
Ae8B9AHrAvEB7wESAZIBvAHrAfAB8QG8AgcC7wIHAbwB7AHrAe8B8wj/BQAB/wG8Au8GBwHvAe0BuwHz
AvcBEgEVARMCEgH3Ae0B8AG8AbUCuwMHA+8BBwHwAf8LAAH/AQcCvAH0AfMB8gG8AfAB8gHwAfMC9AHx
Ae8B9wGSAeoBFQETAeoBbQG8ARoBTAJLAREBRAFLAUMB8gP/GAAB/wHzAfIB8QHyAfEBGwHyARoB7wFL
ARUBQwEcAfQB8wH0BP8RAAL/AfMB9wHvAfQB8gEcAQcB7QHyAfMB7QHzAfEB7AHqAQcB7AHvA/EB8AHv
AwcB9wK8AfAB8gH0B/8FAAHzAeoBbAFtA2wCrgGRArUBCQH/Au8BFAEPAkMBFAH3Ae0B9AHxAbsBtQGu
BmwBEwHtAf8LAAH/AfEB7wHtAQcCvAHxAfMB8AEHAbwB9AHzAfQB8gEHAe0B7wH3AeoBFAETARsBGgFM
AksBEQFKAUsBIgHyBP8ZAAL/AQAB9ALzAbwBBwHvARUBQwEcAfQBGwP/EwAC/wH0AfAB7QHzAfQBvAHv
AewBvAH0AQcBvAH0AQcCbQEcAewBvAHxAfIB8wLxAbwBBwH3AbwB8gHxAfAB8wf/BQAB8wNtA2wCrgGR
AbsCGQHtAbwBBwEVAg4BQwEUAfcB8AHzAfABGQG7AbUB7QJsAxIB6gH3Af8NAAH0AfAB7QHvAfAB9wG8
AfIB8AHzAvQBvAHsARIB6gHtAvIB7AEUAe8BwwFMAksBEQFKAUsBEQHwBP8dAAT/AfQB6gFDARwB9AEb
Af8WAAH/AfQB8wH3AbwB9AHyAZkC9wH0AfMB7wH0AfMBHAEUAewB6wH3AbwB8QHyAfMB8gHxAfABvAIH
AbwB8AHzBP8IAAH0AW0CbAHqAe0B7wQHAvQBvAEHAe8B6gEUAhIBbQHvAfcB8AHzAhkB4QG7AZEBbQNs
Ae0BBwH/DgAB/wHyAQcC9wEHAfAB8QH0AfMB8AHsARIB7AHtAZIBvAHsAeoBEgG8ARoBUgFLAUoBQwFK
AUsBEQG8AfQD/x0AAv8DAAHrARABHAHzAfIB/xcAAf8B9AHwAewB8wH0AQcB7wHsAfIB9AIHAfQB8QHr
ARIB7AESAe8B8AHyAfMB9AHzAfIB8QLwAfEB8gH0A/8JAAH/AewCbAHqAfcBvAbwAbwB9wHtAewB6gHt
ARIB6wLvArwB8ALxAvAB7AFsAYsBkQHyAfAB/xAAAfQB8QHvAewB7wG8AfEBvAGSAewB7wG8Ae8B7AFu
AeoBEgEUAZkBwwF0AksBIgFKAUsBEQEHA/8aAAH0Af8BAAHzAfcBHAMAAZIBFQGZARsB8wH/FwAB/wH0
AfMB7QG8AfQBGwHvAu0B9AHzAe0B8gH0AQcCEgHrAewBvAHyAfQC/wXzAvQD/woAAQcCbAHqAWwBvAUA
Af8B9AHwAe0B9wESAewBEwHsAfcB8QH0Av8DAAH/AZIBbAGRAbQB/wHzFAABBwHsAe0BvAHvAe0B9wEH
AfABcwFKAesBbQISARwBwwF0AUwBSwERAUoBSwERAbwB9AL/GAAB9AG8AZIB9AHvARUBEQFKAQcC9AHs
ARUCGgHzAf8YAAH/AfMBvAHsAfMB9AEHAe8B6gHxAf8B8gGSAvQB7QEUARIBbQEHAfIB9AT/A/QE/wsA
AfQCbAESAW0BBwUAAf8B9AHwAewB7QISARMB7AHvAfMB/wUAAfQBkgK0ARkB8AH/FAAB/wHyAQcB7QEH
AfAB8gHvAXMBSgJtAeoBEgFuAZkBwwFSAUsBSgERAkoBEQHxAfQC/xcAAfMB7AHtAuwBEAERARUBcwGZ
ARwBBwHvAZkCGwHzAf8YAAH/AfQB8wHvAbwB9AHwAe8BHAHvAfQB/wG8AfAB9AG8ARIBFAHrAfcB8gH0
Cv8NAAH3AWwBEgHqAfcB/wQAAv8B8gLtAewBEgH3AewBBwH0Af8FAAH0AZEBtAEJAfQB8AH/FgAB9AHw
AQcBvAGZAW4BEgHqARIC6gFtARwBvAH0AZkBcwFKAREBRAFKAREB8QH0Av8XAAHsARUBcwFKAUMBEQFE
AXMBmQK8AvAB8gHzAfIB8AH/GAAB/wH0AfMBvAHvAfQB8wIHAe0B8wH/AfIB9wH0AfMBkgISAW0B8AHz
AfQJ/w0AAfIBbQISAesB/wUAAf8B9AH3Ae0B7wH/AQcB7AHwAfQB/wUAAfMBtAEJAfQB8QH0GQAB9AG8
AewB6gFtAuoBEgFKAW0B7AEHApkBGgEcAUQBSgFLASIB8QH0Av8VAAH0AesBQwEcAVEBQwERARUBcwEH
AfMC/wb0GgAB/wH0AfIB7QHyAfQB8AHvAZIBvAL0AfAB7wH0AbwBbQESAW0B7AG8AfMB9An/DAAB/wHv
ARQBEwESAfIFAAL/Ae8B7QH3AfMBBwHtAfIB/wYAAfABGQHiAfQB8QH/GwAB8wH3AW0B6gFKAXMB7wH3
AQcBvAKZARsBmQJKAUsBIgHwA/8UAAHzAewBEAJzAW0CEQFzAZkB9CMAAv8B9AHvAfcB9AHzAQcB7wH3
AvQB8wHsAbwB9AEHARIBEwESARQBBwHzCP8NAAH/AfIB6wIUAe0B/wUAAf8B8AHrAfcB8AH3Ae8B9AH/
BgABBwHiAf8B8gHzHQAB/wG8Ae0B7AHvAfAC8gHwArwBGgEbAXMBUQFLAREB8gP/EwAB9AHsARECcwEU
ARUBEQFuAbwB8wH/JAAB/wH0AfIB7QHxAfQB8AHsAesBBwL0AfABkgHzAfIBbQEUARIBQwESAfEB9Af/
DwABvAHqARQBEwHzBgAB/wHxAvcB7wHyAf8GAAHyAuIB/wHyAf8fAAHzAbwB9wHvAbwC8AHyAfQBvAEb
ARoBmQF5AUoB8gL/EwAB9AHrARABcwEaAe8BFQERAW0C8ScAAf8B8wG8AewC8wLsARIBBwLzAfcBBwH0
AQcBEgNDAe8B9AX/EgABBwFtARMBkgH/BgAF/wYAAfQBvAH/AfMB8AH/HwAC/wH0AfEB7wEHAfEB8wL0
AbwCmQEbARoBSwHyAv8TAAHzAXMBHAHwAfMBcwFKAW4BGgHzAf8nAAH/AfQB8wHsAbwB9AHwAe0BEgET
AbwB8wHqAW0BvAHvAUoBQwERAUQBBwH0A/8UAAH/AbwBrgETAbwGAAL/CAAB/wHxAf8B9AHxAfQB/x8A
BP8C8gH/A/QB8wEHAZkBwwHyAbwB9AL/EwAB/wHxAfAB8wH/AQcBHAG8AfEB/ygAAv8B8wLsAvMBBwEU
ARUB7wHzAe8BSwFEAUsBRQFRARQB7AHwAfQB/xgAAbwBtAESAfIPAAHyAvMB8QH/IwAF/wX0AfMB8QHy
A/8WAAH/AgAB/wHxAfAB/yoAAf8B9AHsARQBBwH0Ae0BIwFLAe8B9AHxAXQBUgGZAUoBmQEHAbwB8wL/
GQAB8wHvAesBvAH/CgAC/wPxAfMB/yUAD/9HAAH/AfQB7wJKAUsBUgF0ARwBvAL0AbwB8AHyArwB8QHz
AfQC/xkAAv8B8gHvAbwB9AkAAfMBvAHwAfMB/ykADP9IAAL/AfMB7wF0ApkBvAHwAfQC/wH0A/IB8wL0
Av8dAAH/AfQB8wgAAf8B8wH0gQAB/wH0AfMB8gEHAbwB8wH0Af8CAAP/AvQC/68AAf8C9ALzAfQC/wYA
Af+xAAj//wD/AP8A/wDAAAH/AgAB/7oACP8/AAb/BQAC/wQAAv8MAAH/VgAL/z0AA/8F9AP/AQAB/wLz
Af8BAAL/AvMB/wsAAv8RAAL/FgAC/ycACP8C9AHzAfQD/xwAAf8fAAL/AfQB8gH0Bf8BAAH/AfEB9wG8
AvQB8gH0AbwB7wHzAf8EAAP/AwAC/xAAAf8C9AH/CgAB9AoAAf8B8wH/JAAI/wH0AvMB8gHxAfIB9AL/
GwAE/x0AAf8B9AHyAfQE/wEAAv8B8QH3AZIB7wEHAe8B9wHvAfcBkgG8Af8DAAL0BP8CAAH/EAAB/wHx
Af8JAAH/AfQBvAL/CQAB9AHxAf8iAAX/AvQB8wLyAfED8AHyAfQB/xwAAf8B8gHwAfQB/xsAAv8B8wHx
AfQD/wIAAf8B8gHvCZIB9wHzAwAB/wH0AvMB9AL/AgAB/w8AAfMBvAHzAf8IAAH/AfAB9wHxAf8IAAH/
AfMBBwH0IQAE/wH0AfMC8gHxAfADvAEHAe8BBwHyAf8dAAHyAe8B8wH/GwAC/wHzAfAC9AH/AwAB/wHw
Ae8B9wmSAfAB/wIAA/8B8wHyA/8BAAH/DgAB/wHwAe0BvAcAAf8B9AHxAe8B7AHvAfIB9AH/BgAB/wHv
AfcB8yEAAv8C9AHyAfEC8AG8AgcB7wGSAW0CQwFtAfMcAAH/Au8B8QH/GgAB/wH0Af8B9AHwAfEC9AL/
AQAB9AG8B+8B9wKSAu8B8gH/AgAB/wL0AfAB8wL/AQAB/w4AAf8BBwHqAfMB/wIAAv8B9AHyAQcB7wH3
AesBSgHsAfcB7wG8AfIB9AH/AwAB/wG8AeoB8gH/GAAC/wUAA/8B8wHyAvABvAIHAe8B7AETARQB6wHt
AfcB7QHyHAAB9AHtAfcB8AL/GQAB/wP0AfIBvAHxAfQD/wH0AQcC7wHsAe0E7wLsAu8BBwH/AQAC/wH0
AfIBvAHzBP8NAAL/AfcBSgG8Af8CAAH/AfEB7wL3Ae0B7AHqAW4B6wLtAvcBBwHzAf8BAAH/AfQBBwEU
AfAB/xcACv8B9AHyArwBBwHvAewB6wEUAQ4BFQISAfcB8AHvAfMcAAHyAewBkQG8AfEaAAL/AfMC9AHx
AQcBvAH0Av8B8gK8AewBbAHsAQcBkgHrAe8BkQFsAZICBwH0Av8B9AHzArwB8wH0A/8NAAL/AewBSgH3
AfMC/wG8AfcBkgL3Ae0B7AFLAW4BSgHsAvcCkgH3AfEC/wHxAZIBRAG8Af8UAAz/AfQB8gG8AQcB7wHs
ARICDwERARQCFQESARQB6wHsAfMZAAP/AfEB6wGRAbwB8QH0Av8XAAL/AfMB8QHzAvIBvAHwAvQB8gG8
AZEBbAFlAWwBFAFDAQ8BQwNsAgcB8QH/AfQB8wG8AQcB8AHzAvQB/w4AAv8B7AFKAewB8AH0AbwB9wHt
AewB7QMcAXMBbgFLAUoBRAFtAuwB7QH3AfEB9AG8AesBSgG8Av8SAAT/AvQC8wLyAfABBwHwAbwCBwHs
AeoCFQEUARIBFAEVARIB7AFmAg8BkgH/GQAB/wH0AfMBBwESAZEBBwG8AfIC9AL/FQAC/wH0AfIC8AHx
AfIB8AHxAfQB8gHvAWwBZQINBA8BZgJsAe8BvAHxAfQB8QG8AQcB8AHyAvMB9AH/DgAC/wHsAUoBbQHy
AfAB9wHsAesBcwMaApkCcwFuA0oB6gHrAe0B7wHyAfABEgFKAbwC/xIAAv8B9AHzAfIC8AK8Ae8CFAHs
Au8B7AEUARIB7QEQAUMBFAEQAe8B9wFmAREBFQFDAe8B/xMABv8B9AHyAfAB6gETAZEB7QPxAfIB8wH0
B/8OAAP/AvQB8gK8AfMD8gHtAWwCDQUPAWYCDQGRAfECvAEHAfAB8QHwArwB8wL/DgAC/wHvAUoBSwLv
AewB6gFuARwDGgGZAe8BBwEcAZkBHAFzA0oB6wHtAQcBHAFKAUsB8QH/EgAC/wH0AfECvAIHAu8B6wHv
AQcC9wHsARQBEQHqAfcBDgERA20B7QETAUMB7AGSAfcB9BAAA/8B9ATzAfIB8QEHAeoBEgHtAZEB6gHs
AfEB8AHxAvIE8wP0Av8MAAL/A/QC8wLxAfMC8QGuARUCDQMOAgABDQEVAmYB9wK8AfIDvAHxAfMB9AL/
DgAC/wHxAUoBcwEcAe0BEgFKAXMBHAEHAe8BvAHyA/MB8gEHARwCcwFuAUoBbQHtAesBSgF5AfMB/xMA
AfQB8AG8AQcE7wHsAfcCBwH3AeoBFAFDAQ8B6gHwARUBFAHsAUMBZgETAa4B9wHtAesB6gHwEAAC/wHz
AvIC8QLwAQcBbQFsAe8CBwGRAeoB6wEHAfEB8gHxAfACvAHwAfEB8gHzAfQC/wwAAv8B9APzAfIB8wHy
AfMBvAFsAw0DDgIAAQ0BQwEVAWYBrgG8AfACvAHxAvMB9AP/DwAB/wH0AhwB7wFtAUQBbgFzA+0B9wXv
ARwB7QLsARwBcwFKAewB7wFSARoC9BIAAf8B9AHxAQcG9wLsAe0B7AEOARQBEAESAfEB9AHwAe0BBwHw
AbQBZgEOAQ8BZgEOARIB8A8AAf8B9AHzA/IC8QHwAQcBbQFsArwC8AHtAesBbAHrAfEC8wHxA/AC8QHy
AfMC9AL/CwAF/wH0A/MB7wFmAg0BFQIOAWwBDwEAAQ0CQwEVAYYBvALwAfMB8QHwAfIC8wH0Af8QAAH0
AfMBBwHvAkoBHAGSA+0B7AHtA/cE7QEcAfcBHAJKAbwBBwH/AfQB/xEAAv8B9AHyAQcB9wTsAe0BEgEV
AesBEgEOARIB7AHxAfMBvAH3Ae8B7QG8AYsBFAETARUB7AG0Ae8B9A0AAv8B9AHzAfEEvAEHAe8BEgFs
AfcBBwHzAfABvAHwAe0CbAHsAfEB8gHxAbwCBwHwAfED8gHzAfQE/wkABf8D9AGuAQ0BQwJmAQABEAGR
AesBAAEVAa4BbAEUAWYBkgHxAfMB8QHzBf8RAAH/AfMB9AH3AUQBUQHwAbwB6gHrAewB6wHtAewE7QHs
AesBcwHwAbwBcwFKAQcD9AkAAf8HAAL/AvQB8AHqARUCFAITARIB6gHrAewBEgFDAe0CvAH3AhIB9wEH
AfABBwHtAQcB7QGSAQcB9AH/DQAB/wH0AfMB8AHrARMEEgHqAZECuwHtAfECbQEHAewB6wGRAWwBbQUS
AZIB8gXzA/QC/woABf8B8gFmAQ0BZgFDAQ4BAAEQAZEB6wIAARQCbAFmAa4B8gHzAfQF/xIAAf8B9AHw
AewBSgG8AfEBbQJEAkoBcwF0AxwBdAJzAVIBHAHyARwBSwEHAfMB8QH/CQAB/wcAAf8C9AG8AQ4BQwH3
AesBEAEUAesB7AH3Ae0CEwHsAe8BbQRDAQcB8gHwAfQB8wHwAe8BBwL/DQAB/wH0AfMB8gHrAWwCuwOR
AbsB8gEHAbsBkQFDARQBbAEUAW0B7wEHBJEBuwHvAbsBkQHvBvMD9AH/DQAC/wGuAg0BDgGLAa4BAAEQ
AZEB6wQAAUMCZgG8A/8XAAH/AfQCcwH0AbwBSwJEAkoBcwF5BpkBegF5AvIBSwEcAfAB9AoAAv8FAAL/
AfQBBwETAUMBbQG8AfAB9wESAQ8CEQEOAUMB7AHrARECDwESAesBEgHxAvQB8gG8AZIBBwH0Av8NAAP/
AfMBvAHxAfIB8QEHAZEBuwG8AfEB9AEHApEBuwH3AZEB7AHyAfQBvAKRAfcBvAHxA/IH9AP/DgAB/wFm
AQ0BDwEOAowBDgEUAZEBbQEQBAABEQFmAfAC/xgAAv8BHAHtA/MBvAEcAUoBcwIcBJkBGgG8AfED8wFu
AQcC/woAAv8FAAL/AfMBEgHsAfcBEgHvAfIC8AH3AeoBDwEOAkMBDwEOARABEgLsAQcB9AHzAfACBwHv
AfIB9AL/AgAD/wkAAfQB9wHtAewD7QHrAZEBuwHzAf8B8wHsAZEBuwEHAe8CkQH3AvQBvAGuAZEF7QHs
AQcH/w8AAfEBZgENAg4BEAEOAREBbQHrAW0BEwEOBAABZgHtAf8ZAAL/Au8B9AHzAfAB9AHzAW0BFAFK
AUQESgHxAf8B9AHwAfIB8wHsAbwC/woAAf8GAAL/AfMB7wIHAe8BbQEHAvIB8wH0AQcB6wEPAg4BDwFD
ARQB9wHxAfQB8gH3AQcB7wG8AfIB8wH0Av8BAAX/BwAB9AHrAZECuwKRAbsBkQG7AbwB9AEAAbwB9wEJ
AbsB8wH0AewCuwHwAfQB8gHsAZEDuwSRAbwB/xQAAQcBZgENAg4BZgGMBW0BEgETARACAAFmAWwB/xoA
Af8B8gEHAv8B8wGZAfIBcwFDARQBQwFEAhUBIwHyAfMBmQHzAv8B9wHyAf8LAAH/BgAB/wH0AfMBBwH3
AQcBvAHrAQ8B7wPxAvMB9wFDARMBEgEQAQ8BkgHwAbwB9wHtAewBBwG7AQcB8gL0Av8BAAT/BQAC/wHz
AfAB8gTxAfIBvAG7AZEB7wHzAf8B8wK7Ae0B6wFtAbsB8gH/AfIBbQHqAe8F8gPwAfQB/xMAAbwCFAFD
ARQBbAFtA5EB9wKuARICEwIUAesB/xoAAf8B9AEHAf8CAAHwAQcBcwEVAkMBSgIiAVEB8wEaAfMB/wEA
Af8BBwH0EwAB/wH0AfIBvAIHAe8BEgERAZEB6wESAfcBvAHzAe8BEgHyAfAB9wHqAUMCEwESAhECEwHq
AZIB8wH0Av8BAAP/BgAB8wHvAvcG7wH3AZEBuwGRAewC8wH3AQkEuwG8AfIB6wESAZEBuwHvA/cB7wL3
Ae8B7QEHAf8SAAG8AWwBFAFDARUBbAGuAZEBtQG7AQcB7wHtAa4BEgETAWYBFAHrAf8bAAH/AfMB/wIA
Af8BBwFzAUoBIgFEAUsBIgFEAVEB8wEHAf8CAAHzAfQB/xMAAf8B9AHyAbwB8AEHAewBEgHsAUMBDgFD
AfIB8AHzAe8B9wT0AfECEgHqAUMDDgFDAe8B8QH0Av8JAAHyAewBbAGRArsDCQHwAQkB8ALzARkBuwHs
AfcBCQK8AfMB8AG7AWwBEgGuAbsBvAK7CZEBvBIAAbwBbAEVAkMBbAGuAZEBCQEZAvQB8AGSAW0BEgFm
ARUB6wH/IQAB7wFzAUoBIgFKAXMBRAFLAVEC8RkAAf8B9AHwAbwB8AHzAQcB7QESARUBFAG8AfIBvAHw
AfEB8wLxAfIC8QH3AfEB8AHvAfAB8gHwAbwBBwHzAf8LAAK8AfEL8gHxAQkCuwG8AQAC8wH/Ae8BkQG7
AbwO8gH/EQABvAGuARIBEwIUARMBkQEJARkD/wG8AewB6gIUAesB/yAAAf8B7wJKAUQBSwFKAXMBdAFz
Ae8B8QH/GAAB/wHzAvAD9AH3AW0B7AGSAfQBvAHvAewB7QH3AbwD8AHyAfAB6wHqAfcBvAHsARIB7wHy
AfQB/wsAD/8B8wG8AbsB9wHzAgAB8wHsAbsB8AHzD/8RAAHwAZEBbQESAUMBFAHqAZEBtQEJA/8BGQHs
AeoCFAHtAf8gAAH/ARwBSgFEAiIBSgFzAXkBHAGSAQcB8wH/FwAB/wHzAbwC8AH0AfIB7wHrAfcB8AG8
AfACvAEHArwB7wHsAQcB7wEUAewBBwHyAewBEgHtAbwB8wL/GwAB8wEJAbsB7QH0Af8B6wGRAfIB8yEA
AfMBCQGRAa4BEQEVARIB6gG1AhkC/wEZAewB6gEUARMB7yEAAfMB7AEVASIBDgEiA0QBSgHtAZIB7wHz
Af8VAAH/AfQB8gHwAbwD8AH3AesBBwHwAbsC8AH0A/MB8QEHAbwB6gHrAQcB7QHyAZIB8QHzAvQB/xwA
Af8B8gG8AbQB7QHrAZEBvAH0IgAB/wHwAbwBkQEUAhUBbQHsAvcCGQG7Aa4C6gGuAfEgAAH/AfIB6wFE
AUoBRAIiARABIgFEAUoB7AGSAQcB9BQAAf8B9AHzAfECvAHwArwBkgFtBLwBuwHyBPQBCQEHAe0BbQLv
AfABvAHzAfQD/x0AAf8B9AEIAbsB9wG8AfQkAAHzAfIBvAHrARMBFQHvAuwB6gHtAQkBtQGuAuoB9wH/
IAAB/wHwAkoBSwFKASIBFQIiAUoCcwHtAe8B9BQAAf8B8wHwAfEC8gHxAvABvAHwAbwB8AG8AbsBvAHw
AvQC8gK8Ae8B6gHvAfEBvAHzAfQC/yEAAfMBvAHyAfQmAAG8AfMB7wHrARQBGQL3AeoBrgH3AbUBrgLq
AfIhAAH/AQcBRAFKAXkBSwEiAQ4BIgEQAUoCdAFzAe8B9BMAAf8B8wHxAvID8wHyAvMB8gHwDLwB6gH3
AvAC9AH/IgAB/wHzAfQnAAH0AfAB8wEJAbUB9AK1Aa4BkQK1Aq4B8AL/IAAB/wHtAUQBSwGZAXMCDgEP
ARUBSgFLAUoBcwGZAfMTAAH/AfMB8gL0Av8D9AHzAfIEvAbwA/IC7wEHAfIB9AL/TAAB/wHzAbwB8QHd
AfQBvAG1Aq4BkQHPAa4BBwP/IAAB/wHtARUCSgEQAQACDgEPASIBDwEQAUoBmQHzEwAC/wH0Bv8B9AHx
BbwB8gLzB/QB8wL0Av9MAAL/AfQBBwH0AfEC9AG1Aq4B7wH0AfIBvAH0Av8gAAH/Ae8BIgEOARQBEQFK
AXQCDgMAAXMBmQH0EgAJ/wH0AfIB8AG8AfAC8gHzAfQC/wMACP9NAAL/AfIBBwH0Af8B8wHwAfcBjAEH
Af8B9AHyAbwB9AL/IQAB7wEiAUMBdAJKAZkBIgFEARABEQFKARwBGgH0EgAB/wEAA/8BAAL/AfQB8gLx
AvIC8wL/BQAB/wIAA/8EAAT/RwAB/wH0AfEBBwHzAfQC8AHtAYwBvAL0AfEBvAH0Av8hAAHwASIBRAGZ
AUQBcwGZASIBRAFzAXQBSgEcARoB9BcAAf8C9AHzAfIC8wHyAvQB/xAABv9GAAH/AfQB8QEHAvMCBwHt
AYwBtQLzAfABvAHzAv8hAAH0AeoBSwGZAQ8BcwGZASIBRAFzARwBIgEUAfIB/xYAAv8B9AHzBfQC/w8A
CP9GAAH/AfQB8wEHAbwB8AO1Ac8BtQLwAQcBvAHzAv8hAAH/Ae8CbQEQARwBmQFKAZkBbgFKAZkBvAH/
FwAB/wT0Bf8IAAH/BgAB/wIABv9GAAL/AfMBvAIHAe8EtQMHAbwB8wL/IgAB9AG8AesBEgHsAUQBSgFz
AesBbQGZAfEB/xcAAf8C9AL/AQAC/xUABf9HAAH/AfQBvAEHAbUB7wS1Ae8CBwHyAfQC/yQAAf8B8wH/
AbwB7QHxAf8B8wH0GQAF/2QAAv8B9AHwAbwBtQEHAbUBBwG1AgcB8QH0Av8pAAH/HQAD/2YAA/8B9AHw
ArwBtQEHAbwBBwHwAfMD/7IAAv8C9AHxAbwB8QHzAvQC/7UAA/8B9AHzAfQE/7cAB///AP8A/wD/AP8A
ngAE/1wACv9TAAP/A/QD/1kAAv8F9AHzAfQC/1IAAf8C9AHyAfEC8AHxAfMB9AH/WAAB/wH0AfMD8gHx
AvIB8wH/UgAB/wH0AfEBBwLvAfcB7wG8AfMB/yAABf8D9AT/BQAC/wP0Bf8eAAEcAW4DHAFzAUoBbgHy
AfQC/1AAAf8B9AHtAgcB7QHsAfcBBwHyBf8bAAL/AfQB8wHyBfEC8wL/AwAC/wHzAfIC8QLyAfMC9AH/
HQACHAHwAuwBHAHsAXQB8QHyAfQB/ycABv8jAAH/AfABvAHvAfABBwHtAZIB7wHxBPMC9AT/FQAB/wH0
AfIB8AIHA+8D8AHyAfQB/wMAAf8B9AHwAu8BvATwAfEB8wH0Af8bAAEcAZkBvAFKAUsBHAHsAXQB8AHy
AfMB9AH/JAAC/wH0AvIB8QHyAfMB9AH/HwAC/wHzAe8BBwLyAbwBBwL3Ae8EBwLwAfEB8gLzAfQE/w4A
Av8B9AHwAe8B7AFtARIB6gRKARwB8gP/AfMB7wETAREDQwERAeoB7QEHArwB8AHxAfMC/xMABv8BHAGa
AfABSgFRAe8B7AF0AfAB8QHyAfMB9Ar/FwAD/wH0AfABBwL3Au0BBwG8AfIC9AP/GQAC/wH0AfABBwLw
AfQCvAGSAe0DkgXvA7wB8QHyAfMB9AL/DQAB/wHzAfAB7AESAW0BHAEHAxoCmQG8AfQB/wH0AewBEwFE
AUoBcwIcAnMBSgEVARMB7AO8AfAB8gH0Af8RAAL/BfQBHAGaAbwBSgFRAe8B7AF0AbwC8QHyAfMK9AL/
DQAG/wT0AbwC9wHsAZIBkQHsAZEB7QHvAQcB8QLyAfQB/xgAAv8B9AHzAfEBBwG8A/MBBwLtAe8BkgHt
AZIF7wIHAvAB8gHzAfQC/wwAAf8B8QHrAUQBeQEbAfQB8wHxArwBGgHwAfQB/wHxARIBEQFzAZkBGgG8
AwcB7wEcAXMBSgEVAW0B8QHwAQcBvAHyAfQB/xAAAf8B9ALzA/IBHAGaAQcBSgFRAe8B7AF0AvAD8Qny
AfMB9AH/DAAB/wH0AfMC8gLwAwcB9wHtAewD6wLsAW0B7ALtAQcB8AHxAfAB8wH/FgAC/wH0AfMB8gHx
AbwBBwG8AfEBBwHsAZIB7wIHAu8BBwG8A/AC8QLyAvMC9AP/CgAB9AHsAUQBeQIbAfIB9AMAA/8B8AJK
ARwBBwG8AgcB8QH0Af8B9AHxAe8BcwFLAUoB7AHyAfABBwG8AfMB/xAAAv8B9AHyA/EBHAGgAe8BSwFR
Ae8B7AF0A/AB8QLwCPEB8gL0Af8KAAH/AfQB8wHyBPEB8AEHAZIB7QLsAesC7AGuAewB6gFtAesC7AH3
AbwB8AHxAfMB9AH/EwAC/wL0AfMB8QHwAbwBBwH3AbwB9wFtAesB8QPyAfEB8gHzB/QH/woAAQcBFAF0
ARoBvAH0BwAB9AHqAUsBmQEHAfEB8wHxAQcB8AHzAf8CAAH0AbwBcwFLAUoB7wHyAbwBBwHwAfQB/xAA
Af8B9AHzAfIB8QHwARwBoAHvAUsBcwGZAewBcw3wAfEB8gHzAfQB/wgAAf8B8wHwAbwBkgLtAewB6wH3
AZIB7AJtAesCkQHtAZIBkQLtAZEC7AKuAe0B7wIHAfAB8wH0Av8QAAL/AfQB8wHyAfEB8AG8AQcB7wG8
AfQB8AHtAfQG/xcAAf8BEQFuARoBvAHyAf8GAAH/AfcBRAGgAQcBvAHyAbwB8wG8AQcB8QH0Af8DAAG8
AksBSgG8AfEBBwG8AfMB/xEAAf8B9AHzAvEBHAHDAQcBUQF0AZkB7AFzAvEC8AnxA/IB8wH0Af8HAAHv
AewBbgF0AXkCegKgAXoBeQF0AUoBFQERARUB6gHrAZIB7AEHAbwB9wLvAZIB7QH3AQcB8AMHAfAB8gHz
AfQB/w4AAf8B9ALzAfIB8QLwAfEBBwHyAvQBvAEHAfIB8QHwAgcB8AL0Af8TAAH/Ae8BRAEcAbwBBwHy
Av8FAAH0AesBmQEaAQcB8AHtAeoB8wHwAQcB8QH0Af8EAAHvAksBHAHxAQcBvAHyAf8SAAH/AfQC8wGZ
AcMBvAFzAXQBGgHtAW4C8gXxAvIH8wL0Af8FAAH/AfIBHAGZAQcCvAXwAfIB8wMbAcMBmQHsA20C7AGS
Ae8B9wHtAfcBBwHzB/IB8wH0Av8LAAL/AfQC8wHyAfEB8AEHAfcB8QP0Ae8B6gFtAewB9wHvAQcB7wEH
AfAB9BIAAfMBFQFKAZkB8AG8AfAB8wL/BAAB8QHsARsBvAHwAQcBSgFLAe8B8QG8AfEB9AH/BAAB9AFu
AUsBcwG8AQcBvAHyAf8MAAKSBRwBkgH3AhwBGgGZAXQBeQEaARwBSwHtCOwB7QHyCP8FAAH/AfMBBwG8
AfAB8wH0A/8B9AHyArwDBwHwAbwB8AEbARoBmQEcAXQBbgHqAW0B7AH3AbUB8gHzAvQD/wX0Af8LAAH/
AvQB8QEHAfcBbQESAeoBvAT0AesBQwFtAe0EBwHxAbwB8hEAAQcBEQFzAZkB8wHxAfAB8QHzAf8EAAEH
Ae8B9AHwAfQBvAFzAnQB8wLyAfQB/wUAARwCSwHvAQcBvAHzAf8MAAF0ARoEwwb0AcMCmgEaARwBdAGZ
Ae8GmQHvAXMB8w8AAfAB8QH/BgACBwG7AgcBuwG1AQcC7wGRAQcB8QIbAcMBmQFLAeoBkQHwAfIB9AH/
BAAC/wL0Af8LAAH/AfEBBwH3AuwB6wESAeoBBwT0AZIBFQFtAe0B7wG8AvIB8wHyAbwB8QH0Af8OAAHt
AUQBHAG8AfQB8wHyAfEB8gHzBP8B7QG8AfQB8gH/AfQBcwJ0A/QB/wQAAv8BBwFKAUsB7QHwAfEB9AH/
DAABmQHzBPEI8gF0AcMBHAFuAfABvAYHAbwB8QHzEAAB8wH0Af8FAAG8AfIBvAHyAfQB8gG8A/QB7wHz
AfIB8AEHARsBGgEbAaACcwEcAfEB/wUABP8KAAH/AfEDBwH3Ae0B6wFtARIB9wT0AfcBFAETAewB7wG8
AfID9AHzAvAB/w4AAe0BSgFzAfAC/wH0A/IB8wL0Af8B7AG8AvMC/wHsAZkBeQH0CP8B9AEHAUQBcwEc
AfIB9AH/DQAB7wEcA0oCSwFRAXMBdAF5ApkBeQGZARsBHAFRAUsHSgFuAfAB8gH/DwAB/wL0Af8EAAG8
AfMB8AHzAQAB8gG8AQAC/wEHAfQB/wH0AbwB/wHyAbwBBwIaApkBBwHyEgAB8QPwAgcB9wHtAesBEgHr
A/QBBwHsARMBEgHrAfcB7wHxBfQC8AH0DQAB7QFKAXMB8QIAAv8B9ATzAfIBcwGZARsB8AHzAfQB7AGZ
AZoB9AIAAf8D9APzAe8BRAFzARwB9AL/DQAC7wVRAXQBeQF6AaABwwH0AqABmQF0AXkBdAJRBUsBcwHw
AfIB/xIAAvQDAAG8AfMB8AH/AQAB8wG8AgAB8wEHAf8BAAH0AbwC/wHxAbwCBwEaARsBmgF5AQcB/w4A
Af8B8wHwAfQD8wHwAQcB7QFtARIBbQHyAfQB8QHvAQcB7wGSA/cBBwHxBfQC8QH/DAABHAFKAUsBBwQA
Av8C9ALzAXMBmQHDAbwB9AHzAesBmQGgAfQCAAH/AvQE8wHtAUQBcwG8Af8PAAHvBBsBGgQbAZoBwwHz
AZkC8wUbAxoCvAEaAfEB8AH/EgAC/wH0Af8BAAG8AfABvAHyAfQB8gG8AvMB8QG7AvMB8QEHAfMB8QEH
Ae8BBwHxAfMB8AG8AQcBmQG8AfQMAAH/AfQB8AX0AfMBBwGSAesBEgHsAfIB8AHzAfAB8wG8AfIB8AS8
AfAB8wT0AbwB8gwAAbwBSgFLAe0B/wQABf8BHAF5AcMBvAH0AfABHAEbARoDAAP/BPQB6wFKARwB8xAA
AW4BHAaSAxwBoAHzAZkBBwHvBBwBkgbtAXMB8QH/FAAC/wEAAbwB8ALyAfQB8gG8AvQB8wG7AvMB8QEH
AfMB8gEHAfABBwH0AQAB/wHyAbwCBwG8Af8LAAH/AfEB8gb0AbwB7wFtAesBvAHxAf8BvAHvAfMB8QIA
Af8B9AHyAfAB8gLxBPQBvAH0CwAB9AFKAksB8gkAAfMBdAGgARoB/wEAAbwBGwG8BgAD/wHzARQBUQGZ
AfQQAAF5CpkBoAHzAZkBoAHDAqACGgKZBe8BmQH0GAAB/wL0AfMBAAH/AfADAAG8Af8BAAL0AQAB/wLz
AfEB/wQAAbwBBwG8AfMLAAH/AfAH9AHyAfcB7AEHAfIBAAH/AfQB8QHyAf8FAAH/AfQC8wPyAfEB8AH0
DAAB7wFKAUsB6wH/CAAB9AEcAaABmQEHAf8B9AEbAf8IAAH/Ae0BRAGZARsB/xoAAQcBmgHzAXkBoAHz
ARoBwyQAAfMB8gG8AfQB/wHzAwABvAH/AQAC9AEAAvEBvAHzAwAB/wEAAfABvAHwAfQB/woAAfMB8Ab0
AfIBvAEHAbwB8wH/AwAC/woABv8MAAH/AXMBSwFKAe8B/wcAAf8B8AKaARwBBwEAAfQIAAH/Ae8BFQFz
ARoB8wH/GgABHAGaAfMBeQGgARsBBwHDJAAB/wHwAbwB8AHzAfAD8gEHAfEB8gG8AfAB8QIHAbwB/wIA
Av8B9AHxAfIB8wH/CwAB8QHyBfQB8QHzAfQB8gHzJAAB8wJLAUQB9wH/CAAB8gF6AZoBcwG8CAAB/wEH
AREBbgEaAfAcAAIcAfMBdAGaAcMBBwEbJQAB8wK8AfIB8AG8AfIB8wEHAfIB8AEHAfEBBwHvAQcB9AL/
BPQC/w0AAfEB8wL0AfMB8gLzAfIB8QHzJQAB/wEHAXMBSwFKAW0BvAHzA/8B9AHzAf8BAAEaApoBcwHv
AfIB9AP/AfMB8QHrAUQBcwGZAfEB/xwAAhwB8gFzAXoBwwEHAfQnAAHyAfEC9AH/AQABvAH/AfIC8wEH
AfMB/xYAAfAB8wT0AfEB8gH0Av8mAAH/AbwBHAFzAUsBRAESAesC7AFtARIBvAEAAf8BGgKaAXMB6wHs
Au0B7AFtAUoBdAGZAhsB/x0AARwBdAHyAVEBeQHDAQcB9CcAAf8B8gK8AfAB8gG7AbwBBwG7AQcB8wH/
FwABvAHzAvQB8gHwAf8sAAHzApkBHAFzA0oBSwF0AZkB8wIAAbwBmgLDARoB7wHtAe8BGwHDAhsB8R8A
ARwBcwHyAUsBdAEaAQcBGykAAfABCAHwAfMCCQIHAfMZAAHxAfQC8gH0LwAB/wHyBRoCGwHyAfMDAAH0
AfEBGgEbA/QB8gHxAfIB9CAAARwBcwHyAUsBcwEaAZkBwysAAf8C9AHzAfQbAALyAfQB/zIAAf8G9AH/
BQAB/wf0Af8hAAEcAXMB8gFLAXMBGgHvAcNLAAHxAf9rAAEcAXMB8wGZARoBGwHvAcO4AAGZAXQD8wH0
AZkBoLgAAvQD8wP0/wD/AP8A/wD/AP8A/wDLAAFCAU0BPgcAAT4DAAEoAwABwAMAAeABAQIAAQEBAAEB
BgABLRYAA///AP8A/wD/AIUAIP8Bfxb/AfkBHwv/Af4BPwn/AcABBwv/AfgBHwn/AcABAAE/Cv8B8AEP
Cf8B8AEAARwK/wHgAQABfwj/AfACAAEfCf8CAAEPAv8B+QEAAQED/wHwAgABDwP/AgABfwP/AgABDwL/
AcACAAEPAv8B8QIAAQcC/wH8AgABDwP/AgABDwL/BAABPwH/AfEDAAF/Af8B8AIAAQ8C/wH4AYABAAEI
AX8B/gQAAR8B/wHxAQQCAAE/Af8B4AIAAQ8C/wH4AwABPwH+BAABBwH/AfEDAAEfAf8BwAIAAQ8C/wH4
AwABPwH+BQAB/wHxAQABgAEAAQcB/wHAAgABDwL/AfgDAAEfAfwFAAH/AfMDAAEHAf8BwAMAAX8B/wH4
AwABHwH4BQAB/wHzAgABCAEPAf8BwAMAAR8B/wH8AgABDAEfAfAFAAH/AeMDAAEPAf8EAAEHAf8B/AMA
AR8B+AUAAf8B4wMAAR8B/gQAAQcB/wH2AwABHwH8BQAB/wHzAwABDwH+BAABBwH/AfADAAE/Af4FAAH/
AfIDAAEDAfwEAAEHAf8BwAMAAR8B/wQAAQEB/wHyAQABCAEAAQMB8AQAAQcB/wHAAwABDwH/AcADAAEP
Af8B8wEAARgBGQE/AfAEAAEHAf8BwAMAAT8B/wH8AwABHwH/AfMBAAEQAQEB/wHgBAABBwH/AcACAAEB
Av8B/AMAAT8B/wHzAQABEAEBAf8B4AQAAQcB/wHAAgABAQH/AfgEAAL/AfMCAAEDAf8B8AQAAQcB/wHA
AgABAQH/AfADAAE/Av8B4AIAAQEB/wHwBAABBwH/AcEBgAEAAYEB/wHwAwABPwL/AeEBAAGAAQEB/wHw
BAABBwH/AcEBgAEAAcEB/wHwAQEBwAEAAT8C/wHgAQABgAEBAv8EAAEfAf8BwAGAAQEBgQH/AfABCwGA
AQABfwL/AcABAAGAAQMC/wHAAwABPwH/AcACAAEBAf8B+AEPAcABAAF/Av8BwAEAAYABBwL/AcACAAED
Av8BwAIAAQED/wHgAQABfwL/AcACAAEDAv8B4AIAAQ8C/wHAAgABAwP/AfABAQP/AcACAAEBAv8B4AIA
AQ8C/wHgAgABAwP/AfwBAwP/AcACAAEBAv8B+AIAAQ8C/wH4AgABBwj/AcICAAERAv8B+AIAAT8D/wIA
AQcI/wHCAgABAwL/AfgCAAF/A/8CAAEPCP8BwwGAAQABAwL/AfgCAAT/AYABAAEDCP8BwwGBARABBwL/
AfgBAAEBBP8B8AEAAQEI/wHhAQEBEAEHAv8B/AEAAQME/wHgAQABAQj/AfMBAQEQAQcD/wEAAQcE/wHg
AQABAwj/AfMBAQEYAT8D/wGAAR8E/wHgAQMJ/wHzAYMBiAE/A/8BwAE/BP8B4AEHCf8B8wHDAZgBPwP/
AeABPwT/AeABDwn/AeMB/wGYAT8D/wH8Bf8B8AEHCf8BxwH/AZwBfwn/AfABHwn/AccB/wGfCv8B+AEf
C/8BHxf/AT9e/wH8AT8W/wH4AR8Q/wHgAQ8E/wHwAQ8Q/wHgAQAE/wHwAQcC/wHfAv8BDwH/AT8I/wIA
AR8D/wHwAQMC/wHfAf8B4AEDCf8B/AIAAQED/wGAAQABHwL/AwABDwj/AfgDAAP/AgABBwH/Af4EAAE/
B/8B8AMAAX8B/wH+AgABAQH/AfwEAAEfB/8B4AMAAR8B/wH4AwABPwHwBAABAQf/AcADAAEPAf8B+AMA
AT8B8AUAAv8B/gF/A/8B4AMAAQcB/wHwAwABDwHwBQAC/wH8AX8C/wF/AcADAAEDAf8B4AMAAQcB8AUA
AfAB/wH8AR8B/wHHAX8BwAMAAQMB/wHgAwABBwHwBQAB8AExAfwBBwH4AQMBfwHAAwABAQH/AfADAAED
AfAFAAHwAQABYAEDAYABAQF/AYAEAAH/AcADAAEBAeAFAAHwBAABAQF/AYAEAAH/AcADAAEBAeAFAAHw
BAABAQE/AYAEAAH/AYAEAAHgBQAB+AUAAR8BwAQAAf8FAAHwBQAB/AUAAR8BwAQAAf8FAAHwBQAB/AFA
AwABAQEfAYAEAAH/BQAB+AUAAf4BMAMAAQEBHwGABAAB/gUAAfwFAAH+AQgDAAEDAR8BgAQAAf4FAAH+
BQAB/wEIAwABBwEfAYAEAAH+BAABAQH/AcAEAAH/AYABIQGAAQEB/wEfAYAEAAH+BAABAwH/AeAEAAH/
AcABAgFAAQEB/wE/AYAEAAH+BAABBwH/AfAEAAH/AcECAAEBAf8BfwQAAQ8B/gQAAR8B/wH4BAAB/wHz
AYQBIAHBAv8EAAEfAf4EAAE/Af8B+AQAAv8BgAERAfkC/wQAAT8B/wQAAX8B/wH4AwABAQL/AcgBgwF/
Av8EAAE/Af8EAAF/Af8B+AMAAQ8C/wHwAQ8D/wQAAR8B/wQAAX8B/wH4AgABAQP/AfABhwP/BAABHwH/
AYADAAL/AfgCAAEBA/8B8AGPA/8EAAE/Af8BgAMAAv8B/AIAAQED/wH8AR8D/wQAAX8B/wHAAgABAQL/
Af4CAAEBA/8B/AEfA/8EAAF/Af8BwAIAAQEC/wH+AgABAQP/AfwBPwP/AYACAAEBAv8B4AIAAQED/wIA
AQMI/wHAAgABBwL/AfACAAEDA/8BgAEAAQMI/wH4AgABfwL/AfACAAEHA/8BwAEAAQcJ/wEAAQMD/wH8
AgABDwP/AeABAAEfCf8BgAEDA/8B/gIAAR8D/wH4AQABfwn/AcABBwT/AgABfwP/AfwBABD/AeABAxb/
AfwBf9D/AgAQ/wGfAfwBDwL/Af4CAAF/Cv8BhwT/AQEB8AEPAv8B/gIAAX8D/wHHAf4F/wEDBP8CAAEP
A/8CAAF/A/8BAQHgAQcC/wH+AQYBAAF/Av8BAQIAAQMC/wH4AgABAwL/Af4BAAHAAQEC/wH+AQIBAAF/
Av8EAAE/Af8B8AIAAQEC/wH+AQABgAEBAv8B/AIAAX8C/wGAAwABDwH/AeADAAL/AfgCAAEBAv8B/AIA
AT8C/wGAAwABBwH/AeADAAF/Af8B+AIAAQEC/wH8AgABPwH/Af4EAAEHAf8B8AMAAv8B+AIAAQEC/wH4
AgABPwL/BAABBwH/AfQCAAEBAv8B+AMAAv8B+AIAAR8C/wQAAQcB/wHgAgABAwL/AfgDAAL/AfgCAAEf
Av8BgAMAAQcB/wHgAgABDwL/AfwDAAL/AfgCAAEfAv8BwAMAAT8B/wGAAgABAQL/AfwDAAE/Af8B+AIA
AR8C/wHBAYACAAF/Af8BgAIAAQEC/wH4AwABPwH/AfgCAAEfAv8BwQGAAgABPwH/AYACAAEDAv8B+AMA
AT8B/wE4AgABHwL/AuACAAE/Af8BgAIAAQEC/wH4AwABPwH+AQwCAAEDAv8B4AFAAQABDAE/Af8BgAIA
AQEC/wHwAwABPwH+AwABAQL/AfACAAEPAX8B/wGAAgABAwL/AeADAAE/Af8BwAIAAQEC/wH4AgABHwL/
AcACAAEHAv8BwAMAAT8B/wHAAgABAQL/AfgCAAE/Av8B8AIAAQ8C/wHAAwABPwH/AcACAAEDAv8B+AIA
AT8C/wH4AgABHwL/AfADAAE/Af8BgAIAAQMC/wH4ASABAAF/Av8B+AIAAT8C/wHgAwABPwH/AYADAAF/
Af8B/AIAAX8C/wH4AgABfwL/AeADAAE/Af8BgAMAAT8B/wH8AQABAQP/AfwCAAF/Av8B4AMAAT8B/wGA
AgABCAE/Af8B/gEAAQMD/wH+AgABfwL/AcADAAE/Af8BwAIAAQ8BBwH/Af4BAAEDA/8B/gIAA/8BwAMA
AX8B/wHAAgABDwGHAf8B/gEAAQMD/wH8AgAD/wHAAwAC/wHgAgABHwL/Af4BAAEDA/8B+AIAAT8C/wHA
AwAC/wHwAgABDwL/Af4BAAEHA/8B+AIAAT8C/wHAAwAC/wHwAQABAQEPAv8B/gEAAQ8E/wIAA/8BwAIA
AQEC/wHwAgAD/wH8AQABHwT/AgAD/wHAAgABAwL/AfwBAAGAA/8BCAEAAT8E/wIAA/8BwAIAAQcD/wEB
AYAD/wIAAX8E/wIAA/8BwAEAAQ4BDwP/AQEBgAP/AgABfwT/AgABfwL/AcABAAEPBP8BAQGAA/8BgAEA
AX8E/wIAA/8BwAEAAQ8E/wEBAYAD/wGAAQABfwT/AgAD/wHgAQABHwT/AQEBwQP/AeABAAX/AQABAQP/
AeABAAEfBP8BAQHjA/8B8AEDBf8BgAEBA/8B4AEAAR8E/wEBAfMD/wH4AQcF/wHgAQMD/wH4AQABPwT/
AQEL/wHgAQcD/wH4AQABPwT/AcML/wH8AR8D/wH4AQABfwT/AccR/wEDd/8B4AE/EP8B/gE/BP8BAAED
EP8B/AEfBP8BAAEBCv8B4AEAAT8D/wH4AQ8D/wH+AgABfwn/AYABAAEPA/8B+AEHA/8B/gIAAX8D/wHg
AQME/wIAAQMD/wGAAQABfwP/AgABfwL/AfgCAAEPAv8B/gMAAX8C/wIAAT8D/wIAAX8C/wHwAgABBwL/
AfwDAAE/Af8B/gIAAQ8D/wGAAQABfwL/AeACAAEBAv8B+AMAAR8B/wH4AgABAwP/AgABfwL/AcADAAF/
Af8B+AMAAQcB/wH4AgABAQP/AYABAAF/Av8BgAMAAT8B/wH4AwABBwH/AfgCAAEBA/8BwAEAAR8B/wH8
BAABHwH/AfgDAAEDAf8B4AMAAX8C/wHAAQABDwH/AYAFAAH/AfADAAEBAf8BwAMAAT8C/wGAAQABBwH/
AYAFAAH/AeAEAAH/BAABDwL/AwABfwGABQAB/wHABAAB/gQAAQEB/wHwAwABPwYAAf8BwAQAAf4FAAH/
AfADAAEHBgAB/wHABAAB/gUAAf8B8AMAAQcGAAH/AYAEAAH/BQAB/wHwCgAB/wGABAAB/wHAAwABAQH/
AfgKAAH/AYADAAEBAf8EAAE/Af8B+AoAAf8BgAMAAQMB8AQAAT8B/wH4CgAB/wGAAwABAwHwBAABHwH/
AfgKAAH/AYADAAEHAfgEAAEPAf8BwAkAAQcB/wGAAwABHwH+BAABDwH/AcAJAAEDAf8BgAMAAT8B/wHA
AwABPwH8AUAJAAEDAf8BgAMAAX8B/wHAAgABBwH/AfwDAAEBAeAFAAEDAf8BgAMAAv8B4AIAAQcB/wH+
BAABeAUAAQcB/wHAAwAC/wHgAgABBwH/AfwEAAF/AYAEAAEHAf8BwAIAAQEC/wHwAgABDwH/AfwEAAE/
AYEDAAEBAR8B/wHAAgABAQL/AfACAAEPAf8B+AQAAT8BgQMAAQEBHwH/AeACAAEDAv8B+AIAAQ8B/wH4
BAABPwGDAYACAAEBAe8B/wHgAgABAwL/AfwCAAE/Af8B8AQAAT8B/wHAAgABAQL/AfgCAAEHAv8B/AIA
AX8B/wHwBAABHwH/AcACAAEBAv8B+AIAAQ8C/wH+AgABfwH/AfAEAAEfAf8B4AIAAQEC/wH8AgABHwP/
AcABAwL/AfAEAAEfAf8B+AIAAQMD/wIAAX8D/wHwAQ8C/wHwBAABHwH/AfgCAAEDA/8BgAEABP8B/AEP
Av8B8AEHAfABEAEAAR8B/wH4AgABBwP/AeABAwT/Af4BHwL/AfABHwH/AX4BAAEfAf8B/AIAAQ8J/wH+
AR8C/wHwAT8C/wHIAT8B/wH+AgABPwn/Af4BHwL/AfgBfwL/AfgBPwL/AgABfwr/AT8K/wH4AR8L/wE/
rP8B4AEfFv8BgAEDFf8B/gIAAX8D/wHgAQcP/wH8AgABfwP/AeABAwr/AfABAwP/AfwCAAE/Av8B8AEA
AQMK/wHAAQED/wH4AgABHwL/AcABAAEBAcABPwH/AfwBHwHzBP8BgAEAA/8B+AIAAQ8C/wHAAwABPwH/
AfwBDwHABP8CAAP/AfgCAAEPAv8BwAMAAR8B/wH4AQcBgAF/A/8CAAP/AfACAAEPAv8BwAMAAQ8B/wH4
AgABfwP/AgABfQL/AfACAAEPAv8BgAMAAQMB/wH4AgABfwL/AcADAAL/AeACAAEPAv8EAAEBAf8B+AIA
A/8BgAMAAv8B4AIAAQcB/wH+BQAB/wH4AQABAQP/AYADAAL/AcACAAEHAf8B/gUAAf8B/gEAAQMD/wGA
AwAC/wHAAgABBwH/Af4FAAL/AQABAQH/AfkB/wGAAwAC/wHAAgABAwH/Af4FAAH4Af8BwAEAAR8B4AH/
AYACAAEBAv8BwAIAAQMB/wH8BQAB8AF/AgABDwHgAf8BgAIAAQEC/wHAAgABAwH/AfwFAAHwAT8BAAEg
AQcBwQH/AYACAAEBAv8BwAIAAQcB/wH8BQAB+AIAATABAAEBAf8BgAIAAQEC/wHAAgABBwH/AfwFAAH8
AgABHgEAAQEB8AQAAQ8B/wHgAgABBwH/AX4FAAH+AgABHwGAAQcB8AQAAQcB/wHgAgABBwH/AR4FAAH/
AQABAwEHAcABBwHwBAABDwH/AeACAAEPAf8BHgUAAd8BwAEDAYMBwAEHAfgEAAEPAf8B4AIAAQ8B/wEe
BQABzwHgAQABQwGAAQ8B+AQAAR8B/wHgAgABDwH/AR4EAAEGAcMB8AMAAQ8B/AQAAR8B/wHgAgABDwH/
AR4EAAEGAeMB/AEAARABAQEfAfwEAAE/Af8B8AIAAQ8B/wEeBAABDgHzAfgBPwH4Ah8B/gQAAT8B/wHw
AgABDwH/Af4EAAEOAvABOQGcAQ4BPwH+BAABPwH/AfgCAAEPAf8B/gQAAT4B8AFgAXgBHgEMAT8B/gQA
AT8B/wE4AgABHwL/BAABPgH8AQEB/AE/AQABfwH/AYADAAF/Af4BCAIAASABfwH/AYADAAE+Af4BAQHw
AQ8BgAL/AcACAAEBAf8B/AEEAgABIAE/Af8BgAMAAT8B/gEBAfABDwGAAv8B4AEgAQIBAwH/AfwBBAIA
AUABPwH/AcADAAL/AQMB/AF/AcAC/wHAASABAAEHAf8B+AEGAgABwAE/Af8B4AIAAQEB/wH+AQEB/AF/
AYAC/wHAASABAAEHAf8B+AEHAQABAQHAAT8B/wHwAgABAQL/AQAB/gF/AQEC/wHAASABDAEHAf8B/gEH
AeAB/wHgAX8B/wHwAgABDwL/AYgBPwH+AR8C/wHgATABHgEHAf8B/gEPAfwBfwH4Av8B8AIAAQ8C/wH8
AQcB8AE/Av8B4AE8AR4BBwL/AR8B8AEfAfkC/wHwAgABDwP/AQMBwAF/Av8B4AF/Af4BDwP/AfABHwP/
AfgCAAEfA/8B8wGDA/8B+AL/AQ8D/wHgAQ8D/wH4AgABPwT/Ae8K/wHgAQcD/wH4AgABPw//AeABBwP/
AfgCAAF/D/8B4AEHA/8B/AIAEP8B4AEPA/8B/gEAAQEQ/wHwAR8E/wEAEf8B+AE/BP8B53H/AcABPxX/
AfgCAAF/Av8BuwL/AfEO/wHgAgABHwL/AaEC/wHBCv8B/gF/Av8BwAIAAQ8C/wGBAv8BwAj/AfACAAEf
Av8BgAIAAQEC/wGAAX8B/wEAAX8H/wHwAgABHwL/BAAC/wGAAT8B4AEAAT8B/wH+Af8B/AF/Av8B8AIA
AQ8C/wQAAT8B/wHAAT4CAAE/Af8B/AEDAYABfwL/AfACAAEHAf8B/gQAAR8B/wHAAwABPwH/AfgBBwHA
AR8C/wH4AgABAQH/Af4EAAEfAf8BwAMAAR8B/wHwAQcBwAEPAv8B+AMAAv8EAAEPAf8BwAMAAR8B/wHg
AQcBwAEPAv8BwAMAAQMB/wQAAQcB/wHAAwABDwH/AcABBwHAAQcC/wHAAwABAQH/BAABBwH/AcADAAEP
Af8BwAEHAcABAwL/AcAEAAH+BAABBwH/AcQDAAEPAf8BgAEHAeABAwL/AcAEAAH+BAABBwH/AcADAAE/
Af8BgAEHAeABAQL/AcAEAAH+BAABBwH/AcADAAE/Af8BAAEHAeABAQL/AcADAAEDAfwBIAIAASABDwH/
AYADAAL/AQABDAEQAQEC/wHAAwABBwH8BAABDwH/AYACAAEBAf8B/gIAARABAAL/AcEDAAEPAfwEAAEf
Af8BgAIAAQMB/wH+AQABEAIAAv8BwQHgAgABDwH8BAABPwH/AYQCAAEDAf8B/gEAASACAAH/AfABAwHg
AgABBwH8BAABfwH/AYQCAAEBAf8B/gQAAf8B4AQAAQcB/AMAAQEC/wGAAgABAQH/Af4EAAH/AfABAgMA
AQcB/AEwAQABQAFhAv8BgAIAAQEB/wH+BAAB/wHwAQMB4AGMAQABfwH8ATwBAAFgAcEC/wGAAgABAQH/
Af4EAAH/AfgBQQHhAQwBHwF/AfwBPwEwAWcB4QL/AYACAAEBAf8B/gQAAv8BwQHiATwBPwH/Af4BHwL/
AcEC/wGAAgABDwL/AwABAQL/AcABxwEYAT8B/wH+AR8C/wHBAv8BhAIAAS8C/wMAAQEC/wHgAccBAAE/
Af8B/gEPAv8BgQL/AYACAAEvAv8DAAEBAv8B8AFPAZABfwL/AQ8B5wGfAYMC/wGHAgABHwL/AYACAAEB
Av8B8AEHAYABfwL/AQMB5wEeAQcC/wGGAgABGQL/AcACAAEDAv8B+AIAA/8BgQHnAR4BDwL/AYYCAAE5
Av8BwAIAAQEC/wH+AQABAQP/AcAB5wEcAQ8C/wGGAgABOQL/AcACAAEBAv8B/AIAA/8BwAEnAQABHwL/
AYQCAAE/Av8BwAIAAQEC/wH4AgABfwL/AeABBwEAAT8C/wGAAQABAQE/Av8BwAIAAQEC/wH4AX8B8AF/
Av8B+AEHAQABfwL/AYABNgGBAb8C/wHAAgABAQL/AeAB/wH4AT8C/wH8AQcBAQP/AYAB9gGRAb8C/wHA
AgABAwL/AeAB/wH8AT8D/wIHA/8BgQH3AZED/wHAAgABAwL/AfAL/wHHAf8B8wG/Av8BwAIAAQcO/wHH
Af8B+wG/Av8B4AIAAQcO/wHHBf8B4AIAAQ8U/wH4AgABDxT/AfgCAAEfFP8B/AIAAX8V/wHAAQMW/wH8
AZ98/wHgAQcP/wHgAT8B/wGBA/8BwAEDCv8B/AEfA/8BwAEfAf8BAQP/AYABAwr/AeABAAP/AYABBwH+
AQAD/wEAAQEF/wHwAX8D/wIAAQMC/wIAAf4BAAE/Av8BAAEBBf8BwAFgAX8C/wIAAQEC/wIAAf4BAAE/
Av8BAAEBBf8BgAEAAT8C/wIAAQEC/wGAAQABPAEAAR8C/wEAAQED/wH+AQcBgAEAAT8B/wH+AwABfwH+
BAABBwL/AQABAQP/AfwBAQGAAQABPwH/Af4DAAF/Af4EAAEHAf8B/gIAA/8B+AEAAYABQAE/Af8B/gMA
AT8B/gQAAQcB/wHwAgABHwL/AcABAAGAAQABfwH/Af4DAAE/AfwEAAEHAf8B4AIAAQ8C/wHAAQABQAEA
A/8DAAE/AfgEAAEHAf8BwAIAAQ8C/wGAAQABfgEDA/8B4AIAAT8B+AQAAQcB/wHAAgABBwH/Af4CAAE8
AQMD/wHwAgABPwHwBAABBwH/AYACAAEDAf8B/gIAARgBAwP/AfACAAEfAfAEAAEDAf8BgAIAAQMB/wH+
AwABAwP/AfwCAAEfAfAEAAEDAf8DAAEBAf8B/AMAAQED/wH8AgABDwHwBAABAwH/AwABAQH/AfwDAAEJ
BP8CAAEPAfgEAAEBAf4DAAEBAf8B+AMAAQ0D/wHwAgABDwH4BAABAwH+AwABAQH/AfgDAAEEA/8DAAEP
AfwEAAEBAf4DAAEBAf8B+AMAAQQD/wMAAT8B/gUAAf4DAAEBAf8B+AQAA/8CAAEBAf8B/gUAAfgEAAE/
AfgEAAF/Av8BgAEAAQMB/wH+BQAB+AQAAT8B+AQAAT8C/wHkAQABDwH/Af4FAAH4BAABPwH+BAABPwL/
Af4BAAE/Av8EAAEHAfgEAAE/Af8EAAE/Av8B/gFwAT8C/wGAAwABDwH4BAABPwH/AcADAAF/Av8B5AFw
AT8C/wGAAwABDwH8AQ8BgAEBAcABfwH/AfgDAAF/Av8BgAEAAT8C/wHAAwABHwH8AQ8BgAEHAcABfwH/
AfgDAAF/Av8CAAE/Av8BwAMAAT8B/gEHAYABBwHAAX8B/wH+AwABfwL/AgABPwL/AcADAAE/Af4BBwHA
AQcBwAP/AYACAAF/Af8B/AIAAX8C/wHgAwABHwH+AQcBwAEPAcAD/wHgAgABfwH/AfgBAAT/AeADAAE/
Af4BAwHgAQ8BwQP/AfACAAF/Af8B8AEABP8B8AMAAT8B/wGDAfABHwGBA/8B/AIAAv8B4AEDBP8B+AMA
Av8BwQH4AT8BAwP/AfgCAAL/AeABAwT/AfgCAAEDAv8BwQH5Af4BAwP/AfgCAAL/AeABBwT/AfgCAAEP
Av8B8AH/Af4BDwP/Af4BAAEBAv8B+wEPBP8B/AIAAQ8C/wH4AT8B8AEfBP8BAAEBCP8B/AIAAQ8C/wH4
AR8B8AF/BP8BwAEDCP8B/AIAAR8D/wEfAeMP/wH+AQABwAF/Ff8BAAH9Fv8BAJf/AfYX/wHAAT8H/wGB
AfMBzwH/AX8J/wH+AQABPwb/Af4BAAEhAQcB/wE/Af8B5wL/AecE/wHwAQABHwL/Af4D/wH+AQABQAED
AccBPwH/AcMB/wF/AeME/wHAAQABHwL/AfwBPwL/Af4BAQEAAQMBgQG/Af8BxwH8AR8B8QT/AYABAAE/
Av8B/AEfAv8B/AEDAQABAwGAAd8B/wHDAfwBHwHhBP8CAAE/Av8B/gEfAv8B/AEHAQABAQGAAV8B/wGH
AfABBwHhBP8CAAE/Av8B/AEfAv8B+AEBAgABwAFfAf8BgwIAAeAD/wE+AgABPwL/AfwBDwL/AfgDAAGA
AR8B/wEDAgABQAL/Af4DAAE/Av8B/AEfAv8B+AQAAR8B/wQAAv8B8AMAAT8C/wHgAQMC/wH4BAABPwH/
BAABfwH/AeADAAE/Av8B4AEAAv8B+AQAAT8B/wQAAX8B/wHgAwABPwH/AfgCAAEBAf8B+AQAAT8B/wQA
Av8BwAMAAT8B/wHAAwABfwH4BAABPwH/BAAC/wHgAwABPwH/AcADAAE/AfwEAAE/Af8BgAMAAv8BwAMA
AT8B/wGAAwABDwH+BAABPwH/AcADAAL/AYADAAE/Af4EAAEBAf8EAAF/Af8BwAIAAQEB/wF/BAABPwH+
BQAB/wHAAwAC/wHAAgABAQH/AX8EAAF/AfwFAAH/AfgCAAEPAv8B4AIAAQMB/wE+BAABfwH8BQAB/wH8
AgABHwL/AeACAAEDAf8BPgQAAWMB/gQAAQEB/wH8AgABPwL/AeACAAEDAf8BfgQAAUEB/AEAASACAAE/
Af8B/AIAAT8C/wHwAgABBwH/AX4EAAEhAfAEAAEfAf8B/AIAAT8C/wHwAcABAAGPAf8B/gQAASMB8AQA
AQ8B/wH8AgABPwL/AfgBwAEBAY8B/wH+BAABPwHgBAABDwH/AfwCAAE/A/8B4AEDAv8B/gQAAf8B4AEA
AQICAAEHAf8B/AIAAT8D/wHAAQEC/wH+BAAB/wHgAQABAQGAAQABBwH/AfwCAAE/A/8BwAEAAv8B/gQA
A/8B4AEHA/8B/AIAAX8D/wHAAQABfwH/AfwDAAEBA/8B4AEPA/8B/AIAAX8D/wGAAQABfwH/AfgDAAEB
A/8B8AEfA/8B/gIAAX8D/wGAAQABfwH/AfgDAAEHA/8B/AE/BP8CAAT/AYABAAF/Af8B8AMAAQ8D/wH8
AX8E/wIAAX8D/wGAAQABfwH/AfADAAEPCf8CAAF/A/8BgAEAAX8B/wHwAwABHwj/Af4CAAF/A/8BgAEA
AX8B/wHgAQABAQHAAT8I/wH+AgABfwP/AcABAAF/Af8B6AGAAQcB2AHwCP8B/gIAAX8D/wHAAQABfwL/
AQABHwH/AeABfwf/Af4CAAF/A/8BwAEAAX8B/wH+AQABPwH/AYABfwf/Af4CAAF/A/8BwAEAAv8B/gEA
AX8BvwFgAX8H/wH+AgABfwP/AeABAAL/Af4BCQL/AfABfwj/AgABfwP/AfgBAwL/Af4BDwz/AgAF/wG/
Av8B/gE/DP8CABb/AcABAxb/AeABBxb/AfABH7L/AfAL/wHwAQMK/wGAAT8K/wHgAQMK/wEAAR8K/wHg
AQMK/wEAAR8D/wHgAQEB8AEDA/8B8AEACv8BAAEBA/8BwAEAAeABAQP/AfABAAT/Af4BBwT/AgABDwL/
AYABAAHgAQABfwL/AfABAAF/A/8B+AEBA/8B/AMAAX8B/gQAAR8B/wH8AwABHwL/AcABAAEPAv8B+AMA
AT8B/gQAAQ8B/wH4AwABBwH/AcACAAEPAv8B8AMAAR8B/gQAAQcB/wH4AwABBwH/AYACAAEHAv8B4AMA
AQcB/gEBAcACAAEHAf8B+AMAAQMB/wMAAQEC/wHAAwABBwH+AQcB8AEAAcABAwH/AfwDAAEDAfwEAAE/
Af8BwAEAAQEC/wH8AQcB4AEAAXABAwH/Af4DAAEBAfwEAAEPAf8BwAIAAT8B/wH4AQMB4AEAAXgBAwL/
AwABAQHwBAABAQH/AcACAAEfAf8B+AEBAeABAAF4AQMB/wHAAwABAQHwBQAB/wHgAgABDwH/AfgBAQHg
AQABfAEDAf8BwAIAAQEB/wH8AX4CAAEBAeAB/wHgAgABAQH/AfgDAAHwAQMB/wHAAgABAQH/Af4BPgIA
AQEB8AH/AcACAAEBAf8B+AQAAQcB/wHAAwAB/wH+AR4BEgIAAv8BwAMAAf8B+AFgAQABBgEAAQcB/wHA
AwAC/wHOARMBEAEAAT8B/wQAAX8B+AF4AQABBgEAAR8B/wHAAwAC/wHCAwABHwH+BAABfwH4ATwBAAEO
AQABPwH/AcADAAL/AfICAAEIAQ8B/gIAARgBAAE/AfgBPwHgAY8BwAE/Af8BwAIAAQEC/wH+ARMBkgIP
Af4BAAEEAR8BAAE/AfwBHwHgAQ8B8AE/Av8B8AEPBP8BAwGSAR0BBwH+AQABBwE/AfABPwH8AQ8B4AFf
AeABPwL/AfABDwT/AgABGAEPAf4BAAEfA/8B/gEHAfgBPwHAA/8B8AEPBP8BgAIAAT8B/gEAAT8D/wH+
AQABBAIAA/8B8AEPBP8B4AGAAX8B/wH+AQABPwT/AQABBAEAAQED/wHwAQ8E/wHgAQAC/wH+AQMF/wHA
AQMBAAEHA/8B8AEPBP8B+AEDAv8B/gEPBf8B4AEDAYABDwP/AfABDwT/Af4BDwL/Af4BHwX/AfgBBwHA
AR8D/wHwAQ8I/wH+AX8M/wHwAQ8W/wHwAQ8W/wHwAQ/4/ws=
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4
fQAAAk1TRnQBSQFMAgEBDAEAASgBAAEoAQABOAEAATgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwAB4AMAAeADAAEBAQABCAYAAcQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AOgAC9AP/AQAD/wEAAv8CAAL/BgAC/wIAAf8CAAL/AQAE/wIA
A/+3AAG8Au8B8gL/AvQC/wL0Av8C9AL/AgAC/wH0A/8B9AL/AfQC/wT0Av8C9AL/ewAy/wkAAfMC8AEH
AfMB8QIHAfAB8gG8AQcC8QIHAfMB/wIAAf8B8AEHAbwB8QG8AQcB8wG8AQcBvAHxAbwDBwG8AfEBvAEH
AfAB/3oAAf8B8wG8AfQB/wHxAbwB8gHxAQcB8QHwAQcD8AHxAQcB8wH0AfEB8gHzAfAC8QHwAvMBvAHx
Af8B8QG8AfABBwHxAf8B8wHwA/EB9AHxAQcC8wHwAfIB/wkAAf8B8AH0AQcB8wHwAfQB8QHwAfIB8QHy
AQcB8QHyAe8B9AH/AgAB/wHwAfQCBwHyAe8BvAHyAfABvAHxAvIBBwG8AQcB8QHyAQcB8QH/egAB/wHx
Ae8B8gH/AfEBBwHzAfAB9wHzAQcB7wHyAvEBBwGSAfECvAHxAQcB8QH0AfMB7wEHAbwBBwG8AfABBwLy
Ae8B8QHyAe8B8gH0AfEB7wIHAe0B8gK8AfQB/wkAAf8B8AH/AQcB9AHxAf8B8QHyAfQB8QHzAQcC8wHv
Af8EAAHxAf8CBwH0Ae8BvAH0AvAD8gEHAfQB/wLzAe8B8nsAAfQB8AEHAbwB9AHyAQcB8QEHAZIB9AEH
AfcB8QHzAfQBvAHtAgcB8wHyAe8B9AEAAf8B8AIHAu8BBwHyAf8B8wHvAvEB9wH/AQAB9AHwAQcBvAHs
AgcB9AH/CgAB/wHwAf8BBwH0AfEB/wHxAfIB9AHyAfMBBwLzAe8E/wEAAfEB/wIHAfQB7wG8AfQC8ALy
AfMBBwH0Af8C8wEHAfIKAAL/AvQX/wL0Av8BAAX/AQAC/wH0Av8BAAP/AQAE/zwAAf8B8gHvAfMBvAHz
AfEBvAIHAZIB9AG8AgcB8gH/AfACBwHvAfIB8wHvAfQBAAH/AfEBvAEHArwBBwH/AQAB8wHvAfIB9AGS
Af8BAAH0AfECBwHvAQcB7wHyAf8KAAH/AfAB/wEHAfQB8QH/AfEB8gH0AfIB8wEHAvMB7wH0AfEB7wEH
Af8B8QH/AgcB9AHvAbwB9ALwAvIB8wHtAe8B8gLzAQcB8goAAf8BvAHvAQcB9wHxAbwB9wPvAfEBkgH3
Ae8BBwHzAQcB9wG8AfMB9wLvAfcB8ATvAfMB/wHxAZIB7wHzAv8BBwHvAgcB8gH0AQcB9wHyAf8CBwH0
Af88AAH/AfEB8AH/AfEBvAHwAbwB9AHxAZIB9AG8Ae8B8wHyAf8B8AGSAfMCBwHxAfcB8QL/AbwB8QHw
Ae8BBwHvAfMB/wHzAe8B8gHwAe0B8wH/AfQBvAHxAbwB7AHzAe8BvAH/CgAB/wHwAf8BBwH0AfEB/wHx
AfIB9AHyAfMBBwLzAe8B9AHyAfAB8gH/AfEB/wIHAfQB7wG8Af8C8ALyAfQB7wHxA/MBBwHyCgAB9AHw
AfQB/wLvAfMBvAH0Af8B8AH/AQcB8QH0AQcB8QHzAQcC9AEHAfIB/wHyAfEB8AL/AfAB8QH/AQABBwHw
Av8BvAEHAv8B8wEHAfMB8QHvAf8B8AG8AfQIABD/AQAF/wIABv8CAAX/AQAJ/wYAAf8B8gHvAfAB/wH0
Au8BBwHyAfAB9wHyAQcB9wHwAQcB8gEHAfcB8AEHAfEB9AHxAQcB8gHwAbwB8wHxAe8CvAEHAfMB8gHv
AfAB8wHwAbwB8gLwAfQBvAHtAfABBwHyAf8KAAH/AfAB9AEHAfQB8AH/AvEB9AHxAfQB7wHyAfMB7wH/
BAAB8QH/AQcB7wH0AQcB7wH/AvAC8gHzAQcB8gPzAQcB8gH/CQAD/wHzAe8BvAH0AQcC8gHzAQABBwHx
AfQBvAHyAfMBBwL0AQcB8AHzAfAB/wH0Af8B8gG8AfIB/wEAAQcB8QH/AfQBvAHyAgAB/wLwAfEB7wHy
AQcB8gH/CAAB9AHzAvIC8wL0AfMC8gH0Af8B8wHyAfQB/wHzAfIB8QHzAv8BAAH/AfMC8gHzAf8BAAH/
AfQD8gH0Af8B9ALyAfMC9AHzAfIB9AH/BQAB/wHzAfIB8wH/AfQC8QHyAfMC8gHzBPIB8wHyAfEB8gHz
Af8BAAH/AfMC8gL/AfMB8QHyAf8B8gHzAfIB8QH0Av8C8gHzAf8B9AHyAfEB8gHzAf8LAAH0AbwB9AEH
AfMBvAH/AfEBvAHyAfEB9AHvAfQB8wEHAf8DAAH/AbwB/wHwAQcB9AHwAe8B/wPxAvMB7wIHAfEB9AEH
AfAB/woAAfQBvAHvAfIB/wH0AQcBvAEHAfIBAAIHAbwBBwH0AfMBBwL0AgcB8AHvAf8B9AG8AQcB8QL/
AQABBwHxAf8B8gHvAfMCAAH/A/EB7wHwAbwB8QH/CAAB9AG8AgcB8AEHAbwB8gMHAfMB8QEHAbwB8wHx
AQcBvAHwAbwB8QH/AQAB9AHwAgcB8QL/AfIBBwHwAfECBwLyAQcB7wG8AfIB8AEHAfAB9AH/QwAB/wHz
AfQB8wH0AfMC9AHzA/QB8wP0Af8DAAH/AfMB9ALzAfQC8wb0A/MC9AHzAfQB/wkAAf8B8AG8AfMD9AEH
AvQB8wH/AQcBvAHxAQcB9AHzAQcC9AEHAfIB/wHxAf8CBwP0Av8BBwHwAf8B8wG8AfEC/wH0AQcB8gHx
Ae8B/wHwAbwB/wkAAfEB8gHwAfQB8AEHAfQC8QHwAfMBvAHwAvQB8AEHAfQB/wHzAbwB9AEAAf8B9AK8
Af8BAAHzArwB9AH/AfMB8AHvAfQB8AEHAfIB8QHwAfEB/3gAAf8B8gG8AfIBBwHxAfIBBwLwAQcB9AIH
ArwB9AHxAbwB8gHzAe8BvAHxAQcB9AIHAfICBwG8AfEB7wEHA/ABBwLyAQcB8AH0AfAB7wHyAQcB8AH/
CQAC8gG8AfMCvAH0AvEBBwK8AfMB/wH0AfIBBwH/AQAB/wG8AfQCAAH0AbwB8AL/AbwB8QHwAf8BAAH/
AfEBBwHyAfACBwHwAQcB/3kAAv8B8gLwAfQB8wLyAfEB8gH/AvEB8gL/AfMC8gH0AfEB8gLxAv8B8QHw
AfEB8gHwA/IB8QHyAf8B9AHxAfAB8wL/AfMC8QHzAf8KAALyAe8BvAEHAfMB/wLxAQcB8AEHAfQB/wH0
AfIBBwH/AQAB/wG8AfQCAAH0AbwB8AL/AbwC8QH/AQAB/wLxA/ADvAH/tAAC8gEHAbwBBwHyAf8C8QHw
AfEBBwHwAf8B9AHyAQcB/wEAAfQBBwHzAv8B9AG8AfAC/wG8AvAB/wEAAf8B8QHwAfIB8QG8AvEBBwHy
HQAC/wH0AfID8QHzA/8rAA3/UwAB/wHxAfIBvAHzAbwB8QH/AvEB8AHzAbwB8QH/AfMB8gHvAv8B9AEH
AfIBvAHyAfMBvAHwAfQB8QEHAfABBwH0Af8B8QHwAQcB9AHwAQcB8gLxAfIZAAL/AfQB8gEHAewBEgEV
AUMBEAERARQBbQHtAbwB8wL/JQAE/wH0AfEBvAHvAZIB7QHsAe0B9wEHAfAB8wH0Av9QAAH0AbwB8AHv
AQcB8AHzAfQBvAHwAQcBvAHwAfMB9AG8AfAB7wHyAfQB8QEHAfABBwHvAbwCBwK8AfMB8QK8AfABvAHx
AfQB8wG8AgcBvAHwAf8XAAL/AfQB8AHtAeoDEgETARQBFQNDAREBQwESAZIB8QL/IgAC/wH0AfEBBwHs
AW0BEwFDAhEBEAIPARABQwHqAe0BvAH0Av9OAAH0BPMB9AH/AfQB8wHyAvMB9AH/AfQB8wHyAfMC9ATz
AfID8wLyAv8B8wLyAfMC/wXzAf8XAAH/AfQB8AH3AuwB7QLsAesB6gESAxQCFQFDAREBEAETAe8B8gH/
HwAD/wHyAe8B7AFtAuoBEgETAhUCEQMPAQ4BDwFDAesBBwH0Af8pAAP/AQAD/18AAf8B8wEHAfcB7wEH
Au8B7QLsAesB6gESARMDFAEVAkMBEQFDAesB8AL/HQAB/wH0AQcB7QPsAesCbQHqAm0B6gESARUBQwEQ
AQ8DDgFDAewB8gL/HAAC/wcAAv8B8wHxAf8BAAH0AfEB8wH0Av8GAAL/UwAB/wHzAe8BBwS8AQcB7wL3
AewB6wFtAeoBEwMUARUCQwEQAREB6gG8Af8cAAH/AfMB7wHtAfcCkgPtAewBbQESAkQBEgHqAewB6wES
AREBDwIOAQ8BbQHwAf8cAAHzAfIB/wQAAf8B9AEHAesBSgHrAfMBAAG8ARQBEgHsAQcB9AH/BAAB/wG8
Af9SAAH/AfQB7wEHBPAC8QEHAbwB8AG8Ae8B7QFtAhIDFAEVAkMCEQEUAbwB/xoAAf8B8wL3A+8CBwHs
AUQCHgYLAREBbQHsARUBDwMOARQB8AH/GwAB8wHsAfMB/wIAAf8B8AFEAiMBIgFtAfMBAAEHAyIBEAHr
AfEB/wMAAfMB7AH/UQAB/wH0AfcBvAHxAvAB8QHyAbwB8QH0A/8BAAH/AQcB6wHqARICFAIVA0MBEQEU
AfIB/xgAAf8B9AL3AgcCvAGTAUUB6QEBAR8DAQIeBAsBDwHqARMBEAMOARQB8QH/GgAB/wFKAe0B8QL0
ARwBIwFLAUUCIwFtAfMB/wEHBSIBFAEHAvQB8QHrAe8B/1EAAf8CBwHwBPEB8AHzA/8EAAH/AfIB7AHq
ARMDFAIVAkMBEQFtAfMB/xYAAv8B7wHsAe8BBwG8AQcBbwJFA+kDHwIBAUQCHgMLAUMBFAEQAw4B6gHz
Af8XAAH/AQAB/wEcAUQBEgHrAW0FSwEjAUoB8QH0Ae8EIgJDAUQB6wFtARQB6wHzAgAB/ycABv8hAAH/
AfIB9wLwAvEB8AHxAfQC/wcAAf8B8QHrARIBEwMUARUDQwERAfcB/xYAAf8B8AHsAe0B9wIHAW8CRgIg
BOkCRgFFAUQBIwIeAwsBEAFDARADDgHsAfQB/xUABP8B8wFzAiMBSgF0AZMBHAFSAksBSgHsAe0BEgIi
AUQBbgHsAW4BRAIiAW0BvAH/AQAD/xsAAv8C9AL/AgAD/wHzAfIB8QHyAfMB9AP/HgAB/wHvAQcBvAHw
AfEBvAHxAfQC/wkAAf8B7wFtARIBEwMUAhUCQwESAfEB/xQAAf8B8wHsAesB7ALvAW8CRgMgAekCRQFG
AUUCRAFDAgsCHgMLAQ4BDwMOAUMBvAH/FQAB/wG8AfMC/wHyAW4BRAFzAbwC8QGZAUwBSwFzAhwBbQIi
AW4BvAHyAfAB6wEiAUQB7wH0Av8B8wHxAf8aAAH/AfMBBwH3Ae0B7wHyAf8B9AHxAQcB7QFtAxIBbQHs
Ae8B8QH0Av8bAAH/AfIB7wK8A/AB8wL/CwAB8gHsAW0BEgETAxQCFQFDARUBkgH/FAAB/wEHAW0B6wHt
Ae8BbgFFAUYBQAMgAekBHgJFAUMCAAEOAQsBAQJEBAsBDgEPAw4B6wH0Af8UAAH/Ae8B7QHyAfQB8wHs
AUoBBwHyAvQB8AJLAXMB9wHvAewBIgFEAe0B8gL/AfIBEgFEAe8B9AH/AfEB7AHzAf8WAAL/BPMB8gEH
AW4BRAFtAe8B6wESARUBEQEQAhEBIgEQAREBFQESAe0B8AH0Af8aAAH/AQcB9wEHAbwB8AEHAfMC/wwA
Af8B9wHrAW0BEgEUAhMBFAIVAUMBbQHzAf8SAAH/AfMB7AHqAesB7wFuAUUB6QIgASUBIAElAUUDRAEO
AgsBAAEeAR8BRQERAR4ECwQOARUBvAH/FQAB8wJKAewB6wFEAewB8QH0Av8B8wNLAVEBcwFEASMBSgHv
AfMD/wEHASIB6gHsAesBEgEcAf8XAAH0AfcB6wHqAesB7AEHAfMB8QFEAUMBFQFDAREBQwJEAeoB6wHt
AZID9wHsAW0B7wHzAf8ZAAH0AfcB7wEHAbwBBwHxAv8NAAH/Ae8B7AHrAW0DEgETARQCFQETAQcB/xIA
Af8B8ALqAesB7wFEAekEIAElAUYBbwFEAg4BAAELASQCCwHpAUUBEQIeAwsEDgEPAe0B/xUAAf8BBwFE
AiIBRAEcAfMB/wIAAfQBHAFLAZkBBwG8ARwBRAFLAbwB9AH/AgAB8wEVAiIBRAEcAfMB/xcAAv8B9AG8
AW4CRAG8AfAFRAFuAe8BBwHxAfMC/wMAAf8B9AG8Ae8B8gH/FwAB/wHxAe0B7wEHAbwB7wH0EAABBwLs
AesDbQETAhQCFQH3Af8SAAH/Ae8BFAETAesBEgEeAR8DIAFGAUUBbwFFAUMBDwIOAQsB6QEeAQsCRQEL
AQEBHgQLBA4BbQHzAf8UAAL/AQcBSgEiAUQBBwL/AgAB/wGZAUsBdAEHAfABkgFEAW4B8AL/AgAB9AHs
ASIBSgHvAfMC/xkAAv8BvAFuAUUB6gFEAUUBRAFFAW4B7wHwAfMB9AHzAfIC8QHyAfQC/wEAAf8B9AHz
Af8XAAH/AfAB7AH3Ae8CBwP/DQAB/wHvAe0C7ALrAm0BEgMUAe0B9BIAAfQB7AEVARQBbQIeAQEB6QIg
AUYBRAERAUQCRQFEAQ4BAAEfAQEBAAELAREBCwEBAh4ECwEPAg4BFQHwAf8UAAP/AfACSgHwAf8DAAH/
AbwCSwJzAksBdAHxAv8CAAH/ARwBFQHtAfMC/xsAAf8B8wHtA0UBSwFMAZMBvAHyAfQB8wG8AewBEgET
ARIBbQHtAbwB8wL/GgAB/wG8Ae0D9wHxA/8MAAL/Ae8D7QHsAusB7AHqARMCFAHsAfQSAAHzARMBFQEU
ARMBCwEeAQEBHwHpASABRgFFAUQBRQFGAW8BbgEQAQABAQHpAR4CAAEeAgECHgMLAQ8CDgFDAQcB/xUA
Av8B9AFtAUoB8QH/BAAB8AFLAXQBvAEaARwBSwEcAfIC/wIAAf8B7wFDAQcC/x0AAfQB7QFEAUUBTAF0
AZkB8AHzAfQBvAHrARQBbQHsAe8BBwK8AQcB8AHzAf8aAAH/Ae8B7AHtAfcB7QHzAf8B9AHzAf8LAAH/
AfIC7wH3AZID7AHvAesB6gESARMB7AHzEQAB/wHyAREBQwEUARUBCwEeAQEBHwHpAiABRgHpAkYBbwFE
AQ4BAAHpAUABIAIBAekCHwEBAR4DCwEOAg8BQwHvAv8WAAH/AW0BEwHwAf8EAAHxAUsBcwEHAfAB7QFL
AZkB8wH/AwAB/wHvAUMBBwH/HQAB/wHwARIBRAFFAW8BGgHwAvQB7wESAW0B9wG8AfIB9AT/AvQB/xoA
Af8B7wTsAfQB/wHwAe8B8wH/CAAC/wH0AQcB7wEHAe8B9wGSAe0B7AG8AesBbQLqAewB8xEAAf8B8AEQ
AREBFAEQAQsBHgEBAh8EIAFGAW8BRAEPAQABCwVGAiABHwIBAR4CCwEOAg8BQwH3AfQB/xYAAf8B7AFE
AQcB/wQAAfICSgFuAXMCSwG8AfQB/wMAAfQB7QFEAbwB/x0AAfMBbQFDAUQBRQGTAbwC9AHvAUQBbQHv
AfMB9AT/AwAB/xsAAfQB9wHrAuwB6wH0Af8B8QHsAfcB9AgAAv8B8AHvAbwBBwHvBPcB8QHsAesCbQHs
AfMRAAH/AbwBDwERARUBDwELAR4CAQEfAukBIAFGAW4BRAEOAQABCwFFAUYBbwFGAUUBRgMgAekBAQEe
AgsBDgIQARUBkgH0Af8WAAH/Ae8BIgGSAfQEAAHzAesBSwHvAbwBHAFLAbwB9AH/AwAB9AFtARIB8gH/
HAAB/wFtAREBQwFEAW4BBwH0Af8BBwJEAe0B8wP/IgAB/wHvAm0B6wFtAfMBAAHzAe8B7AHtAfQB/wQA
Av8B9AG8Ae8CvAIHA+8BvAHyAuwC6wHtAfMRAAH/AbwBDwEQAUMBDwILAR4CAQHpAUUCRgFuAREBDgEL
AUYBEQEQAUUBRAELAekCIALpAR8BAQEeAQsBDgEQAREBFAHvAfQB/xYAAf8B8AEiAW0B8gH/AwAB9AHs
AW0B8gH0AQcBSwG8Av8CAAH/AfABQwHsAfQB/xwAAfIBEAJDAUQBbgG8Af8B9AFuAkUB7QH0Af8kAAH/
Ae8BbQHrAW0B6wHxAv8B8AHvAewBbQG8AfQC/wL0AfEC7wLxAbwDBwG8AQcC8QPsAesB9wH0EQAB/wHw
AQ4BDwERAQ8CCwIeAgEBRQFEAUYBbgERARABRQFvAW4BQwEQAQ8BCwFFAUYCIAHpAR8BAQEeAQsBDwIR
ARMB7wH0Af8XAAH0AesBQwHvAf8DAAH/Ae0BbQHzAf8BvAFLAbwC/wIAAf8B7AFKAbwB/x4AAQcBFQFD
AkQBbQHwAfQB8AF0AUsBbgG8Av8jAAH/AbwBEgJtAeoB7wH/AQAB8wIHAfcBbQHsAe0C7wL3AbwB8wHy
AfEB8AEIArwC8AH0AQcD7QHsAe8B9BEAAf8B8gIPARABDwMLAh4CAQELAUQBEwEPAQ4BRQF0AW8BEwFE
AkUCRgIgAekBHwEBAR4BCwEQAkMBEgEHAv8XAAH/AQcBRAESAfAB/wIAAf8BHAHqAfMBAAG8AXMB8AL/
AQAB/wEHAUQB7QHzAf8eAAH/AfcERAFtAfAB9AG8AZMBSwFuAQcB9AP/AwAD/xoAAf8B8QHqARMBEgHq
AewB9AL/AfEB7wEHAbwBBwLvAQcBvAHyAfMC8gHxA/AB8QG8AfIB9AP3Au0BBwH/EgAB8wEVAw8ECwEe
AQEBRQFEBA4BEAEUAW0BFAERBEYCIAHpAR8BAQEeAQsBQwEVARQBbQHwAv8YAAH0Ae0BRAHrAfED/wHv
AeoB8wEAAbwBcwHxA/8BvAHqAXMBvAL/HgAB/wH0AesCQwJEAesB8AHzAfABkwFuAUoB7QEHAfIB9AL/
AfQB8wH0Af8bAAHzAesBFAETARIB6gHwAf8BAAH/AfAB7wK8AfAD8QHwAfEC8gHxAfAB8QHyAfAB8QH0
AfIB9wLvAvcB8AH/EgAB9AHrAw8ECwEeAUQBRQFEAQsCHgJEAREBDwEOAREERgIgAekBHwEBAR4BCwIU
ARMB7AHyAf8ZAAH/AfIBcwFEAW0BvAH0Af8BBwFtAfMBAAG8ARwB8gH/AfQB7wFLAXQBvAH0Af8gAAH0
AewBEQFDA0QBbgEHAfIB8QEHARwBSwHqAesB7AGSAfcB7wHxAfQB/xsAAf8BkgEUAhMB6gHtAfQB/wEA
Af8B8QEHArwB8ALxAfAF8QHyAfAB8QH0Af8BBwH3A+8BBwHzAf8SAAH/Ae8BDgIPAQ4ECwEjAUQCCwEf
A0UBEAEAAQ8CRQFGARcBRgIgAekBHwEBAR4BEQESARMB6gHvAfQB/xkAAv8B8QFzAUQBEwHtAfAB7wHs
AfMBAAG8ARwB8QG8AXMBSwGZAbwB8wL/HwAB/wHzARIBRAESBEQBbgH3AfAC8gEHAe8BkgHtAfcBBwHz
Av8BAAP/GAAB/wG8AeoBEwISAW0BBwH/AgAB/wHzArwC8APxAfIC8wLwAfIC/wHyAZIFBwL/EgAB/wHw
AUMBDgEPAQ4BAAcLAQEBRQFuARUBDgELAkUDRAMgAekBHwEBAQsBFALqAesBBwH/GwAC/wHzARwBSgEV
AhQB6wHzAQABvAFLAeoBSgFzAZkBvAHzAv8dAAP/AfMB7QEUAesBBwH3AUQBQwJEAUUBbgHvAfEC8wP0
BP8B9AHwAfIB/xkAAfQB7AEUARMCEgHrAfEB/wIAAv8B8wK8AfAC8QHwAbwB8AHyAfQC/wH0AfcB7wG8
AQcCvAHyAf8UAAH0AesCDgEPAQ4GCwEeAkUBEgIPAUYBRAFDARABDgEBAyAB6QEfAQEBRANtAfcB8gH/
HAAC/wH0AfABHAFKASIBbQHzAQABvAFKAUsBmQG8AfIB9AL/HgAB8wH3AesBEwFuARwBBwHyAfQBEwNE
AUUBSwFMAUsBbgH3AbwB8QLzAfIB8QH3AewB8AH/GwAB8AESARQBEgHqARMB6wHyAf8CAAP/AfQC8wHy
AvMB9AL/AQAB9AL3A7wB8AEHAfQB/xQAAf8BBwERAw4BAAQLAx4BRQESAQ4BDwFuAQ4BFQJEBCABHwEB
AUQB6gHrAuwBBwL/HgAC/wH0AfIBBwHsAfMBAAG8Ae8B8AHzAfQC/yAAAf8B8wG8AfAB8QLzAfIB7QFE
Ae0B9wFuAUsCRQJLAUUCRAEUAhMBEgH3AfMB/xwAAf8B7QEUARMCEgETAW0B8AL/AgAK/wHzAZIB7QS8
AQcB8gL/FQAB9AHrAQ8DDgEABAsCHgJEAg4BAAEOAUMBRAHpBCACAQHqAuwB7QHvAfIB/yAAA/8B9AH3
AfMBAAG8AQcE/yMAA/8B8wEHAewB7QEHAfAB8wHxAQcBHANvBG4B7QEHAfEC/x4AAfQB6wITARIB6gEU
ARIB7wHyA/8EAAP/AfQBvAHsAfcDvAPwAv8XAAHxARUEDgULAR4CRAERAQ8CDgELAQEDIAHpAR8BHgHq
AewBkgH3Ae8BvAH0Af8jAAH/Ae8B8wEAArwB/ygAAf8B9AHzAvIB8wP/AfQC8gHxARoD8AHxAfMB9AL/
IAAB8wHrARQBEwISARMBFQFtAe8B8AHzBPQB8wHxAQcBkgHsAe8DBwG8AvAB9AH/GAAB/wEHARAEDgYL
AkQBQwELAR4BCwEfASAB6QEfAQEBRAFtAe0B9wHvAgcB8wL/IwAB/wHvAfMBAALwAf8qABP/IgAB8gHs
AxMDEgETAeoB6wHsA+0D7AH3Ae8DBwK8AfAB8wL/GQAB/wH3AQ8EDgEABAsFHgEBAh8CAQFEAesB9wLv
AgcB8gL/JQABvAH0AQAB8AHyAf8yAAj/JQAB/wHzAfcB6gESARMF6gJtAesB7AHtAZIB9wTvArwB8AHz
Av8bAAH/Ae8BEAUOBgsFHgFEAeoB7QH3Ae8BBwG8AQcB8gH0Af8mAAHwAfQBAAHwAfRhAAL/AbwB7AHq
AhIC6gFtA+sB7APtAfcB7wEHAfABvAHxAfQC/x0AAf8BvAEVBQ8EDgQLAUMBEwHrAewBkgHvAQcB8AG8
AfIB9AH/JwAB8wH2AQAB8gH/ZAAB9AHvAesB6gESAuoBbQPrAewB7QGSAe8CvAHwAfMC/yAAAf8B8gHs
ARQBEQMPAhACEQFDARQBEwHqAW0B7AHtAe8BBwLwAfIC/ygAAv8BAAL/ZQAC/wG8Ae8BkgTsAZIB9wHv
AQcBvAHxAfMB9AL/IgAB/wH0AQcB7AESAUMDEQFDARUBEwESAeoBbQHsAZIB7wK8AfEB8wP/lAAC/wH0
AfIB8QLwAvEB8gHzAvQC/yUAAv8B9AHwAe8B7AHrA20C7AHtAZIB7wG8AvAB8gH0Av+YAAv/KAAE/wHz
AfIB8QXwAfEB8gLzAfQD/50ABP8uAAf/AvQG/9MAC///AN0AAf8FAAH/AgAE/wMAAf8EAAH/AwAD/wMA
Av8CAAP/BAAB/7QAAf8B9AH/AgAF/wH0AvMB9AH/AQAB/wH0Af8BAAP/AQAC/wH0AfMB9Ab/BPQB/wIA
Af8B9AH/ggAD/wIAA/8CAAX/AQAD/wEAA/8BAAP/AQAF/xAAAfIB7wHzAf8BAAH0AfAB8QH/AfIBvALv
AQcB8gH/AfEBBwH/AQAB/wHwAbwC/wHxAQcC7wHwAv8BvAHyAfQBvAHwAbwBBwH/AgAB8wHvAfSAAAH/
AfIBvAEHAfAC/wHzAbwB8AL/AfMBvAEHAbwB9AEAAfIBvAHxAf8B8gG8AfAB9AHwAbwC8wG8AgcB8AH0
Af8PAAHzAfEB7wL/AfIBBwHzAfIBBwHwAfMB8gG8AfcB9AIHAfQBAAH0AfMB7wH/AfIBvAHyAfMBvAH3
AfMB9AHvAQcB8AEHAfQB8AEHAfIC/wHwAe8B/38AAf8B8AP3Ae0B7wHyAQcB9wHsAv8B7wL3AZIBBwEA
AfcBkgHvAfIBBwH3AewBvAH3Ae0BvAEHA/cBkgHwAf8PAAH/AbwB9wHzAf8B8QG8Af8B8AEHAfQC/wHy
AQcB9AEHAe8B8wH/AfQB8wHvAf8CvAH0AQAB8QEHAfIB9ALvAQcB8gH/AfQCBwH/AfMB8AHxAf8NAAH/
AfMC8gHzAf8B8wH/AQAB/wL0AfIC8QLzAvEB8gH0AfIB8QHyAvQB/wEAAf8B8wH0Av8B9AEAAf8B8wHx
AfIB8wH/EgAD/wEAAv8CAAP/AgAD/wEAA/8CAAL/AQAC/wIAAv8BAAL/FQAB8wHvAQcB9wIHAfcDBwHs
Av8B7wMHAfcB/wHvAQcB7wHwAgcB6wIHAfcDBwLvAbwB9BEAAfQB8AEHAfIBBwHyAv8BBwH/AgAD/wEH
Ae8B9wLvAfMB7wH/AgcB/wEAAfMBvAHyAfQB8AHzAu8C/wHxAQcB8gHxAe8B/w4AAbwBBwK8Ae8B8AH3
AQcB8QG8AQcBvAIHAbwB8AG8AQcBvALwAQcDvAHvAfQBAAHxArwB/wHyAbwBAAH/AfABBwK8Af8SAAHz
AZIBvAH/Ae0BBwL/AQcB7AHxAQAB/wHyAZIB8gH/AfAB7AHzAQAB/wG8Ae0B8wHtAQcC/wEHAe0B/wH3
Ae8B/xQAAfMCBwGSAe8BBwLvAgcB7AH/AfQD7wEHAewB/wIHAe8B8AIHAesCBwH3AwcBkgHyFAABBwH3
AQcBvAH0Av8BkgH/AgAB/wH0Af8BBwG8AQcCvAHzAe8B/wIHAf8BAAHzAbwB8gH0AgcBvAHvAfEBAAH0
Ae8BkgEHAfIOAAH/AQcC8wEHAfcB9AHwAfcC7wHxAfIBBwIAAfQBBwHzAgABvAHvA7wB9wHzAfABBwHv
AbwB/wHxAQcBAAH/AQcB9wHwAfEB/xIAAfEBvAHvAfEBBwHvAf8B8AHvAbwBBwEAAf8B8AH3AfEB/wHv
AQcBkgHxAQcB7wHtAbwBBwHvAf8B8AEHAfcB8QEHAe8B/xQAAfMCBwGSAbwC8AHxAgcB7AH/AfIBBwL3
AQcB7AH/AgcB7wHwAgcC7AEHAe8B8AIHAZIB7AEHAfQSAAH0AfEB7wHxAf8BAAHwAe8BBwLzAQcB7wH/
AgcB9AEAAfQB8wHvAf8CBwH/AQAB8wG8AfIB9AHvAbwC8AHxAQAB/wLxAe8B9A4AAf8BBwLyAQcBvAH/
AfQC7wG8AfQB8gEHAgAB9AEHAfMCAAG8AQcDvAH3AQcBvAH0AQcBvAH/AfEBBwH/AfQB8AEHArwB/xIA
AfEBvAHvAfEBBwHvAfMBBwK8AQcBAAH/AfAB9wHxAf8B8QG8Ae0C7AEHAe8B8AG8AfcB8QLvAfMB8gEH
Ae8B/xQAAfMCBwGSAf8C9AHzAgcB7AH/AfABBwHvAfcBBwHsAfQCBwHvAfACBwHvAQcB7wGSAfEDBwH3
Ae8B8xIAAf8C8AH0Af8BAAH/AfEB7wH3Ae8B8AHzAf8CBwH/AQAB/wHyAfAB/wK8Af8BAAHzAQcB8wH0
AQcC7wG8Af8CAAH0AbwB8gH/DwABvAEHAbwCBwH/AQABvAHvAfIB/wHyAfECAAH0AfAB9AIAAbwBBwG8
AfAB8QEHAbwC/wK8AfABBwH3AbwB8gEHAe8BvAHwAf8SAAHxAbwB7wHxAQcB9wEHAe8BBwG8AQcBAAH/
AfAB9wHxAv8BvAHvAfcBBwHvAfIB8QG8AfcB7QHvAfAB/wHyAQcB7wH/FAAB8wEHAbwBkgG8AvcBvAEH
AbwB7AH/Ae8BBwLvAQcBkgHxAgcB7wHwAbwBBwHtAe8BBwHtAwcB7wG8AfIB/xIAAf8B9AHzAf8DAAH/
AvMB8gH0Af8BAALzAf8BAAH/AfMC/wHzAfQB/wEAAf8B8gL/AfMC8gH/AwAB/wHzAv8PAAH0A/IB9AH/
AQAB/wHzAf8BAAH0Af8CAAH/AfQB/wIAAfMC8gHzAfQB8wH/AQAB/wL0BPIB9AHzAvIB8wH/EgAB8QG8
Ae8B8QEHAewB9wG8AQcBvAEHAQAB/wHwAfcB8QH/AQABvAHvAe0BBwHvAfQB8QG8AQcBvAH3AfIB/wHy
AQcB7wH/FAAB8wEHAbwB7AGSAQcB7wMHAewB/wHvBAcB7wMHAe8B8AG8AQcB6wGSAQcB9wMHAZIB7wHx
AfQTAAL/IwAB/0wAAfEBvAHvAfEBvAHvAQcB8wK8AQcB/wHyAQcB9wEHAfIC9AEHAe0B7wHwAf8B8QEH
AfcBvAH3Ae8B9AHyAQcB7wH/FAAB9AK8AfcB7wIHAfIBvAEHAewB/wHvBQcB9wMHAfABvAEHAe8B9wIH
AfIBvAEHAe8C9wHwAf+EAAHxAbwBBwHxAbwBBwHwAf8B8AG8AgcBkgHvAQcB7QGSAe8B/wEHAbwB7wHz
Af8B8QEHAe8B8gG8AZIBvAHyAQcB7wH/FAAB/wH0AbwCBwG8Af8B9AG8AgcB9AIHAfEB8gIHAfECBwHx
AfMBvAMHAbwB9AH/AfAEBwHzAf9cAAL/JgAB8wEHAfMB9AK8Af8BAAHxAQcB9AYHAfIB/wHyAbwB8AH/
AQAB9AG8AfEB/wHzAQcB8gH0AbwB8QH/WgAH/zIAAf8B8wHtARIBBwH0Af+bAAP/AfQB8gHwAe8B9wLt
AfcB7wG8AfMB9AL/KgAC/wHyAe0BFAFDARUBQwHqAQcB8wL/lgAD/wHyAQcB7QESARUBQwEQAQsDDwER
ARQB6wHvAfIC/yYAAf8B9AHxAe0BFAFDARQBEwEUARUBQwEVAW0B7wHyAv9iAAX/AQAE/ycAAv8B8gHv
AewFRAIeBgsBEAESAfcB8gL/IgAB/wHzAbwB7AETARQEEwYUAeoB7wHyAv9gAAH/AQcC7wHzAf8BBwLv
AfMB/yUAAf8B9AG8Ae0BbgZFBEQGCwFDAW0BBwH0Af8eAAL/AfMBBwHsAxIBEwMSAhMEFAETARQBFQHq
AZIB8AH0Af8nAAL/AvQC8wH0A/8tAAHzAesB6gHrAfAB8wISAesB8QH/JAAB/wH0Ae8BbgVvAZMBHAHv
AQcBvAIHAZIBbgFEASIDCwERARQB9wH0Af8dAAH0Ae8B7APrAW0B6gISAeoCEgITAxQCEwEUARUBFAES
AewBvAH/JAAB/wHzAQcB7QHrAW0C6gHrAewBBwHzAf8sAAH0AewBbQHsAbwB8gETAW0B7QHyJAAB/wH0
ARwCbwIWAZQCBwHxAfMC9AT/AfQB8QHtARUECwFDAe0B9B0AAewB6wTsAesD6gFtARIB6gITAhQBFQEU
ARMBFAITAhIB6gHzIgAB/wHwAe0BBwHsAREEEAERARIB7QL3AbwB/yoAAfQB9wFtAewB8AHyARQB6gGS
AfMjAAH/AfQBkgFuAhYBlAEaAbwB8QHzAfQE/wYAAfMBbgMLAQwBEQGSAf8cAAESAe0B9wGSAuwB7QFt
AeoBbQLrAe0BEgETARQDFQEUARMBFAETAhIB6gHzIQAB8wHsAe0B9AH/AfcFEAFDARIBBwH/AfEB6gHs
AfEB/yQAAf8B8QHwAbwBBwHsAW0B7AHwAfIBFAESAewBBwO8AfMB/x0AAv8B7wJvARYBlAK8AfIB9Az/
AQAB/wHvAUQDCwFDAe8B/xsAARIB7ATtAuwB6wPsAe0B6wISARQBFQJDAxUBFAETARIB8x4AAv8B8AHt
AQcB/wEAAf8B7wEPBBABFQFtAQcB/wEAAfQB7AESAQcC/yEAAf8BBwLrAuoBbQHrAe0BvAHyARQBEwEU
ARUBQwIVAewB9BwAAv8B8AFuAW8BFgGTAbwB8AHzAfQC/wrzAv8BAAH/AQcBRAILAREBFQHxAf8aAAET
AuwBkgH3ApgB9wKSAfcC7wEHAewDEwRDARUCEwESAfMeAAH/AbwB9wG8AfQCAAH/Ae8EEAERARUB6wG8
Af8CAAH0AZIBEgHvAfQB/yAAAfMB9wLvAfcB7QLsAZIBvAHyARQDEwEUAxMBBwH/GwAB/wHzARwBRgFv
ARYBBwHwAfMC/wEAAbwB7ANuAewCbgLrAewB8AH/AgAB/wEHAUQCCwERAewB9AH/GQABFAHrAewBkgKY
AQgBBwLvAQgB9wHyAfQBBwHqAuwBEwIRAUMBFAITARIB8x0AAf8BvAEcAbwB9AH/AgAB/wH3BBABEQEV
AesBvAH/AgAB/wHzAewBEwEHAf8fAAH/Ae8B7QHvArwBBwH3Ae0B9wG8AfIBEgHqAm0B6gITARQB6wHz
Af8aAAH/AbwCRgFvAZMBvAHzAv8CAAH3A28GbgHsAfAB/wMAAfQBkgFEAgsBFAG8Af8ZAAEVAeoB6wHt
AQcBmAEIAbwB9wHvAQcB9wH0AQABBwHsAvcBEgIRARUCFAETARIB8x0AAfIB7QEHAfIB/wMAAf8B7wQQ
AREBFQHrAbwB/wMAAf8B8AHqARIB8B4AAf8B8QHsAe0BBwHwAbwB8AEHAZIB9wHwAfIBEgHsAe8BvAEH
AeoDEwHvAf8ZAAH/AfQB7QJGAW8BBwHzAv8DAAHzBbwFBwHzAf8DAAH/AfMB6gEeAQsBQwHsAfQZAAER
ARIBbQHtAZgBCAHxAfABkgHtAfcB7wH/AQABBwH3AesBbQETAhUCFAEVARQBEgHzHAAB/wHsARwBvAH0
Af8DAAH/Ae8CEQIQAREBFAHsAbwB/wQAAfQBkgFDAW0B9B0AAfQBkgHrAe0B8QEHAfQB/wHzAvcB8AHy
AW0B9wHyAv8B9wITARQBbQHyAf8YAAH/AfABRQJGAZMB8QL/BAAB7wFuBEUD6gJtAbwB/wQAAf8B7wFE
AgsB6gHxAf8YAAEVARMBEgHsAQgB8gH0AfACCAH3AfMB/wEAAfQBvAHsAfcBbQHqAe0B6wETARQBEgHq
AfMcAAEHAesBvAHxAf8EAAH/Ae8BFQJDAREBQwFKAewBvAH/BAAB/wG8ARMBEQEHHAAB/wHxAeoB6wHv
AQcB9AIAAfQB7wH3AfAB8gHrAe8B9AIAAfQBEgMUAfcB/xgAAf8BBwJGAW8B7QH0Af8FAAH3ARYIkwHt
AbwB/wUAAfMBRAILARUBBwH/GAABFQESAeoB7AFtAfcB8wHyAfcB8AHvAfEB/wEAAfQB9wIHAe0B7wEH
AW0CEwESAeoB8xsAAf8BFAHrAbwB8wUAAf8B7wFKAhQCFQFKARwBvAH/BQAB8wHrARABFAH0GwAB/wHs
AesB7AK8Af8CAAH/AbwB7wHxAfIB7AEHAf8DAAEHARIB6gESAW0B8gH/FgAB/wH0AZMB6QFGAW8BBwH/
BgAB9AHzB/IB8QHyAfQB/wUAAf8B6wILAUMB9wH/GAABEgHqAXIB7AGSAesBBwHwAe8B8QG8AfIB/wEA
AfQBBwHxAbwB7wHxAe0B6gETARICbQHzGwABvAFDAesBBwH/BQAB/wG8AW0ESgHrARwB8AH/BQAB/wHs
AhEBvAH/FQAF/wH0AvACvAH0AwAB/wHzAfEC9AHxAfIB/wMAAf8B9wHvAQcBvAH0Bv8RAAH/AfMBbgHp
AUYBbwHyAf8GAAH0AfME8gXxAfMB/wYAAe8BHgELAREB7AH0GAABFAHqAewB7QKYAewB8QHwA/8CAAP/
AvEBvAHrAewCEgFtAesB8xoAAf8B7AFDAXIBBwH/BQAB/wHyARwCcwFyAesBHAEHAfIB/wUAAf8B7QER
AUMB7QH/FQAB8wLvAbwB8AHyAfMB9AHzAfQB/wQAA/8BAAL/BAAB/wT0AfMB8QG8AQcB7wHxAf8RAAH/
AfMBRQHpAUUBbgH0BwAB7wFuBkUDbgEHAf8GAAHxAUQBHgERAesB8xgAARQB6gLsAfcBBwHtAfIB9AH/
BwAC/wHvAQcB9wFtAeoC6wHzGgAB/wESAREBbQEHAf8GAAH0AbwBCAGZARwBBwG8AfEC/wYAAe0BEQFD
AesB/xUAAfACFAETARIBbQHrAewBkgHvAQcB8QH0AgAB/wH0Af8BAAL0Af8BAAH/AfIBvAEHAfcB7QHs
AW0B6gETAhIBBwH/EQAB/wHyAUQCRQFuAfQHAAFuAkYBJQdGAe8B/wYAAfMCHgFEAW0B8gH/FwABFQES
AusBbQGSAfAB9AoAAf8C8QHsAW0B6gFtAesB8xoAAfMBFAERAUoB7wH/BgAB/wH0AfIB8AG8AfAB8gH0
Af8HAAHsAhEB6wHzFQAB8AETARIB6gYSAeoB6wHvAv8B8AHtAfIB9AHtAe8B/wEAAbwBbQISBBQCEwHq
AewBBwH/EQAB/wHyAkQBRQHrAf8HAAFuB0cCRgFvAe8B/wYAAfQCHgFEAW0B8gH/FwABQwESAW0D6wHy
Af8BAAT/AQAG/wHtAewB6wFtAusB8xoAAfIBFAEQARUBkgH/BwAC/wP0A/8GAAH/AesBEAERAesB8hUA
AfABEwESAuoBEgLqAW0B6wHsAfcBkgL/AQcB7QHwAfIB7AH3AfQBAAEHAeoBEgTqAW0B6gHrAW0B7AEH
Af8SAAHzAUQBHgFEAW0B/wcAAW4JRwFvAQcB/wYAAfMCHgFEAewB8wH/FwABQwETAW0C6wH3AfIC/wEH
AewBBwH/AQAB9AHsAe0B8gH/AfMB9wGSBOwB8xoAAfEBFAEQAREB6wHzCAAF/wgAAfMB6gEQAREB6wHy
FQAB8AETAxID6gFtAesB7ALvAv8B8AEHAfAB8QG8AQcB9AEAAQcD7AHrBW0C6wEHAf8SAAHzAUQBHgFE
ARIB8wcAAW4JRwFvAQcB/wYAAfIBRAE+AUQB7AHzGAACFALqAesBbQH0Af8B8gH3AQcB6wHxAf8B7QLs
AfcB9AH/AQcBbQTsAfMaAAHxARQCEAESAfAB/wYAAf8B8QHsAeoB6wG8Af8HAAHwARQBEAFDAXMB8hUA
AfAB6gLrAuwB9wEHAbwD8AHyAv8B8gHxAvMB8QHzAf8BAAHzAfABvAHwAbwB7wGSBewBBwH/EgAB8wHq
AR4CRAHxBwABbgJGBkcBFwFvAQcB9AYAAQcDRAGSAfQYAAEUARMC6gHsAfcB9AH/AbwCmALsAfQB7QGY
AQcBvAL/ApIE7AHyGgAB8gEUAhABEQHtAfQEAAL/AQcBcwEcAXgBcgESAe0B8wH/BAAB/wGSAhABQwHs
AfQVAAHyAe8BBwG8AvAC8QHyAfMB9AL/AQAF/wH0Av8BAAL/AfQB8wHyAvEC8AG8AQcB7wHwAf8SAAH0
AewCCwFEAfcB/wYAAW4DRgVHARcBFgEHAfQFAAH/AewDRAHvAf8YAAEUARIB6gISAZIB9AH/AfQC7wEH
AfAB/wEHAe8BBwHyAv8BBwHsAe0D7AHyGgAB8wEUAhABEQESAfAB/wMAAf8BvAEcApkBeAFzAesB7AEH
Af8DAAH/AfEBEgIRARQB7QH/FQAB/wLzA/QB8AEHAe8BBwH0BAAB/wHzAv8C8wH/AwAB/wG8Au8BvAHz
Av8C9AH/EwAB/wHvAgsBIgHqAfQGAAFuBEYERwEXARYBBwH0BQAB9ANFAW0BvAH/GAABFQHqARIBEwES
AewBvAHwAfID7wHyAfEC7QHvAfAB8gG8Ae0F7AHyGgAB/wESBBAB6wHzAf8CAAH0AhwBmAGZAZgDcwHv
AfQCAAH/AfQB7AMVAW0B7wH/FQAE/wEAAf8B7AMSAQcB/wIAAf8BvAHtAfIB9AHtAQcB/wMAAfIC6wHs
Ae0B8wH/FwAB/wHwAUQCCwEVAbwB/wUAAW4FRgNHARcBlAEHAfQEAAH/AQcDRQHtAfMB/xgAAUMBEwES
AhMDEgJtA+wC6wLtAuwB6wHsAfcB7QHsAu0B8hsAAZIBEQEQAREBEAFDAe0B9AIAAfMB7AFzAhwBmQF4
AXMBHAHvAfMB/wEAAfQBkgETAxQBcwHxGwAB/wHvBG0B8wIAAf8B9wHtAfAB8gHtAQcB8wIAAf8B7AHt
AfcBBwG8AfQB/xgAAfQB6wILAUMB6wHzAf8EAAFuBUYCRwFGARcBlAEHAfQDAAH/AfMBbgJGAW8B7wL/
GAABQwUTARIBEwESA+oC6wHtAZgB9wGSAe0DmAGSA+wB8RsAAfIBEQQQAUMB7AHzAf8B8wHsAnMBHAKZ
ARwBmQEHAfQB/wH0Ae0BEgJKARQBSgHtAfQbAAH/AfMB7AJtAeoB7AH/AQAB9AH3AZIB8AHyAe0BBwHy
AgABvAL3AQcBvAHxAv8YAAH/Ae8BEQILAUQB9wH/BAABbgHpB0YBFwGUAQcB9AH/AgAB/wHvAkYBaQGT
AfEB/xkAAUMDEwEUARMB6gETARIC6gFtAusC7QGSAfcB7QGYAQgBmAH3A+0B8RsAAf8B6wYRARIBvAHz
ARwB6wFzARwDmQEIAbwB9AHwAW0FSgEcAQcB/xwAAf8BvAHqARIB6gETAe8BvAHvAewB9wHwAfIBkgHv
AZIBvAEHAe0C7wEHAbwB9AH/GgAB8wFtAgsBEQESAbwB/wMAAW4C6QVGAUcBFwGUAQcB8wH/AQAB/wHw
AUUBRgEXAW8B7wH0Af8ZAAERARQBEgMTARQEbQLsAZIB7ALtAZIB7QGYAggB8AKYAfcB8RwAAfMBQwYQ
AREBbQHtAesCcwKZARoBvAHvAewBbQFzAesDSgFzAe8B/x4AAfQB7QESAeoBbQITARIB6wGSAfAB8gHs
AfcB7ALrAfcBBwG8AfAB8gH/HAABBwFDAgsBEQESAbwC/wEAAeoCRQVGAUcB4wGUAQcB9AL/AfABbgEX
AeMBFgHvAfIB/xoAARUBFAISARMBEgETARIBbQHrAuwB7wEHAewBkgL3AZgECAGYAQcB9wHyHQAB7wFD
AhECEAERAUMBFQFDARICcwGZAZ8BGgGZARwBmQEcAnMCcgFzAQcB8QH/HgAB/wHwAewBbQXrAe0B8AHy
AesB7AGSAfcB7wH3AQcB8gG8AfQB/xwAAf8B7QILAhEBEgEHAfQB/wHqAkUB6QVGARcBlAEHAfMB9AG8
AW4BFwHjARYBkwG8Av8aAAEUARMBEgHqAxIBbQHrAm0B7AHwAfEB7AL3AZIBmATCAggB7wHxHQAB9AHs
ARUBEQEQARECQwEVARQBSgFtAXMBHAGZAsMBoAKZAhwBcwEcAZkBvAH0IAAB9AHvA+0B7AHrAW0B7QHw
AfIB6wHtAQcCvAHwAfIBvAHzAf8eAAH0AewBEQELAhEBFAHtAfEBEgEjAUQBRQHpAkYBJQFGARcBlAHv
AbwB7wFuARcBFgGUAQcBvAH0Af8bAAEUARMBEgHqARIC6gHrAewB6wFtAeoBbQHsAesCmAH3AZgGwgHv
AfEB/xwAAf8B8wHtARQCEQFDAhUBFAFKAW0BcwEcAZkBGgKgARoEmQEIAbwB8wH/IQAB8wHwA7wB7QHr
Ae0B8AHyAesB9wG8AfAD8QHyAv8fAAH0AewCIgELASIBQwESAUMCHgFEAUUB6QIlAkYBbwJuAUYB4wEW
AZQBGgG8AfMC/xsAARQBEwESBOoE6wHsAm0B7AH3ApgBCALCARsCCAHxAQcB8QH/HQAB/wHyAZIBSgEU
AhUBFAJKAXIBcwEcApkDoAGZAZ8BGgEbAfAB8wL/IQAC/wL0AfMB9wHrAe0B8AHyAW0BkgEHAfAB8wL0
Av8hAAH0AZIBQwYLAh4CAQHpBUYBFwHjARYBlAEaAbwB8wL/HAABFQMSAuoB6wTsAe0C7AHtAfcBmAII
AsIDCAEbAQcB8QH/HQAC/wHzAQcB7ARKAXICcwIcApkCnwGZAcMB8AHxAfMC/yQAAv8B9AHtAW0B7AHw
AfIBbQHtAe8B8AT/IgAC/wEHAUQCEQQLAh4BPgEBAUUDRgHjARYBlAG9AvAB8wL/HQABFAESAuoCEgHr
BuwC7QKYAQgBwgIIA8IB8wHvAfIgAAH/AfQB8QEHAhwCcwMcA5kBGgEbAfIBvAHyAfQC/ycAAfMB6wFt
AewB8AHyAW0B7AGSAbwB/ygAAfMB7QFEAwsERAJFAUYBbwEWAZQBvQEbAbwB8AHzAv8eAAETAm0C6gES
AW0C7APtAewB7QH3AZgECAHCAfMCwgHzAe8B8iIAAf8B9AHyAbwB8AYbAfQB8AG8AfMB9AL/KQAB9AEH
ArwC8wEHArwB8gH/KQAB/wHyAfcBbQESA0QB6gJuApMBBwK8AfAB8gH0Av8fAAH3AwcD7wO8AfAB8QHw
AfID8wj0AbwB8yQAAf8C9AHzBPEB8gHzAvQC/ysABf8BAAH/AfQD/ysAAf8B9AHxAbwD7wIHArwB8QHy
AfMB9AL/KAAC/xD0Av8lAAv/MwAD/y4ABv8E9AT/KwAS/5gACP//AP8A/wD/AIEABP8BAAb/AgAF/wMA
Bv8DAA3/tQAB8wHwAfEC/wH0AfEDvAH/AgAB8wHwAQcB8AH/AwAB/wHxArwB8gH/AgAB/wHzAfIB/wHy
AfAB9AH/AfEE8AHyAv9FAAH0AfMB9AL/AfQE8wH0BP8B9AHzAvQB8wH/AQAB/wH0AfMB9ALzAfQC/wP0
AvMD/wHzAf9FAAHxAbwB8AH/AfQB8AEHAfEBBwHvAf8CAAHyAQcBvAEHAfMB/wIAAfMB8QIHAfAB/wEA
Af8B9AG8Ae8B9AHxAfcB8wH/AQcB7wLzAfECBwH/RAAB/wG8Ae8B8QH/AfQBBwHvAgcB7wHzAfQB7wH0
AfMBBwHvAbwBBwHvAfMB/wH0AQcB7wHwAQcB7wHwAf8B8QHvArwC7wL0AgcB/wsABf8BAAf/AQAT/wEA
Bv8BAAj/CQAB8wHwAfEB8gK8AfMB/wG8Ae8B/wIAAfMB7wHyAfAB8QH/AgAB8AEHAfIBBwHxAf8BAAH0
AfABBwHvAf8B8wH3AfQBAAG8AQcB/wEAAf8B8gEHAbwB/0MAAf8B9AEHAfEC/wEHAZIB9AHxAbwB/wG8
AgcB9AG8AQcB8wHxAZIB9AH/AfQB7wHwAf8BvAHvAfMB9AHvAfAB9AHzAfAB7wH/AbwB7wHzAf8LAAH/
AfEBBwHwAv8B8wG8AfEBBwHvAfAB/wEAAf8B8AIHAfQB8wEHAbwB9AHwAgcBvAHyAfQB8QEHAfAC/wHz
AbwB8AIHAfQB/wH0AbwB8QHwAgcB9AH/CQAB9AEHAfcC8AH0Af8BAAEHAfcB9AL/AfMB7wHzAfQBBwHz
Af8B9AHyAQcB/wEHAfIB/wH0AfAB7wG8AQcB/wHzAfcB9AEAArwB/wIAAf8BvAGSAfQLABH/AQAE/wEA
E/8PAAH/AgcB8wHwAbwB8QH/AfIBvAHzAbwB7wGSAfMCvAH0Af8CBwH0AfEB7wHyAf8BvAHvAfIBvAEH
AfMBAAH0AbwB7wHyAfcB8gH/DQAB8wHvAv8B9AIHAfQB8AEHAfQD/wHyAbwB8AH0AQcBvAH0AfICvAH/
AfQB8AH0AfMB7wL/AfQCBwH0AfAB8wEAAf8B8AEHA/IB8AH/CgAB8wH0AfMBBwH/AwABBwHvAfcCBwLv
AfMB/wEHA/cB7wHzAf8BBwHxAfQB8AEHAf8B8QHvAf8B8wH3AfQBAAK8Af8DAAIHAfMLAAHxBuwB8gH0
Ae0F7AHwAf8BAAHyAe0BBwH/AQAB/wEHBewBBwHyAfcBBwHxBuwB8QH/DgAB/wHzAe8B9wHvAfcC/wHz
AwcB8wMHAbwB9AEAAfAB7QHvAfcBvAH0AQABvAHvAvcBvAH/AQAB9AG8AewB9wEHAfMB/w0AAfQBBwH/
AfQBBwG8AQcB9AHwAe8B9AHyAbwB8wHyAbwB8AEHAbwB8wH/AfEB7wH0AQAB/wHzAfIB9AEHAf8B9AEH
AbwBBwH0AbwB9AH/AfABvAEHAfIB8wHyAfAB/woAAfMBvAIHAfMB/wIAAQcB7wHyAvMB8AHvAfMB/wHz
AQcC8AEHAv8CBwG8AQcB8wEAAfEBBwH/AfMB9wH0AQABvAEHAf8DAAIHAfQLAAEHAu8CBwLvAQcBvAH3
Au8DBwHxAf8BAAHxAu8B/wEAAfQB7wUHAbwB8QHvAQcBvAYHAe8B/w8AAfQBBwK8AQcC/wHzAe8CBwH/
AfIC7wEHAfQBAAH0Ae8B8QHvAfAB/wEAAbwBBwLwAfcB8QH/AfQB8AHvAfEB7wEHAf8NAAH0AQcB9AEH
AbwB8AG8AfQB8AHvAfQB8wHyAfQB8wG8Ae8BBwHyAf8BAAHxAe8B9AIAAfMB8gH0AQcB9AEHAbwB8AG8
AfQBvAHzAfEBvAHxAfAB8gHzAfIB8AH/CgAB8wG8AfEB8AEHAfMB/wEAAbwB7wH/AgAB8wEHAfEBAAH/
AbwCBwHzAQAB/wEHAe8BvAHyAf8BAAHwAe8B/wHzAfcB9AEAAbwBBwH/AQAC/wG8AQcB/wsAAQcC7wHz
AfQBBwHvAQcBvAL3BAcB8wH/AQAB8QLvAf8BAAH0Ae8B9wHvAwcB8QHyAe8BBwH0AbwDBwLvAQcB/w8A
Af8B8QH3Ae8B8gEAAf8B9AH3Ae8B8gL/AQcB9wEHAfQCAAEHAe8BBwHzAgABvAHvAvQB7wEHAf8B9AG8
Ae8B/wHxAfcB8w0AAfQCBwG8AfIB9AHwAfQB8AHvAfQDAAHzAbwCBwHzAf8BAAHxAe8B9AIAAfMB8QHz
AgcBvAHyAfQB8AH0A7wB8QH/AfEB8gHzAfIB8AH/CgAB8gG8AfAB/wHwAQcB8wH/AbwB9wH0AgAB8QG8
AfAC/wHyAgcB/wEAAf8BBwHwAfEC/wEAAbwB7wH0AfMB9wHzAf8BvAEHAfQB/wH0AfEB8AHzAf8LAAEH
AfcBBwH/AQABvAH3AQcBvAHvAZID7QGSAfAB/wEAAfEC7wH/AQAB9AHvAfcE7QEHAfEB7wEHAfIE7QH3
Ae8B8AH/DwAB/wHzAQcB7wH0AQAB/wHzAe8BBwH0AgAB8gHvAQcB9AH/AQAB8gHvAQcB/wIAAQcB7wHy
AfMB7wHwAf8B8wHwAe8B9AG8AQcB9AwAAf8B8wEHAbwB8gH/AfQBBwHzAbwB7wHzAf8BAAH/AfICvAHy
AbwB8gH/AfAB7wHzAv8B8gHwAfIBBwG8AfIB/wH0AQcB8wK8AfAC/wHwA/IBvAH/CgAD8AH/AfQCvAHz
AfABBwH0AQAB/wHxAvAB/wEAAfQBvAHyAf8BAAH/AfAB8wH/AwABvAEHAfMB8QHvAvMB8AEHAvEC8AHz
Af8MAAEHAfcB7wL0AQcB9wEHAbwB9wHvBAcB8gH/AfQBvALvAvQB8wLvBAcB8QHyAe8CBwLvAQcDvAHz
Af8QAAH/AfAB8QH/AQAB/wG8AQcB8gH/AgAB/wG8AQcB8QH/AQAB/wG8AfEB/wEAAfQCBwHvAQcBvAH0
Af8BvAHwAfcCBwHyAf8MAAH/AfABvAHyAv8B8QEHAfABvAEHAfEB/wEAAf8B8AG8AQcB8wEHAbwB8QG8
AQcB8AH/AfMEvAHyAv8B8QEHA7wC/wHzAbwB8AG8AfABBwH0Af8JAAH/AfQE/wH0Af8C9AH/AQAC/wH0
Av8BAAH/AfQC/wEABP8DAAL0Af8C9AL/BfQC/w0AAQcB9wHtAvcBkgH3AQcBvAH3AZIE9wG8AQcC9wHv
AZIB9wHvAbwC9wGSA/cBvAHxAe8CBwHvAfcBkgL3Ae8BvAH/EAAE/wEAAf8C9AH/AwAC/wH0Av8CAAH0
Af8CAAH/BPQD/wT0Av8NAAT/AQAI/wEAEv8BAAb/AQAI/x0AAv8kAAEHBu8B8wHyBu8B8AfvAfAG7wG8
AfIB7wHwAfMBBwPvAgcBvAH/xgAB/wX0Af8yAAb/ZgAE/wEACv9iAAL/AfQB8wTyAfMB9AL/XAAD/wMA
Af8B9ALzAfQB/wH0A/MB9AH/AfQC8wH0Af8DAAP/WQAB/wHzAfAB7wHsAW0BEgFKARMBEgFtAewB7wHw
AfMB/y0AB/8lAAH/AfMB8QH/AwAB8wHsAm0B9wHxAfcD6wHvAQcB6wHqAW0BBwH/AwAB8wHyAv9VAAL/
AfIB7wHsAkoBRAYjASIBFQFEAesB7wHyAf8oAAP/AfMB8gG8AQcBvAHxAfMB9AL/IQAB/wHzAQcB8AH/
AwAB8QNEAewB7wFuAUoCRAHsAe0CEAFEAe0B/wMAAfMB7AHvAfQB/yIAA/8FAAP/JgAB/wH0AQcBcwVL
ASkCSgcjARUBbQHvAfQB/yUAAf8B8wEHAewB6wVKAW0B7AHvAfEB9AH/HgAB/wH0AQcB7wH0Af8DAAHx
AUoBRAFKAe0B7wFuAUsBRQFEAewB7QIRAUQB7QH/AwAB/wGSARQB7wH/IQAB/wHxAe8B8wH/AwAB/wHy
Ae8B8gH/JAAB/wHzARwBdARSAnQBcwEcAUsCcwJKAUQDIwFEARUB7AHzAf8iAAH/AfMBkgJKAUsCSgFE
AkoFRAHsAfAC/xwAAf8BBwG8AQcB/wQAAfEDSwEcAe8CdAFLAUQB7AHtAUMBRAFFAe0B/wQAAfIBQwES
AfAB/yAAAfIBEwEVAe0B8wH/AQAB/wHzAW0BQwHsAfIB/yIAAf8B8wFuAVIDegEaArwBmQFzAfABSwFt
AfMCcwEcAXMBSgIjAUQBIgFtAfMB/yAAAf8BvAFKAksBUQFzA0sCSgFLAUoBRAMjAUQB9wH0Af8aAAH/
AfEBBwHwAbwB/wQAAfEDSwEcAe8CdAJLAewB7QJEAUsB7QH/BAAB/wIVAewB9AH/HgAB9AEUAREBQwEV
Ae0B9AEAAfQB6gIRARAB7AHzAf8gAAH/AfMBbgFSAVkBegGgAfAB8QL/AZkBcwHwAUsB6wHzAXMBHAL0
AbwBdAFKA0QBbQHzAf8dAAH/AfQB7wFRAVIDdAGTAZkBHAJLAVECmQF0AUsBSgIjAUQB7QHyAf8ZAAH0
Ae8CBwHyAf8EAAHxA24BHAHvAnQBTAFLAewB7QJEAeoB9wH/BQAB7AEVAeoBBwH/HAAB/wHzARMBFAHq
ARIBFAEVAZIB8gHqARUBEwESAUMBEAHsAfIB/x4AAf8B9AFzAVIBegGaARoB8AHzAf8BAAH/AZkBcwHw
AVEB6wHzAW4BHAH0AgAB8wGZAUsBSgFEASIB6wH0HAAB/wH0AZkBdAJ5ApkBGgHwAfEB8AJLAXQBvAH0
AfIBGgEcAUsBSgJEAe0B8wH/FwAB/wHxAW4CBwHzAf8EAAHyAXMCbgHvAbwCdAFvAUsB7QHvAm0B6wG8
Af8FAAHvAUMBFQGSAfQB/xoAAf8B8gESARMB7QG8AQcB6wEUARUCFAHrAe8BBwHrARUBEQHsAfIB/x0A
Af8BHAFSAXoBoAEaAfAB8wH/AgAB/wGZAXMB8AFLAesB8wFuARwB9AMAAfQBmQFLAUQBIwEVAZIB/xsA
Af8BBwF0AnoCGgHxAfIC9AHyAUsBSgFzAfAB/wEAAf8B9AEbARwBSwFEAUoB9wH0FwAB/wEHAUoBHAHv
AfMB/wQAAfQBvAIHAfEB8AN0AW4BkgHwAwcB8wH/BQABvAFDARUB6wHyAf8ZAAH/AfEBbQETAfcBvAHy
AfMBBwFtARQBFQESAe8B8QH0AfAB6wEVAREB7AHyAf8bAAH/AbwBUgF6AZoBGgHwAfQC/wIAAf8BmQFz
AfABSwHrAfMBbgEcAfQDAAH/AfQBHAFKAUQBIwEUAfAB/xkAAf8BvAF0AXoBmgHDAfAB8QHzA/8B8wFL
AUoBcwHwAf8EAAH0AZkBSwJKAbwB/xYAAfQB7AFKAe0B9wHxBvMD8QHyAbwBkwF6AXQBbwHsBPEH8wEH
AREBQwESAbwB/xgAAf8B8QFtARMB9wG8AfMC/wHwAW0CFAESAe0B8gL/AfEB6wJDAewB8gH/GgAB8wFz
AVIBegGgAbwB9AL/AwAB/wGZARwB8AFLAewB8wFuARwB9AQAAf8B8wFzAUQCIwHrAfQZAAHzAUsBdAF6
AcMB8AHyAfQD/wEAAfMBSwFKAXMB8AH/BAAB/wH0AbwBSwFKAewB9BYAAfMBEgFEAuoF6wbsAXMBmQGa
AXUBdAFLAusBbgXrA20BEwEQAREBFAHvAf8XAAH/AfIBbQEUAe0BvAHzAv8B8wHtAeoB7AFtARQBEwHt
AfMC/wHyAesBEQFDAewB8gH/GQABBwFRAVIBegEHAfMD/wMAAf8BvAEcAfABcwHsAfMB6wEcAfQDAAP/
AbwBSgEjAUQBSgG8GAAB/wHtAUsBdAGaARoB8QH0Av8BAAL/AfABSwFKAUsB8AH/BQAB/wH2AZkCSgHx
Af8UAAH/AfIBQwEVA0QCSgJLBHQBeQKZApoBegN0AkwDSwFKAUQBFAEVAUMDEQEUAfcB/xcAAfQC7AHv
AbwB8wL/AfQB7AHrAfcBBwG8AW0CFAGSAfMC/wHyAewBbQHqAfcB9BgAAfQBcwFLAVIBegG8Av8B8gH0
AwAB/wG8ARwB8AFzAewB8wHrARwB9AMAAfQB8AL/AXMDRAHtAf8XAAHzAUsCdAGZAfEB9AH/AgAB/wHz
AewDRAFuAfAB/wcAAfMBbgFEAe8B/xQAAf8B8QERBUQBSgFLAW4CdAOaAxoBmgF6BXQBTANLAUQCFAEV
AkMBEQEVAe0B9BcAAfQD8wH0Af8BAAH0AuwB7wEHAfIB9AG8AeoCFQGSAfQBAAH/AfQD8gH/GAAB8gNL
ARwB9AH/AfIBBwH/AwAB/wGZARwB8AFzAesB8wFzARwB9AMAAf8B9wG8Af8BvAFKAkQB6wHzFgAB/wHv
AksBdAEaAfME/wHxAXMBUQNLAW4B8QH/BwAB/wGZAUoB7AH/EwAC/wHwAeoBbgLsAW4CcwEcAZMCmQQa
AsMBGgWaAZMDdAFzAW4BbQHqAhICEwHqAZIB9AL/FAAH/wEAAbwC7AGSAQcB8wH/AfQB7AEUARMB7AHz
Af8BAAX/FwAB/wG8AUoBSwFSAfcB/wH0ARwBvAH/AwAB/wGZARwBBwFRAW4BvAFuARwB9AMAAf8BBwHs
AvQBSgFEAkoB8AH/FQAB/wFuAUsBUQGZAfAE/wHzAXQCeQJ0AXMBdAHyAf8IAAHzAW4BSgH0EgAB/wHz
AfIBBwHsAe0FHAGTAe8CBwm8AgcEmQKTAhwC7QTsAfcB8QHyAfQVAAH0AwcB8QL/AfQBBwH3AewB6wEH
AfQB9wEVARIB9wHxA/8B8QIHAfAB/xcAAf8B7wFEAUsBdAHwAQAB9AFzAQcB/wIAAf8B9AGZAXMBbgFS
AUsCSgHtAfIB/wIAAf8BBwFtAfIB/wFzAUQCSgEHAf8VAAHzAksBUQGZAfIE/wGZAXoCmgEaAfEC8gH/
CQAB/wEcAUoB8xIAAf8B7AESB+oCbQHrAewBcwLsBO0B7AJzAuwBcwRuAusDbQXqARIB6gG8FQAB8wHs
ARABEQFtAfAC/wHzAQcB7QHrAW0B7AEUAeoB9wHxAfQC/wEHAUMBEQFtAbwB/xcAAf8BHAFKAUsBcwH0
AQAB8wFRAXMB8wL/AfIBHAF0AVIBdAJSAksBSgHsAbwB/wEAAfYB6wFtAfEB/wEHA0oB7wH/FQAB8AJL
AVEBmQH0Af8BAAH/AfIBmgGgAZoBGgHyAfQC8AHzAf8JAAHwAW4B8xIAAf8BQwEVBUMCFQEUAUQBSgFu
A3QFmQZ0AW8BbgJLAUoBRAEUAhUBQwERAUMBEQFDARMBBxUAAf8B8wHsAkMBbQG8Av8B8wG8AfcB7AFt
AesB7wHxAfQC/wHvAUMBFQHsAbwB9AH/FwAB9AEcAUoBSwFuAfQBAAH0AXMBSwHvAf8BvAF0AXkBegKa
ApkBeQFRAUsCSgHvAf8BBwFKARwB8wH/AbwDSgHvAf8VAAG8AkoBSwGZAf8BAAL/AbwBoAF6AZkB8AH0
AbwBcwFLAe8B/wkAAfQBcwH0EgAB/wMVAkMDFQNEAUsBbgN0BZoBmQF5BXQBbwFMAksBSgJEARUEQwEV
AeoB8BYAAf8B8wHsAhUBbQG8Av8B8gHtAesC7AHvAfMC/wHvAUMBFQHsAbwB9AH/GAAB9AEcAkoBbQH/
AQAB9AGZAXQB7wEHAXQBegEaAfABvAHxA/IBBwEcAUsBSgFEAe8BSgFuAbwB/wEAAfEDSgHvAf8VAAEH
AUoBRAFLAQcB/wEAAv8BmQGgAXoBmQHwAf8BGgF5AVEBHAH0CQAB/wHvAf8TAAESAxUBFAETAhIC6gFt
AW4BdAKTC5kBkwR0Am4CSgEUBBUBFAFtAfIXAAH/AfMB7AEUARMB6wHwAfMB9wHtAe8B7QLrAQcB9AHv
AhQB7AG8AfQC/xgAAfQBHAIjAeoB/wEAAf8B8gEcAbwBcwF6ARoB8AH0BP8CAAH/AbwBcwFLARUB9wGZ
AfIB/wEAAfADSgEHAf8VAAEHAUoBRAFLAe8B/wEAAv8BvAGgAXoBeQG8Af8BvAGaAZkBvAH/CQAC/xQA
AewBQwIVARQB6gHtAu8DBwG8AxoC8QEaBJkB8QHwBBoBvAEHApkCHAHsARQCFQEUAUoB6wH0GQAB9AHs
ARQBEwFtAesB7AHvAfEBvAH3AesBbQHqARUBFAHtAbwC/xoAAfQBHANKAfMCAAH/AfQB7wF0AZkBvALv
AfAB8wL0AfMB8gEHAe8B7QJLAewB8gH/AgABBwFLAkoBBwH/FQABvAJEAUoBHAH0AQAC/wHwAaACegGZ
AfIB/wLyAv8IAAL/FQABBwRDARIBkgH0Bf8F9AHzApkCGgEHAfIF8wT0Af8B8QIVAkQBbgGSAf8aAAH0
AewBFAESAesB7QHwAfEB8wG8AZIBbQESARMB7AG8A/8aAAH/Ae8BRAJKAbwDAAH/ARwBdAEHARwBdAFR
A0sBbgJLAlEB7AEcAUsB7AH/AwABHANLAbwB/xUAAfIBSgEjAUQBbgHyA/8B8gEaAnoBeQGZAbwC8gHz
Av8HAAL/FQAB9AEVA0MBFAHsAf8KAAH0Ae8BmQEaAfIBvAH0Cf8BAAHxARUCRAFKAXMBvAH/GwAB8wEU
ARIB7QG8AfEC9AHzAQcB7QJtAZIB9AL/GwAB/wEHAkQBSgHsAf8CAAH0AXMB7QHzARwBmQGaBHoBoAKa
AZkBBwHyAVEB7QH/AgAB/wFuAksBcwHxFgAB9AFLAiMBSgG8Af8BAAH/AfQBvAGaAXkBegGaAZkBHAGZ
AfAC/x8AAesDQwEVAesB/wkAAf8B9AEHARoC8wG8AfQB/wkAAbwCRAFKAW4BHAHyGwAB/wHvARQB6wEH
AfEB9AP/AfMBBwHsAW0B6gEHAfQB/xwAAfEBSgJEARMB8wIAAfQBcwH3Af8B9AIbAhoBoAGZAbwB8ALy
AfQB/wFzARwB/wEAAf8B8QJLAVEBmQH0FgAB/wHsAkQBSgHtAfQD/wHyAfABGgN6AaABGwHwAv8FAAL/
GAAB8AEVA0MBEgHzCQAB/wH0AbwB8ALxAfAB9AH/CQAB9wFEAUoBbgEcAQcB9BoAAf8B9wERARIB7wHx
AfQC/wEAAv8B8wEHAewBEgHqAQcB9AH/GwAB9AFzAkQBIwHvAf8BAAH/ARwB7wEAA/8B9AHzAXoBcwHz
AvQC/wEAARwBBwH/AQAB/wEcAlEBdAEHAf8XAAG8AUQCIwFKAbwD/wH0AfIBvAEaAZoBeQF6ARoB8AL/
BAAE/xcAAfQB6wFDAhEBFQHwCQAC/wH0A/IB8wH/CQAB/wHrAUsBbgF0AQcB8AH/GQAB/wH3AUMBFQH3
AfEB9AL/AwAC/wHzAQcB6wHqAW0BBwH0Af8aAAH/Ae8BSgFEASMBSgHyAgAB8AEHAf8DAAH/AfQBeQHs
BP8BAAH/AZkB8gL/AfEBcwFSAXQBmQHyAf8XAAH/AUoBRAEjAUQB7AHzA/8B9AHzAfEBvAF0AXkBmgHw
Av8EAAX/FgAB/wG8ARQCEQEVAfcB/wkABv8KAAH0AW4CdAGZAQcB8wH/GAAB/wHvAUMBEAESAQcB9AL/
BQAC/wH0AZIC6wHtAfEB/xsAAfIBcwFKAUQBIwHsAfQBAAH/AfAB/wQAAfQBdAHrAf8EAAHzAbwC/wH0
ARwCdAGZAe8B/xkAAbwERAGSAfQBAAP/AfQB8AF0AVIBmQHxAv8DAAH/AfIB9wEHAfQC/xYAAfQB7AFD
AhEB6gH0GQABvAJ0AZkBBwHwAfQB/xgAAf8B8AETAREBQwHrAfIB/wcAAf8B8QFtAesB9wHwAfQB/xsA
Af8B7wFKA0QB7wP/BQAB9AF5AesB/wQAA/8B9AEHAXkBegF5ARoB8gH/GgAB7AFKA0QBkgHzBP8B8gFz
AVEBeQHwAv8BAAL/AbwDSwG8Av8WAAH/AfIBEgIRAUMBvAH/FwAB/wHtAZMBmQK8AfMB/xoAAf8B8AES
AREBQwHsAfIB/wUAAf8B8QLrAe8B8QHzAv8cAAH0AXMCSgFEARQB7wH0Af8FAAH0AXQB6wH/BQAB/wH0
AbwBmQKaARoBvAH/GwAB8wFzAUoDRAHsAfAB9AL/AfIBSwFRAXkBvAP/AfMB7wFRAlIBdAG8Af8YAAH/
AQcBEwIRAewB9AH/FQAB/wHxARwBmQK8AfIC/xsAAf8B8AESAUMBFQHsAfIB/wMAAf8B8QLrAe8B8AHz
Av8eAAHyAUsCSgJEAfcB8wH/BAAB9AF0AesB/wMAAv8B8wEHAZkDoAG8AfQcAAH/AfEBcwFLAkoBRAFt
ARwB8AHzAfECSwF5AbwB9AHyAQcBcwFSA3kBmQHzAf8ZAAH/Ae8BFAERARUBBwH/FAAB/wH0Ae8BmQEa
AbwB8QH0Af8dAAH/AfAB6gFDARUB7AHyAf8BAAH/AfEBbQESAfcB8AHyAv8fAAH/AfABcwJKAkQB6wEH
AfQB/wIAAfQBdAHrAf8CAAH/AfQBvAKZAqABGgG8AfMB/x0AAf8B8gEcAXMBSwRKAuwCSwFRAewBHAFz
AVIBeQJ6AZoBGgHxAv8aAAH0Ae8BFAFDAW0B8QH/EgAC/wG8AQcBGgG8AfEB9AH/HwAB/wHwAW0BQwEV
AZIB/wEAAfQB6gEUAe0BvAHzAv8hAAH/AfABcwNKAkQB6wHvAfEB9AHzAXQB6wLzAfEB7wEcAXkBmgKg
ARoBvAHyAf8eAAL/AfMBvAF0AXMBSwRKBEsBUQFSAXQBeQGaARoB8AHxAfQC/xsAAf8BBwFKARUB7AHz
Af8QAAL/AfEB7wHwAbwB8QH0Av8gAAH/AfEB6gFDAewB9AEAAfEBFQHsAbwB8gL/IwAB/wHyARwBSwZK
ARIB6gFLA0oBUQFSAXoDoAEaAbwB8wL/HwAC/wH0AbwBmQF0AVEFSwFSAnQBeQGaARoBGwG8AfIB9AL/
HQAB/wHxAewBEwHtAfMB/w8AAf8B8QHvArwB8gL/IwAB/wHwAW0B7AH0Af8B8QHrAQcB8gL/JQAB/wH0
AQcBcwFLAkoESwFSAXQEUgJ6AaABGwHwAfQC/yIAAv8B8wG8ARoBmgF5A3QBmQGaARoBwwEbAbwB8gHz
AfQC/x8AAf8B9AH3ARIB7AHyAf8NAAH/AfABHAG8AfAB9AH/JgAB/wHwAe8B9AH/AfIBBwHzAv8oAAH/
AfIBBwFzBksCUgJ0AnkBmQG8AfMB9AH/JQAC/wH0AfMB8QTwAfEC8AHxAfMC9AP/IgAB/wHyAfcB7wHx
Af8KAAH/AfQCBwHwAfQC/ygAAf8B9AL/AfQD/ysAAf8B8wHwAZkCHAFzAnQBHAKZARoB8AHzA/8oAAT/
B/QD/ycAAf8B8wHxAfQB/wkAAf8C8gP/LAAD/zAAAv8B8wXyAfMB9AP/LAAL/zgAAv9kAAj//wD/AP8A
YwABQgFNAT4HAAE+AwABKAMAAeADAAHgAwABAQEAAQEFAAGAARgWAAP//wD/AP8A/wD/AP8AJwAB/wEE
AUwB/AHZAQwBfxb/AgABMAIAAT8O/wH4BQABAQH/AgABMAIAAT8O/wHwBQABAQH/AgABMAIAAT8O/wHw
BQABAQH/AgABeAIAAX8O/wHwAgABCAEAAQgBAwH/AgABCAIAAX8B4AMAASABggEhB/8B4AIAAQgBBAEI
AQMB/wUAAX8B4AUAAQEH/wHgBQABAwH/BQABfwHgAwABEAEAAQcB+AEAAQQCGAEgAQ8BwAUAAQMB/wIA
AXgCAAE/AeABAgIAARABMAEHAfgCAAEIARABAAEHAcACAAFAAgABBwH/AgABcAIAAT8B8AECAgABEAEw
AQcB+AIAAQgCAAEHCP8CAAFwAgABPwHgBQABBwH8AgABCAEgAQABHw7/AeAFAAEHAfwCAAGMAQEBAAE/
Dv8B4AUAAQ8B/AIAAYwBAQEAAT8V/wH8AgABgAEBAQABPwL/Af4BAAE/BP8B+AEAAT8J/wH4BQABPwL/
AeABAAEHBP8BwAEAAQcJ/wH4BQABPwL/AYABAAEBBP8BgAEAAQEJ/wH4BQABfwL/AwAD/wH+AwAF/wGI
C/8B/gMAAT8C/wH+AwABPwL/AfwB/gEIAR8Bnwn/AfwDAAE/Av8B/AMAAT8C/wH8AXgBCAEPAR8J/wH4
AwABHwL/AfgDAAEfAv8B/AEwAQgBBwEfCf8B8AEAARABAAEPAv8B8AMAAQ8C/wH8AwABHwn/AfABAAF4
AQABBwL/AeADAAEHAv8B9AMAATcE/wHwAT8D/wHgAQEB/AEAAQcC/wHgAwABAwL/AeADAAEjA/8BgQGA
AQcD/wHgAQMB/gEAAQMC/wHAAwABAwL/AeADAAEDA/8CAAEBA/8BwAEHAf8BAAEDAv8BwAMAAQEC/wHg
AwABAwL/AfADAAP/AcABDwH/AQABAQL/AYADAAEBAv8B8AMAAQcC/wHwAwABfwL/AcABHwH/AQABAQL/
AYADAAEBAv8B8AEGAQABGAEHAv8B8AIAAXABPwL/AYABfwH/AYABAQL/AYAEAAL/AfABBgEAARgBBwL/
AfwCAAEEAT8C/wGAAR8B/wEAAQEC/wGABAAC/wHwAQ4BAAEYAQ8C/wH+AgABAQP/AYABHwH+AQABAQL/
AYAEAAL/AfgBDwEAARgBHwP/AgABAQP/AYABDwH+AQABAQL/BQABfwH/Af4BDwEAATgBPwL/Af4CAAEB
A/8BgAEHAfgBAAEBAv8FAAF/Af8B/gEPAQABOAE/Av8B/gIAATsD/wGAAQcB+AEAAQEC/wUAAX8B/wH+
AQ8BAAE4AT8C/wH8AQABAQT/AYABgQHgAQABAQL/BQABfwH/Af4BBwEAATABPwL/AfwBAAEHBP8BgAMA
AQEC/wUAAX8C/wEHAQABMAF/Av8B/gEAAQME/wGAAUACAAEBAv8FAAF/Av8BAwEIASABfwL/Af4CAAFx
A/8BgAMAAQEC/wGABAABfwL/AYABCAEAAX8C/wH+AgABAQP/AcABIAIAAQEC/wGABAAD/wGAAQgBAAT/
AgABAQP/AcABEAIAAQEC/wGABAAD/wGAAQgBAAP/Af4CAAECAT8C/wHAARgCAAEBAv8BgAMAAQED/wHA
AQgBAQP/AfADAAE/Av8B4AEMAgABAwL/AcADAAEBA/8B4AEIAQMD/wHwAwABfwL/AfABBgEAARABAwL/
AcADAAEBA/8B+AEIAQ8D/wHwAwAD/wHwAQEBgAEAAQMC/wHgAwABAwP/AfwBCAEfA/8B/AIAAQED/wH4
AQABPAEAAQcC/wHwAwABAwT/AYgF/wIAAQMD/wH8AwABDwL/AfADAAEDBP8BiAX/AcABAAEHA/8B/gMA
AQ8C/wH4AwABBwT/AcgG/wHAAT8D/wH+AwABHwL/AfwDAAEPBP8ByQz/AwABPwL/Af4DAAEfBP8ByQz/
AeACAAT/AwABPwT/AckM/wHwAQABAQT/AYACAAE/Ef8B/AEAAQcE/wHAAgAT/wEAAR8E/wHgAQABARP/
AfAF/wH8AQABBxr/AQABHzr/Af4B+wEOAfcBHAHHAb8V/wH8AWABBAFEAQABAwEfD/8B+AHGAQgBiAGD
Af8B/AEgAQABQAEAAQMBHw//AeABAAEIAQABAQH/AfwCAAFAAgABHw//AcABAAEIAQABAQH/AfwDAAFA
AQABHwH/AQABgAEAARABIAF/Af8B4gFjAREBkwEnAv8BwAMAAQMB/wH+AQABYAEAAUABAAE/Af8DAAEQ
ASABfwH/AeABAgEBAQABAwL/AcADAAEPAv8BAAFgAQABQAEQAX8B/gEAAQYBMAEAASABfwH/AeABAgIA
AQMC/wHAAwABAwL/AQQBAAJAARABfwH+AQABBgEwAgABfwH/AeABAgIAAQMC/wHAAwABAwL/AQQBAAJA
ARgBfwH/AQIBBgEwAgABfwH/AeABAgIAAQMC/wHAAwABAwL/AQ4BBAJAATgBfwH/AQIBJgEwARABAAF/
Af8B4AECAQgBAAEDAv8BwAMAAQMC/wGfA/8B/Qn/AeADAAEDAv8BwAMAAQEQ/wHgAwABAwL/AcADAAEB
C/8B5wT/AeABIAEAASABAwv/AQEG/wGAE/8B4AEAAQ8E/wH8AQABHxL/AYABAAEDBP8B8AEAAQcL/wH+
AQgBfwT/AwAE/wHAAQABAQv/Af4BAAE/A/8B/gMAAX8C/wH+AwABfwT/AQABPwT/Af4BAAE/A/8B/AMA
AT8C/wH+AwABPwP/AfwBAAEfBP8B/gEAAX8D/wH4AwABPwL/Af4DAAE/A/8B8AEAAQcE/wH+AQABfwP/
AfABAAEPAcABHwL/Af4DAAE/A/8B4AEAAQEE/wHgAQABAwP/AeACAAEgAQ8C/wH+AwABPwP/AQIBAAEg
AX8D/wHAAQABAwP/AcACAAEQAQcC/wH+AwABPwP/AQYBAAEwAT8D/wHAAQABAQP/AcABBAEAARgBAwL/
Af4DAAE/Av8B/gEGAQABMAE/A/8BgAIAA/8BwAEMAQABHAEDAv8B/gEAAQgBAAE/Av8B/gEOAQABOAE/
A/8DAAP/AYABHAEAARwBAwL/Af4BAAEIAQABPwL/AfwBDgEAATwBHwP/AwABfwL/AYABPAEAAR4BAQL/
Af4BAAEIAQABPwL/AfwBHgEAATwBHwL/Af4BAwEAAcABfwL/AYABfAEAAR8BAQL/Af4BAAEIAQABPwL/
AfgBPgEAAT4BDwL/Af4BAwEAAeABPwL/AQAB/AEAAR8BAQL/Af4BAAEIAQABPwL/AfgBPgEAAT4BBwL/
AcABBwEAAeABAQL/AQAB/AEAAR8BgQL/Af4BAAEYAQABPwL/AfABPgEAAT4BBwL/AcABBwGJAeABAQL/
AQEB/AEAAR8BgQL/Af4BAAF/AQABPwL/AfABPwEAAT8BBwL/AcABAQGIAYABAQL/AQEB/AEAAR8BgAL/
Af4BAQH/AYABPwL/AfABPwEAAX8BBwL/AcACAAGAAQEC/wEBAfwBAAEfAYAC/wH+AQEBCAEAAT8C/wHw
AT8BgAF+AQcC/wHAAgABgAEBAv8BgQH8AQABHwGAAv8B/gEAAQgBAAE/Av8B8AE/AcEB/gEHAv8BwAIA
AYABAQL/AYEB/AEAAR8BgQL/Af4DAAE/Av8B8AEfAYAB/gEHAv8BwAIAAYABAQL/AYEB/AEAAR8BgQL/
Af4DAAE/Av8B8AEeAQABPAEHAv8BwAEBAQABgAEBAv8BgAH8AQABHwEBAv8B/gMAAT8C/wHwAQ4BAAE4
AQcC/wHAAQcBgAHgAQMC/wGAAfwBAAEfAQEC/wH+AwABPwL/AfABBgEAATABBwL/AcIBAwEAAeABPwL/
AYABfAEAAR4BAQL/Af4DAAE/Av8B+AEGAQABEAEPAv8B/gEDAQABwAE/Av8BwAE8AQABHAEBAv8B/gMA
AT8C/wH4AwABDwL/Af4BAQEAAcABPwL/AcABPAEAAQwBAwL/Af4DAAE/Av8B+AMAAQ8D/wMAAX8C/wHg
ARwBAAEIAQMC/wH+AwABPwL/AfwDAAEfA/8BgAIAA/8B8AEEAgABBwL/Af4DAAE/Av8B/gMAAR8D/wGA
AgAD/wHwAwABBwL/Af4DAAE/Av8B/gMAAT8D/wHAAQABAQP/AfgDAAEPAv8B/gMAAR8C/wH+AwABPwP/
AeABAAEBA/8B/AMAAQ8C/wH+AwABHwP/AwABPwP/AeABAAEDA/8B/gMAAR8C/wH+AwABHwP/AwABfwP/
AfgBAAEHA/8B/gMAAT8C/wH+AwABPwP/AcACAAT/Af4BAAE/BP8BwAIAAX8C/wH+AwABPwP/AfABAAED
BP8B/gEAAT8E/wHgAgAD/wH+AwABPwP/AfwBAAEPBP8B/gEIAT8E/wH4AQABAwT/AfwCAAE/A/8B/gEA
AT8F/wH4Bf8B/AEAAQ8E/wH+AgABfxL/AYABf47/AfwBIAFgAeABcAEAAX8V/wH8AQABYAHgAWABAAEf
CP8CAAEEAgABfwf/AfwBAAJgAUABAAEfB/8B/gUAAX8B8AJAAQABBAEIAQcB/AEAAmABQAEiAQ8H/wH+
BQABfwHwAQABQAMAAQcB/AEEAwABIwEPAf4CAAGEAgABfwH/BAABgAH/AfgEAAEQAQ8B/AEcAwABIwGP
Af4CAAGEAgABPwH/AgABIAFAAYAB/wH4AgABBAIAAQ8B/AEMAgABEAEjAY8B/gIAAYQCAAE/Af8BgAEA
ASABQAEAAf8B+AIAAUYCAAEPAfwBBAFiAQgBEAEiAQ8B/gIAAYQCAAE/Af8BggEAATABwAEAAf8B+AEA
AeABRgIAAQ8B/AEAAWABCAEQAQABDwH+ARABAAGEAgABPwH/AYIBDAEQAcABAAH/AfABAAFAAwABDwH8
AQABQQEIAXABAAEfAf4FAAE/Af8BwgEMARABgAEAAf8B8AEAAUADAAEHAfwBAAFBAQgBcAEAAT8B/gUA
AT8B/wHCARwBGQGAAQEB/wHwAYABQAEAAQgBEAEPA/8BnwP/Af4FAAE/GP8BAQb/AYEM/wH4AUABDwv/
AfwBAAE/Cv8B/AFwAQABBwEfCv8B8AEAAQ8F/wGABP8B+AFwAQABBwEPCv8BgAEAAQME/wH8AQABHwP/
AfABcAEAAgcD/wH+AT4BPwT/AwAE/wH4AQABBwP/AeABcAEAAgcD/wH8ARwBHwP/Af4DAAF/A/8B4AEA
AQED/wHgAfABAAEHAYMD/wH8AQgBDwP/AfwDAAE/A/8BwAIAA/8BwAHwAQABBwGBA/8B+AEIAQcD/wH4
AwABHwP/AwABfwL/AcAB8AEAAQcBwQP/AeABAAEDA/8B8AECAQABYAEfAv8B/gMAAT8C/wGAAfABAAEH
AcAD/wHAAQABAQP/AfABBgEAAXABDwL/Af4CAAGAAT8C/wGAAfABAAEHAcAD/wGAAgAD/wHgAQYBAAFw
AQcC/wH8AgAB8AEfAv8BgAQAA/8DAAF/Av8B4AEOAQABeAEHAv8B/AEAAUAB8AEfAv8BgAQAAv8B/gMA
AT8C/wHgAQ4BAAFwAQcC/wH4AQEBAAH4AQ8C/wUAAv8B/gMAAT8C/wHAAQ4BAAFwAQMC/wH4AQYBAAH+
AQ8C/wUAAv8B/gEEAQABEAE/Av8BwAEOAQABcAEDAv8B8AIAAf4BDwH/Af4FAAE/Af8B/AEEAQABCAE/
Av8BgAEOAQABcAEBAv8B8AIAAf8BDwH/AfwFAAE/Af8B/gMAAT8C/wGBAQwBAAEwAQEC/wHwAQABAQH/
AQ8B/wH8BQABPwH/Af4DAAE/Av8BgQIAARABAQL/AfABEAEAAf8BjwH/AfwFAAE/Af8B/gMAAT8C/wGB
AwABAQL/AfABIAEAAf8BjwH/AfwFAAE/Av8DAAF/Av8BgQMAAYEC/wHwASABAAH/AY8B/wH+BQABPwL/
AYACAAF/Av8BgQEAAQYBAAGBAv8B8AEgAQAB/wGfAf8B/gUAAT8C/wHgAQABAQP/AYEBgAEAAQEBgQL/
AfABIAEAAf8BPwH/Af4FAAE/Av8B8AEAAQED/wGBAcABAAEDAYEC/wHwAgABfwE/Af8B/gEBAf8BgAEA
AUABPwL/AfgBAAEDA/8BgAHAAQACAwL/AfABEAEAAX8D/wEBAf8BAAF/AcABfwL/AfABAAEDA/8CwAEA
AQIBAwL/AfACAAF8A/8BAQH/AQABfwHAAX8C/wHgAQgBAQP/AcABRAEAASIBAwL/AfgCAAF4AX8C/wEB
Af8BAAH/AYABfwL/AcABHAEAA/8BwAFjAYABQAEDAv8B+AIAAXgBPwL/AQAB/wGBAf8BgAF/Av8BgAE+
AQAD/wHgASMBwwHAAQcC/wH8AQQBAAFwAR8C/wGAA/8BgAF/Av8BgAF/AQAD/wHgAQcBwwHAAQcC/wH+
AgABQAEfAv8BgAF/Av8BAAP/AcABPgEAA/8B8AEHAcMB4AEPAv8B/gMAAT8C/wHAAT8B/wH+AQAD/wHg
ARwBAQP/AfgBAwHDAYABHwL/Af4DAAE/Av8B4AE/Af8B/AEBA/8B8AEIAQMD/wH4AQABwwEAAR8D/wMA
AT8C/wHwAR8B/wH4AQMD/wH4AQgBBwP/AfwDAAE/A/8DAAE/Av8B+AEPAf8B8AEDA/8B/AEIAQ8D/wH+
AwABPwP/AYACAAF/Av8B/AEHAf8B8AEPA/8B/gEAAR8E/wMAAX8D/wHgAgAD/wH+AQMB/wHgAT8E/wEA
AT8E/wHAAQABAQT/AfABAAEBBP8BgQH/AYABfwT/AYABfwT/AfABAAEDBP8B/AEAAQ8E/wHgAf8BgQX/
AeMF/wH8AQABHwT/Af4BAAE/Bv8Bzwz/AQBs/ws=
================================================
FILE: src/EVEMon/BlankCharacterWindow.Designer.cs
================================================
namespace EVEMon.BlankCharacter
{
partial class BlankCharacterWindow
{
///
/// 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.buttonCancel = new System.Windows.Forms.Button();
this.buttonOK = new System.Windows.Forms.Button();
this.bottomPanel = new System.Windows.Forms.Panel();
this.blankCharacterControl = new EVEMon.BlankCharacter.BlankCharacterControl();
this.bottomPanel.SuspendLayout();
this.SuspendLayout();
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(412, 23);
this.buttonCancel.Margin = new System.Windows.Forms.Padding(3, 20, 20, 3);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 0;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
//
// buttonOK
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.Location = new System.Drawing.Point(331, 23);
this.buttonOK.Margin = new System.Windows.Forms.Padding(3, 20, 3, 3);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 1;
this.buttonOK.Text = "Import";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// bottomPanel
//
this.bottomPanel.BackColor = System.Drawing.SystemColors.ControlLight;
this.bottomPanel.Controls.Add(this.buttonCancel);
this.bottomPanel.Controls.Add(this.buttonOK);
this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.bottomPanel.Location = new System.Drawing.Point(0, 425);
this.bottomPanel.Name = "bottomPanel";
this.bottomPanel.Size = new System.Drawing.Size(497, 57);
this.bottomPanel.TabIndex = 2;
//
// blankCharacterControl
//
this.blankCharacterControl.AutoSize = true;
this.blankCharacterControl.BackColor = System.Drawing.Color.Transparent;
this.blankCharacterControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.blankCharacterControl.ForeColor = System.Drawing.SystemColors.GrayText;
this.blankCharacterControl.Location = new System.Drawing.Point(0, 0);
this.blankCharacterControl.Name = "blankCharacterControl";
this.blankCharacterControl.Padding = new System.Windows.Forms.Padding(13);
this.blankCharacterControl.Size = new System.Drawing.Size(497, 425);
this.blankCharacterControl.TabIndex = 3;
//
// BlankCharacterWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.SystemColors.Window;
this.ClientSize = new System.Drawing.Size(497, 482);
this.Controls.Add(this.blankCharacterControl);
this.Controls.Add(this.bottomPanel);
this.MaximizeBox = false;
this.Name = "BlankCharacterWindow";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Blank Character Creator";
this.Load += new System.EventHandler(this.BlankCharacterWindow_Load);
this.bottomPanel.ResumeLayout(false);
this.bottomPanel.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonCancel;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.Panel bottomPanel;
private BlankCharacterControl blankCharacterControl;
}
}
================================================
FILE: src/EVEMon/BlankCharacterWindow.cs
================================================
using System;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.Helpers;
namespace EVEMon.BlankCharacter
{
public partial class BlankCharacterWindow : EVEMonForm
{
#region Constructor
///
/// Initializes a new instance of the class.
///
public BlankCharacterWindow()
{
InitializeComponent();
}
#endregion
#region Inherited Event Handlers
///
/// Handles the Load event of the BlankCharacterWindow control.
///
/// The source of the event.
/// The instance containing the event data.
private void BlankCharacterWindow_Load(object sender, EventArgs e)
{
EveMonClient.TimerTick += EveMonClient_TimerTick;
Disposed += OnDisposed;
buttonOK.Text = "Save";
buttonOK.Enabled = false;
}
///
/// Called when the instance get disposed.
///
/// The sender.
/// The instance containing the event data.
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.TimerTick -= EveMonClient_TimerTick;
Disposed -= OnDisposed;
}
#endregion
#region Global Event Handlers
///
/// Handles the TimerTick event of the EveMonClient control.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
buttonOK.Enabled = !String.IsNullOrEmpty(BlankCharacterUIHelper.CharacterName);
AcceptButton = buttonOK.Enabled ? buttonOK : buttonCancel;
}
#endregion
#region Control Handlers
///
/// Handles the Click event of the buttonOK control.
///
/// The source of the event.
/// The instance containing the event data.
private async void buttonOK_Click(object sender, EventArgs e)
{
// Three choices for one button
switch (buttonOK.DialogResult)
{
// Save blank character
case DialogResult.None:
await BlankCharacterUIHelper.SaveAsync(OnCharacterSaved);
break;
// Add blank character
case DialogResult.OK:
await BlankCharacterUIHelper.AddBlankCharacterAsync(OnCharacterImported);
break;
}
}
///
/// Handles the Click event of the buttonCancel control.
///
/// The source of the event.
/// The instance containing the event data.
private void buttonCancel_Click(object sender, EventArgs e)
{
Close();
}
#endregion
#region Callback Methods
///
/// Called when character is saved.
///
private void OnCharacterSaved()
{
buttonOK.Text = "Import";
buttonOK.DialogResult = DialogResult.OK;
// Disabling control editing
blankCharacterControl.Enabled = false;
}
///
/// Called when character is imported.
///
private void OnCharacterImported()
{
Close();
}
#endregion
}
}
================================================
FILE: src/EVEMon/BlankCharacterWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: src/EVEMon/CharacterMonitoring/AssetsColumnsSelectWindow.cs
================================================
using System.Collections.Generic;
using System.Linq;
using EVEMon.Common.Controls;
using EVEMon.Common.Extensions;
using EVEMon.Common.SettingsObjects;
namespace EVEMon.CharacterMonitoring
{
public sealed class AssetsColumnsSelectWindow : ColumnSelectWindow
{
///
/// Initializes a new instance of the class.
///
/// The settings.
public AssetsColumnsSelectWindow(IEnumerable settings)
: base(settings)
{
}
///
/// Gets the header.
///
/// The key.
///
protected override string GetHeader(int key) => ((AssetColumn)key).GetDescription();
///
/// Gets all keys.
///
///
protected override IEnumerable AllKeys
=> EnumExtensions.GetValues()
.Where(x => x != AssetColumn.None).Select(x => (int)x);
///
/// Gets the default columns.
///
///
protected override IEnumerable DefaultColumns
{
get
{
AssetSettings settings = new AssetSettings();
return settings.DefaultColumns;
}
}
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterAssetsList.Designer.cs
================================================
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterAssetsList
{
///
/// 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(CharacterAssetsList));
this.noAssetsLabel = new System.Windows.Forms.Label();
this.lvAssets = new System.Windows.Forms.ListView();
this.chItem = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chQuantity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chVolume = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chGroup = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chCategory = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.exportToCSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ilIcons = new System.Windows.Forms.ImageList(this.components);
this.noPricesFoundLabel = new System.Windows.Forms.Label();
this.lblTotalCost = new System.Windows.Forms.Label();
this.totalCostThrobber = new EVEMon.Common.Controls.Throbber();
this.estimatedCostPanel = new System.Windows.Forms.Panel();
this.throbber = new EVEMon.Common.Controls.Throbber();
this.showInBrowserMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.showInBrowserMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.totalCostThrobber)).BeginInit();
this.estimatedCostPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.throbber)).BeginInit();
this.SuspendLayout();
//
// noAssetsLabel
//
this.noAssetsLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noAssetsLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noAssetsLabel.Location = new System.Drawing.Point(0, 0);
this.noAssetsLabel.Name = "noAssetsLabel";
this.noAssetsLabel.Size = new System.Drawing.Size(472, 401);
this.noAssetsLabel.TabIndex = 3;
this.noAssetsLabel.Text = "No assets are available.";
this.noAssetsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lvAssets
//
this.lvAssets.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvAssets.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chItem,
this.chQuantity,
this.chVolume,
this.chGroup,
this.chCategory});
this.lvAssets.ContextMenuStrip = this.contextMenu;
this.lvAssets.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvAssets.FullRowSelect = true;
this.lvAssets.HideSelection = false;
this.lvAssets.Location = new System.Drawing.Point(0, 0);
this.lvAssets.Name = "lvAssets";
this.lvAssets.Size = new System.Drawing.Size(472, 401);
this.lvAssets.SmallImageList = this.ilIcons;
this.lvAssets.TabIndex = 3;
this.lvAssets.UseCompatibleStateImageBehavior = false;
this.lvAssets.View = System.Windows.Forms.View.Details;
//
// chItem
//
this.chItem.Text = "Item";
this.chItem.Width = 166;
//
// chQuantity
//
this.chQuantity.Text = "Quantity";
this.chQuantity.Width = 72;
//
// chVolume
//
this.chVolume.Text = "Volume";
this.chVolume.Width = 74;
//
// chGroup
//
this.chGroup.Text = "Group";
this.chGroup.Width = 80;
//
// chCategory
//
this.chCategory.Text = "Category";
//
// contextMenu
//
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.showInBrowserMenuItem,
this.showInBrowserMenuSeparator,
this.exportToCSVToolStripMenuItem});
this.contextMenu.Name = "ItemAttributeContextMenu";
this.contextMenu.Size = new System.Drawing.Size(171, 76);
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenu_Opening);
//
// exportToCSVToolStripMenuItem
//
this.exportToCSVToolStripMenuItem.Name = "exportToCSVToolStripMenuItem";
this.exportToCSVToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
this.exportToCSVToolStripMenuItem.Text = "Export to CSV...";
this.exportToCSVToolStripMenuItem.Click += new System.EventHandler(this.exportToCSVToolStripMenuItem_Click);
//
// ilIcons
//
this.ilIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilIcons.ImageStream")));
this.ilIcons.TransparentColor = System.Drawing.Color.Transparent;
this.ilIcons.Images.SetKeyName(0, "arrow_up.png");
this.ilIcons.Images.SetKeyName(1, "arrow_down.png");
this.ilIcons.Images.SetKeyName(2, "16x16Transparant.png");
//
// noPricesFoundLabel
//
this.noPricesFoundLabel.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.noPricesFoundLabel.AutoSize = true;
this.noPricesFoundLabel.ForeColor = System.Drawing.Color.DarkRed;
this.noPricesFoundLabel.Location = new System.Drawing.Point(258, 9);
this.noPricesFoundLabel.Name = "noPricesFoundLabel";
this.noPricesFoundLabel.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.noPricesFoundLabel.Size = new System.Drawing.Size(208, 13);
this.noPricesFoundLabel.TabIndex = 1;
this.noPricesFoundLabel.Text = "* Prices for some items could not be found.";
this.noPricesFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// lblTotalCost
//
this.lblTotalCost.AutoSize = true;
this.lblTotalCost.Location = new System.Drawing.Point(3, 9);
this.lblTotalCost.Name = "lblTotalCost";
this.lblTotalCost.Size = new System.Drawing.Size(207, 13);
this.lblTotalCost.TabIndex = 0;
this.lblTotalCost.Text = "Estimated Cost of shown items: {0:N2} ISK";
this.lblTotalCost.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// totalCostThrobber
//
this.totalCostThrobber.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.totalCostThrobber.Location = new System.Drawing.Point(442, 4);
this.totalCostThrobber.MaximumSize = new System.Drawing.Size(24, 24);
this.totalCostThrobber.MinimumSize = new System.Drawing.Size(24, 24);
this.totalCostThrobber.Name = "totalCostThrobber";
this.totalCostThrobber.Size = new System.Drawing.Size(24, 24);
this.totalCostThrobber.State = EVEMon.Common.Enumerations.ThrobberState.Stopped;
this.totalCostThrobber.TabIndex = 3;
this.totalCostThrobber.TabStop = false;
this.totalCostThrobber.Visible = false;
//
// estimatedCostPanel
//
this.estimatedCostPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.estimatedCostPanel.Controls.Add(this.lblTotalCost);
this.estimatedCostPanel.Controls.Add(this.noPricesFoundLabel);
this.estimatedCostPanel.Controls.Add(this.totalCostThrobber);
this.estimatedCostPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
this.estimatedCostPanel.Location = new System.Drawing.Point(0, 401);
this.estimatedCostPanel.Name = "estimatedCostPanel";
this.estimatedCostPanel.Size = new System.Drawing.Size(472, 33);
this.estimatedCostPanel.TabIndex = 5;
//
// throbber
//
this.throbber.Anchor = System.Windows.Forms.AnchorStyles.None;
this.throbber.Location = new System.Drawing.Point(229, 205);
this.throbber.MaximumSize = new System.Drawing.Size(24, 24);
this.throbber.MinimumSize = new System.Drawing.Size(24, 24);
this.throbber.Name = "throbber";
this.throbber.Size = new System.Drawing.Size(24, 24);
this.throbber.State = EVEMon.Common.Enumerations.ThrobberState.Stopped;
this.throbber.TabIndex = 6;
this.throbber.TabStop = false;
this.throbber.Visible = false;
//
// showInBrowserMenuSeparator
//
this.showInBrowserMenuSeparator.Name = "showInBrowserMenuSeparator";
this.showInBrowserMenuSeparator.Size = new System.Drawing.Size(167, 6);
//
// showInBrowserMenuItem
//
this.showInBrowserMenuItem.Name = "showInBrowserMenuItem";
this.showInBrowserMenuItem.Size = new System.Drawing.Size(170, 22);
this.showInBrowserMenuItem.Text = "Show In Browser...";
this.showInBrowserMenuItem.Click += new System.EventHandler(this.showInBrowserMenuItem_Click);
//
// CharacterAssetsList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lvAssets);
this.Controls.Add(this.throbber);
this.Controls.Add(this.noAssetsLabel);
this.Controls.Add(this.estimatedCostPanel);
this.Name = "CharacterAssetsList";
this.Size = new System.Drawing.Size(472, 434);
this.contextMenu.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.totalCostThrobber)).EndInit();
this.estimatedCostPanel.ResumeLayout(false);
this.estimatedCostPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.throbber)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noAssetsLabel;
private System.Windows.Forms.ListView lvAssets;
private System.Windows.Forms.ColumnHeader chItem;
private System.Windows.Forms.ColumnHeader chQuantity;
private System.Windows.Forms.ColumnHeader chVolume;
private System.Windows.Forms.ColumnHeader chGroup;
private System.Windows.Forms.ColumnHeader chCategory;
private System.Windows.Forms.ImageList ilIcons;
private System.Windows.Forms.ContextMenuStrip contextMenu;
private System.Windows.Forms.ToolStripMenuItem exportToCSVToolStripMenuItem;
private System.Windows.Forms.Label lblTotalCost;
private System.Windows.Forms.Label noPricesFoundLabel;
private Common.Controls.Throbber totalCostThrobber;
private System.Windows.Forms.Panel estimatedCostPanel;
private Common.Controls.Throbber throbber;
private System.Windows.Forms.ToolStripMenuItem showInBrowserMenuItem;
private System.Windows.Forms.ToolStripSeparator showInBrowserMenuSeparator;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterAssetsList.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Collections;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Data;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.UISettings;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Interfaces;
using EVEMon.Common.Models;
using EVEMon.Common.Models.Comparers;
using EVEMon.Common.SettingsObjects;
using EVEMon.SkillPlanner;
using Region = EVEMon.Common.Data.Region;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterAssetsList : UserControl, IListView
{
#region Fields
private readonly List m_columns = new List();
private readonly List m_list = new List();
private InfiniteDisplayToolTip m_tooltip;
private AssetGrouping m_grouping;
private AssetColumn m_sortCriteria;
private string m_textFilter = string.Empty;
private string m_totalCostLabelDefaultText;
private bool m_sortAscending = true;
private bool m_columnsChanged;
private bool m_isUpdatingColumns;
private bool m_init;
#endregion
#region Constructor
///
/// Constructor.
///
public CharacterAssetsList()
{
InitializeComponent();
lvAssets.Visible = false;
lvAssets.AllowColumnReorder = true;
lvAssets.Columns.Clear();
estimatedCostPanel.Hide();
noPricesFoundLabel.Hide();
noAssetsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
ListViewHelper.EnableDoubleBuffer(lvAssets);
lvAssets.KeyDown += listView_KeyDown;
lvAssets.ColumnClick += listView_ColumnClick;
lvAssets.ColumnWidthChanged += listView_ColumnWidthChanged;
lvAssets.ColumnReordered += listView_ColumnReordered;
lvAssets.MouseDown += listView_MouseDown;
lvAssets.MouseMove += listView_MouseMove;
lvAssets.MouseLeave += listView_MouseLeave;
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets the text filter.
///
[Browsable(false)]
public string TextFilter
{
get { return m_textFilter; }
set
{
m_textFilter = value;
if (m_init)
Task.WhenAll(UpdateColumnsAsync());
}
}
///
/// Gets or sets the enumeration of assets to display.
///
private IEnumerable Assets
{
get { return m_list; }
set
{
m_list.Clear();
if (value == null)
return;
m_list.AddRange(value);
}
}
///
/// Gets or sets the grouping of a listview.
///
///
[Browsable(false)]
public Enum Grouping
{
get { return m_grouping; }
set
{
m_grouping = (AssetGrouping)value;
if (m_init)
Task.WhenAll(UpdateColumnsAsync());
}
}
///
/// Gets or sets the settings used for columns.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable Columns
{
get
{
// Add the visible columns; matching the display order
List newColumns = new List();
foreach (ColumnHeader header in lvAssets.Columns.Cast().OrderBy(x => x.DisplayIndex))
{
AssetColumnSettings columnSetting = m_columns.First(x => x.Column == (AssetColumn)header.Tag);
if (columnSetting.Width > -1)
columnSetting.Width = header.Width;
newColumns.Add(columnSetting);
}
// Then add the other columns
newColumns.AddRange(m_columns.Where(x => !x.Visible));
return newColumns;
}
set
{
m_columns.Clear();
if (value != null)
m_columns.AddRange(value.Cast());
if (m_init)
Task.WhenAll(UpdateColumnsAsync());
}
}
#endregion
# region Inherited Events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
m_totalCostLabelDefaultText = lblTotalCost.Text;
m_tooltip = new InfiniteDisplayToolTip(lvAssets);
EveMonClient.TimerTick += EveMonClient_TimerTick;
EveMonClient.CharacterAssetsUpdated += EveMonClient_CharacterAssetsUpdated;
EveMonClient.CharacterInfoUpdated += EveMonClient_CharacterInfoUpdated;
EveMonClient.ConquerableStationListUpdated += EveMonClient_ConquerableStationListUpdated;
EveMonClient.EveFlagsUpdated += EveMonClient_EveFlagsUpdated;
EveMonClient.SettingsChanged += EveMonClient_SettingsChanged;
EveMonClient.ItemPricesUpdated += EveMonClient_ItemPricesUpdated;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
m_tooltip.Dispose();
EveMonClient.TimerTick -= EveMonClient_TimerTick;
EveMonClient.CharacterAssetsUpdated -= EveMonClient_CharacterAssetsUpdated;
EveMonClient.CharacterInfoUpdated -= EveMonClient_CharacterInfoUpdated;
EveMonClient.ConquerableStationListUpdated -= EveMonClient_ConquerableStationListUpdated;
EveMonClient.EveFlagsUpdated -= EveMonClient_EveFlagsUpdated;
EveMonClient.SettingsChanged -= EveMonClient_SettingsChanged;
EveMonClient.ItemPricesUpdated -= EveMonClient_ItemPricesUpdated;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override async void OnVisibleChanged(EventArgs e)
{
if (DesignMode || this.IsDesignModeHosted() || Character == null)
return;
base.OnVisibleChanged(e);
if (!Visible)
return;
// Prevents the properties to call UpdateColumnsAsync() till we set all properties
m_init = false;
lvAssets.Hide();
estimatedCostPanel.Hide();
noAssetsLabel.Visible = Character?.Assets.Count == 0;
Assets = Character?.Assets;
Columns = Settings.UI.MainWindow.Assets.Columns;
Grouping = Character?.UISettings.AssetsGroupBy;
TextFilter = string.Empty;
await UpdateColumnsAsync();
m_init = true;
UpdateListVisibility();
}
# endregion
#region Update Methods
///
/// Autoresizes the columns.
///
public void AutoResizeColumns()
{
m_columns.ForEach(column =>
{
if (column.Visible)
column.Width = -2;
});
UpdateColumnsAsync().ConfigureAwait(false);
}
///
/// Updates the columns.
///
internal async Task UpdateColumnsAsync()
{
// Returns if not visible
if (!Visible)
return;
lvAssets.BeginUpdate();
m_isUpdatingColumns = true;
lvAssets.Hide();
noAssetsLabel.Hide();
lvAssets.Columns.Clear();
lvAssets.Groups.Clear();
lvAssets.Items.Clear();
try
{
throbber.Show();
throbber.State = ThrobberState.Rotating;
AddColumns();
// We update the content
await UpdateContentAsync();
throbber.State = ThrobberState.Stopped;
throbber.Hide();
}
finally
{
lvAssets.EndUpdate();
m_isUpdatingColumns = false;
}
}
///
/// Adds the columns.
///
private void AddColumns()
{
foreach (AssetColumnSettings column in m_columns.Where(x => x.Visible))
{
ColumnHeader header = lvAssets.Columns.Add(column.Column.GetHeader(), column.Width);
header.Tag = column.Column;
switch (column.Column)
{
case AssetColumn.UnitaryPrice:
case AssetColumn.TotalPrice:
case AssetColumn.Quantity:
case AssetColumn.Volume:
header.TextAlign = HorizontalAlignment.Right;
break;
}
}
}
///
/// Updates the content of the listview.
///
private async Task UpdateContentAsync()
{
// Returns if not visible
if (!Visible)
return;
int scrollBarPosition = lvAssets.GetVerticalScrollBarPosition();
// Store the selected item (if any) to restore it after the update
int selectedItem = lvAssets.SelectedItems.Count > 0 ? lvAssets.SelectedItems[0].
Tag.GetHashCode() : 0;
lvAssets.BeginUpdate();
try
{
List assets;
lock (m_list)
{
assets = m_list.Where(x => x.Item != null && x.SolarSystem != null).
Where(x => IsTextMatching(x, m_textFilter)).ToList();
}
UpdateSort();
await UpdateContentByGroupAsync(assets);
await UpdateItemsCostAsync(assets);
// Adjust the size of the columns
AdjustColumns();
UpdateListVisibility();
// Restore the selected item (if any)
if (selectedItem > 0)
{
foreach (ListViewItem lvItem in lvAssets.Items.Cast().Where(
lvItem => lvItem.Tag.GetHashCode() == selectedItem))
{
lvItem.Selected = true;
}
}
}
finally
{
lvAssets.EndUpdate();
lvAssets.SetVerticalScrollBarPosition(scrollBarPosition);
}
}
///
/// Updates the items cost.
///
/// The assets.
private async Task UpdateItemsCostAsync(IList assets)
{
lblTotalCost.Text = string.Format(CultureConstants.DefaultCulture,
m_totalCostLabelDefaultText, await TaskHelper.RunCPUBoundTaskAsync(() =>
assets.Sum(asset => asset.Price * asset.Quantity)));
if (!totalCostThrobber.Visible && !Settings.MarketPricer.Pricer.Queried)
{
noPricesFoundLabel.Hide();
totalCostThrobber.Show();
totalCostThrobber.State = ThrobberState.Rotating;
return;
}
totalCostThrobber.State = ThrobberState.Stopped;
totalCostThrobber.Hide();
noPricesFoundLabel.Visible = await TaskHelper.RunCPUBoundTaskAsync(() =>
assets.Where(asset => asset.TypeOfBlueprint != BlueprintType.Copy.ToString()).
Any(asset => Math.Abs(asset.Price) < double.Epsilon));
}
///
/// Updates the list visibility.
///
private void UpdateListVisibility()
{
// Display or hide the "no assets" label
if (!m_init)
return;
noAssetsLabel.Visible = lvAssets.Items.Count == 0;
estimatedCostPanel.Visible = !noAssetsLabel.Visible;
lvAssets.Visible = !noAssetsLabel.Visible;
}
///
/// Updates the content by group.
///
/// The assets.
private async Task UpdateContentByGroupAsync(IEnumerable assets)
{
switch (m_grouping)
{
case AssetGrouping.None:
await UpdateNoGroupContentAsync(assets);
break;
case AssetGrouping.Group:
IOrderedEnumerable> groups1 =
assets.GroupBy(x => x.Item.GroupName).OrderBy(x => x.Key);
await UpdateContentAsync(groups1);
break;
case AssetGrouping.GroupDesc:
IOrderedEnumerable> groups2 =
assets.GroupBy(x => x.Item.GroupName).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups2);
break;
case AssetGrouping.Category:
IOrderedEnumerable> groups3 =
assets.GroupBy(x => x.Item.CategoryName).OrderBy(x => x.Key);
await UpdateContentAsync(groups3);
break;
case AssetGrouping.CategoryDesc:
IOrderedEnumerable> groups4 =
assets.GroupBy(x => x.Item.CategoryName).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups4);
break;
case AssetGrouping.Container:
IOrderedEnumerable> groups5 =
assets.GroupBy(x => x.Container).OrderBy(x => x.Key);
await UpdateContentAsync(groups5);
break;
case AssetGrouping.ContainerDesc:
IOrderedEnumerable> groups6 =
assets.GroupBy(x => x.Container).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups6);
break;
case AssetGrouping.Location:
IOrderedEnumerable> groups7 =
assets.GroupBy(x => x.Location).OrderBy(x => x.Key);
await UpdateContentAsync(groups7);
break;
case AssetGrouping.LocationDesc:
IOrderedEnumerable> groups8 =
assets.GroupBy(x => x.Location).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups8);
break;
case AssetGrouping.Region:
IOrderedEnumerable> groups9 =
assets.GroupBy(x => x.SolarSystem.Constellation.Region).OrderBy(x => x.Key);
await UpdateContentAsync(groups9);
break;
case AssetGrouping.RegionDesc:
IOrderedEnumerable> groups10 =
assets.GroupBy(x => x.SolarSystem.Constellation.Region).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups10);
break;
case AssetGrouping.Jumps:
IOrderedEnumerable> groups11 =
assets.GroupBy(x => x.Jumps).OrderBy(x => x.Key);
await UpdateContentAsync(groups11);
break;
case AssetGrouping.JumpsDesc:
IOrderedEnumerable> groups12 =
assets.GroupBy(x => x.Jumps).OrderByDescending(x => x.Key);
await UpdateContentAsync(groups12);
break;
}
}
///
/// Updates the content of the listview.
///
/// The assets.
private Task UpdateNoGroupContentAsync(IEnumerable assets)
=> TaskHelper.RunCPUBoundTaskAsync(() =>
{
return assets.Select(asset => new
{
asset,
item = new ListViewItem(asset.Item.Name)
{
UseItemStyleForSubItems = false,
Tag = asset
}
}).Select(x => CreateSubItems(x.asset, x.item)).ToArray();
}).ContinueWith(task =>
{
lvAssets.Groups.Clear();
lvAssets.Items.Clear();
lvAssets.Items.AddRange(task.Result);
}, EveMonClient.CurrentSynchronizationContext);
///
/// Updates the content of the listview.
///
///
///
private Task UpdateContentAsync(IEnumerable> groups)
=> TaskHelper.RunCPUBoundTaskAsync(() =>
{
var listOfGroups = new List();
var listOfItems = new List();
// Add the groups
foreach (IGrouping group in groups)
{
string groupText;
if (@group.Key is int) // Really ugly way but couldn't figured another way
groupText = @group.First().JumpsText;
else
groupText = @group.Key?.ToString() ?? string.Empty;
ListViewGroup listGroup = new ListViewGroup(groupText);
listOfGroups.Add(listGroup);
ListViewItem[] items = @group.Select(asset => new
{
asset,
item = new ListViewItem(asset.Item.Name, listGroup)
{
UseItemStyleForSubItems = false,
Tag = asset
}
}).Select(x => CreateSubItems(x.asset, x.item)).ToArray();
listOfItems.AddRange(items);
}
return new Tuple(listOfGroups.ToArray(), listOfItems.ToArray());
}).ContinueWith(task =>
{
lvAssets.Items.Clear();
lvAssets.Groups.Clear();
lvAssets.Groups.AddRange(task.Result.Item1);
lvAssets.Items.AddRange(task.Result.Item2);
}, EveMonClient.CurrentSynchronizationContext);
///
/// Creates the list view sub items.
///
/// The asset.
/// The item.
private ListViewItem CreateSubItems(Asset asset, ListViewItem item)
{
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvAssets.Columns.Count + 1)
{
item.SubItems.Add(string.Empty);
}
// Creates the subitems
for (int i = 0; i < lvAssets.Columns.Count; i++)
{
SetColumn(asset, item.SubItems[i], (AssetColumn)lvAssets.Columns[i].Tag);
}
return item;
}
///
/// Adjusts the columns.
///
private void AdjustColumns()
{
foreach (ColumnHeader column in lvAssets.Columns)
{
if (m_columns[column.Index].Width == -1)
m_columns[column.Index].Width = -2;
column.Width = m_columns[column.Index].Width;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column and not set to auto-resize
if (column.Index != lvAssets.Columns.Count - 1 || m_columns[column.Index].Width != -2)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (lvAssets.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += lvAssets.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
///
/// Updates the item sorter.
///
private void UpdateSort()
{
lvAssets.ListViewItemSorter = new ListViewItemComparerByTag(
new AssetComparer(m_sortCriteria, m_sortAscending));
UpdateSortVisualFeedback();
}
///
/// Updates the sort feedback (the arrow on the header).
///
private void UpdateSortVisualFeedback()
{
foreach (ColumnHeader columnHeader in lvAssets.Columns.Cast())
{
AssetColumn column = (AssetColumn)columnHeader.Tag;
if (m_sortCriteria == column)
columnHeader.ImageIndex = m_sortAscending ? 0 : 1;
else
columnHeader.ImageIndex = 2;
}
}
///
/// Updates the listview sub-item.
///
///
///
///
private static void SetColumn(Asset asset, ListViewItem.ListViewSubItem item, AssetColumn column)
{
bool numberFormat = Settings.UI.MainWindow.Assets.NumberAbsFormat;
switch (column)
{
case AssetColumn.ItemName:
item.Text = asset.Item.Name;
break;
case AssetColumn.Quantity:
item.Text = numberFormat
? FormatHelper.Format(asset.Quantity, AbbreviationFormat.AbbreviationSymbols)
: asset.Quantity.ToNumericString(0);
break;
case AssetColumn.UnitaryPrice:
item.Text = numberFormat
? FormatHelper.Format(asset.Price, AbbreviationFormat.AbbreviationSymbols)
: asset.Price.ToNumericString(2);
break;
case AssetColumn.TotalPrice:
item.Text = numberFormat
? FormatHelper.Format(asset.Cost, AbbreviationFormat.AbbreviationSymbols)
: asset.Cost.ToNumericString(2);
break;
case AssetColumn.Volume:
item.Text = numberFormat
? FormatHelper.Format(asset.TotalVolume, AbbreviationFormat.AbbreviationSymbols)
: asset.TotalVolume.ToNumericString(2);
break;
case AssetColumn.BlueprintType:
item.Text = asset.TypeOfBlueprint;
break;
case AssetColumn.Group:
item.Text = asset.Item.GroupName;
break;
case AssetColumn.Category:
item.Text = asset.Item.CategoryName;
break;
case AssetColumn.Container:
item.Text = asset.Container;
break;
case AssetColumn.Flag:
item.Text = asset.Flag;
break;
case AssetColumn.Location:
item.Text = asset.Location;
item.ForeColor = asset.SolarSystem.SecurityLevelColor;
break;
case AssetColumn.Region:
item.Text = asset.SolarSystem.Constellation.Region.Name;
break;
case AssetColumn.SolarSystem:
item.Text = asset.SolarSystem.Name;
item.ForeColor = asset.SolarSystem.SecurityLevelColor;
break;
case AssetColumn.FullLocation:
item.Text = asset.FullLocation;
break;
case AssetColumn.Jumps:
item.Text = asset.JumpsText;
break;
default:
throw new NotImplementedException();
}
}
#endregion
#region Helper Methods
///
/// Checks the given text matches the item.
///
/// The x.
/// The text.
///
/// true if [is text matching] [the specified x]; otherwise, false.
///
private static bool IsTextMatching(Asset x, string text) => string.IsNullOrEmpty(text) ||
((x.Item?.ID ?? 0) != 0 && (x.Item.Name.Contains(text, true) ||
x.Item.GroupName.Contains(text, true) ||
x.Item.CategoryName.Contains(text, true) ||
x.TypeOfBlueprint.Contains(text, true))) ||
x.Container.Contains(text, true) ||
x.Flag.Contains(text, true) ||
x.Location.Contains(text, true) ||
((x.SolarSystem?.ID ?? 0) != 0 &&
(x.SolarSystem.Name.Contains(text, true) ||
x.SolarSystem.Constellation.Name.Contains(text, true) ||
x.SolarSystem.Constellation.Region.Name.Contains(text, true)));
///
/// Gets the tool tip text.
///
/// The item.
///
private string GetToolTipText(ListViewItem item)
{
if (!item.Selected || lvAssets.SelectedItems.Count < 2)
return string.Empty;
List selectedItems = lvAssets.SelectedItems.Cast().ToList();
if (selectedItems.Any(selectedItem => selectedItem.Text != item.Text))
return string.Empty;
List selectedAssets = selectedItems.Select(selectedItem => selectedItem.Tag).OfType().ToList();
long sumQuantity = selectedAssets.Sum(selectedAsset => selectedAsset.Quantity);
double sumVolume = selectedAssets.Sum(selectedAsset => selectedAsset.TotalVolume);
int uniqueLocations = selectedAssets.Select(asset => asset.Location).Distinct().Count();
int minJumps = selectedAssets.Min(asset => asset.Jumps);
int maxJumps = selectedAssets.Max(asset => asset.Jumps);
Asset closestAsset = selectedAssets.First(asset => asset.Jumps == minJumps);
Asset farthestAsset = selectedAssets.Last(asset => asset.Jumps == maxJumps);
StringBuilder builder = new StringBuilder();
builder.Append($"{item.Text} ({selectedAssets.First().Volume:N2} m³)")
.AppendLine()
.Append($"Total Quantity: {sumQuantity:N0} in {uniqueLocations:N0} " +
$"{(uniqueLocations > 1 ? "different " : string.Empty)}location{uniqueLocations.S()}")
.AppendLine()
.Append($"Total Volume: {sumVolume:N2} m³")
.AppendLine()
.Append($"Closest Location: {closestAsset.Location} ({closestAsset.JumpsText})")
.AppendLine();
if (closestAsset.Location != farthestAsset.Location)
builder.Append($"Farthest Location: {farthestAsset.Location} ({farthestAsset.JumpsText})");
return builder.ToString();
}
///
/// Updates the asset location.
///
private async Task UpdateAssetLocationAsync()
{
// Invoke it on a worker thread cause it may be time intensive
// if character owns many stuff in several locations
await TaskHelper.RunCPUBoundTaskAsync(() =>
{
Character.Assets.UpdateLocation();
lock (m_list)
{
Assets = Character.Assets;
}
});
await UpdateColumnsAsync();
}
#endregion
#region Local Event Handlers
///
/// Exports item info to CSV format.
///
///
///
private void exportToCSVToolStripMenuItem_Click(object sender, EventArgs e)
{
ListViewExporter.CreateCSV(lvAssets);
}
///
/// On column reorder we update the settings.
///
///
///
private void listView_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
m_columnsChanged = true;
}
///
/// When the user manually resizes a column, we make sure to update the column preferences.
///
///
///
private void listView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (m_isUpdatingColumns || m_columns.Count <= e.ColumnIndex)
return;
if (m_columns[e.ColumnIndex].Width == lvAssets.Columns[e.ColumnIndex].Width)
return;
m_columns[e.ColumnIndex].Width = lvAssets.Columns[e.ColumnIndex].Width;
m_columnsChanged = true;
}
///
/// When the user clicks a column header, we update the sorting.
///
///
///
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
AssetColumn column = (AssetColumn)lvAssets.Columns[e.Column].Tag;
if (m_sortCriteria == column)
m_sortAscending = !m_sortAscending;
else
{
m_sortCriteria = column;
m_sortAscending = true;
}
m_isUpdatingColumns = true;
// Updates the item sorter
UpdateSort();
m_isUpdatingColumns = false;
}
///
/// When the mouse gets pressed, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
return;
lvAssets.Cursor = Cursors.Default;
}
///
/// When the mouse moves over the list, we show the item's tooltip if over an item.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
return;
lvAssets.Cursor = CustomCursors.ContextMenu;
ListViewItem item = lvAssets.GetItemAt(e.Location.X, e.Location.Y);
if (item == null)
{
m_tooltip.Hide();
return;
}
m_tooltip.Show(GetToolTipText(item), e.Location);
}
///
/// When the mouse leaves the list, we hide the item's tooltip.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseLeave(object sender, EventArgs e)
{
m_tooltip.Hide();
}
///
/// Handles key press.
///
///
///
private void listView_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.A:
if (e.Control)
lvAssets.SelectAll();
break;
}
}
///
/// Handles the Opening event of the contextMenu control.
///
/// The source of the event.
/// The instance containing the event data.
private void contextMenu_Opening(object sender, CancelEventArgs e)
{
bool visible = lvAssets.SelectedItems.Count > 0 &&
lvAssets.SelectedItems
.Cast()
.All(item => item != null &&
item.Text == ((Asset)lvAssets.SelectedItems[0]?.Tag)?.Item.Name);
showInBrowserMenuItem.Visible =
showInBrowserMenuSeparator.Visible = visible;
if (!visible)
return;
Asset asset = lvAssets.SelectedItems[0]?.Tag as Asset;
if (asset?.Item == null)
return;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(asset.Item.ID);
Ship ship = asset.Item as Ship;
Skill skill = Character.Skills[asset.Item.ID];
if (skill == Skill.UnknownSkill)
skill = null;
string text = ship != null ? "Ship" : blueprint != null ? "Blueprint" : skill != null ? "Skill" : "Item";
showInBrowserMenuItem.Text = $"Show In {text} Browser...";
}
///
/// Handles the Click event of the showInBrowserMenuItem control.
///
/// The source of the event.
/// The instance containing the event data.
private void showInBrowserMenuItem_Click(object sender, EventArgs e)
{
Asset asset = lvAssets.SelectedItems[0]?.Tag as Asset;
if (asset?.Item == null)
return;
Ship ship = asset.Item as Ship;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(asset.Item.ID);
Skill skill = Character.Skills[asset.Item.ID];
if (skill == Skill.UnknownSkill)
skill = null;
PlanWindow planWindow = PlanWindow.ShowPlanWindow(Character);
if (ship != null)
planWindow.ShowShipInBrowser(ship);
else if (blueprint != null)
planWindow.ShowBlueprintInBrowser(blueprint);
else if (skill != null)
planWindow.ShowSkillInBrowser(skill);
else
planWindow.ShowItemInBrowser(asset.Item);
}
# endregion
#region Global Events
///
/// On timer tick, we update the column settings if any changes have been made to them.
///
///
///
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
if (!Visible || !m_columnsChanged)
return;
Settings.UI.MainWindow.Assets.Columns.Clear();
Settings.UI.MainWindow.Assets.Columns.AddRange(Columns.Cast());
// Recreate the columns
Columns = Settings.UI.MainWindow.Assets.Columns;
m_columnsChanged = false;
}
///
/// When the assets update, update the list.
///
///
///
private async void EveMonClient_CharacterAssetsUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
Assets = Character.Assets;
await UpdateContentAsync();
}
///
/// When the conquerable station list updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private async void EveMonClient_ConquerableStationListUpdated(object sender, EventArgs e)
{
if (Character == null)
return;
await UpdateAssetLocationAsync();
}
///
/// When the eve flags updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private async void EveMonClient_EveFlagsUpdated(object sender, EventArgs e)
{
if (Character == null)
return;
await UpdateContentAsync();
}
///
/// When the character info updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
/// Mainly to update the jumps from charater last known location to assets.
private async void EveMonClient_CharacterInfoUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
await UpdateAssetLocationAsync();
}
///
/// Handles the SettingsChanged event of the EveMonClient control.
///
/// The source of the event.
/// The instance containing the event data.
private async void EveMonClient_SettingsChanged(object sender, EventArgs e)
{
// No need to do this if control is not visible
if (!Visible)
return;
await UpdateContentAsync();
}
///
/// Occurs when the item prices get updated.
///
/// The source of the event.
/// The instance containing the event data.
private async void EveMonClient_ItemPricesUpdated(object sender, EventArgs e)
{
await UpdateContentAsync();
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterAssetsList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
103, 17
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
AAAAAk1TRnQBSQFMAgEBAwEAAfQBBQH0AQUBEAEAARABAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEQBgABCP8A/wD/AP8A/wD/AP8A/wAaAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
AQABAQUAAYAXAAP/AQAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAB8AEPAf4BfwL/AgAB+AEfAfwBPwL/
AgAB/AE/AfgBHwL/AgAB/gF/AfABDwL/AgAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAL
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContactList.Designer.cs
================================================
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterContactList
{
///
/// 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.noContactsLabel = new System.Windows.Forms.Label();
this.lbContacts = new EVEMon.Common.Controls.NoFlickerListBox();
this.SuspendLayout();
//
// noContactsLabel
//
this.noContactsLabel.BackColor = System.Drawing.Color.WhiteSmoke;
this.noContactsLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noContactsLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noContactsLabel.Location = new System.Drawing.Point(0, 0);
this.noContactsLabel.Name = "noContactsLabel";
this.noContactsLabel.Size = new System.Drawing.Size(328, 372);
this.noContactsLabel.TabIndex = 3;
this.noContactsLabel.Text = "Contacts information not available.";
this.noContactsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lbContacts
//
this.lbContacts.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lbContacts.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbContacts.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.lbContacts.FormattingEnabled = true;
this.lbContacts.IntegralHeight = false;
this.lbContacts.ItemHeight = 15;
this.lbContacts.Location = new System.Drawing.Point(0, 0);
this.lbContacts.Margin = new System.Windows.Forms.Padding(0);
this.lbContacts.Name = "lbContacts";
this.lbContacts.Size = new System.Drawing.Size(328, 372);
this.lbContacts.TabIndex = 4;
this.lbContacts.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lbContacts_DrawItem);
this.lbContacts.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.lbContacts_MeasureItem);
this.lbContacts.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbContacts_MouseDown);
this.lbContacts.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.lbContacts_MouseWheel);
//
// CharacterContactList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.noContactsLabel);
this.Controls.Add(this.lbContacts);
this.Name = "CharacterContactList";
this.Size = new System.Drawing.Size(328, 372);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noContactsLabel;
private Common.Controls.NoFlickerListBox lbContacts;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContactList.cs
================================================
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Data;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
using EVEMon.Common.Properties;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterContactList : UserControl
{
#region Fields
private const TextFormatFlags Format = TextFormatFlags.NoPadding | TextFormatFlags.NoClipping | TextFormatFlags.NoPrefix;
// Contacts drawing - Region & text padding
private const int PadTop = 2;
private const int PadLeft = 6;
private const int PadRight = 7;
// Contacts drawing - Contacts
private const int ContactDetailHeight = 34;
// Contacts drawing - Contacts groups
private const int ContactGroupHeaderHeight = 21;
private const int CollapserPadRight = 4;
private readonly Font m_contactsFont;
private readonly Font m_contactsBoldFont;
private readonly List m_collapsedGroups = new List();
#endregion
#region Constructor
public CharacterContactList()
{
InitializeComponent();
lbContacts.Hide();
m_contactsFont = FontFactory.GetFont("Tahoma", 8.25F);
m_contactsBoldFont = FontFactory.GetFont("Tahoma", 8.25F, FontStyle.Bold);
noContactsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets the standing status to show contacts for.
///
internal StandingStatus ShowContactsWithStandings { get; set; }
///
/// Gets or sets a value indicating whether to show all contacts.
///
internal bool ShowAllContacts { get; set; }
///
/// Gets or sets a value indicating whether to show contacts in watch list.
///
internal bool ShowContactsInWatchList { get; set; }
#endregion
#region Inherited events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
EveMonClient.CharacterContactsUpdated += EveMonClient_CharacterContactsUpdated;
EveMonClient.SettingsChanged += EveMonClient_SettingsChanged;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
Disposed += OnDisposed;
ShowAllContacts = true;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.CharacterContactsUpdated -= EveMonClient_CharacterContactsUpdated;
EveMonClient.SettingsChanged -= EveMonClient_SettingsChanged;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (Visible)
UpdateContent();
}
#endregion
#region Content Management
///
/// Updates the content.
///
internal void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
// When no character, we just hide the list
if (Character == null)
{
noContactsLabel.Visible = true;
lbContacts.Visible = false;
return;
}
int scrollBarPosition = lbContacts.TopIndex;
// Update the standings list
lbContacts.BeginUpdate();
try
{
IList contacts = Character.Contacts.ToList();
if (!ShowAllContacts && !ShowContactsInWatchList)
contacts = contacts.Where(contact => Standing.Status(contact.Standing) == ShowContactsWithStandings).ToList();
if (ShowContactsInWatchList)
contacts = contacts.Where(contact => contact.IsInWatchlist).ToList();
IEnumerable> groups = contacts.GroupBy(x => x.Group).OrderBy(x => (int)x.Key);
// Scroll through groups
lbContacts.Items.Clear();
foreach (IGrouping group in groups)
{
string groupHeaderText = $"{@group.Key.GetDescription()} ({@group.Count()})";
lbContacts.Items.Add(groupHeaderText);
// Add items in the group when it's not collapsed
if (m_collapsedGroups.Contains(groupHeaderText))
continue;
foreach (Contact contact in group.OrderBy(contact => contact.Name))
{
contact.ContactImageUpdated += contact_ContactImageUpdated;
lbContacts.Items.Add(contact);
}
}
// Display or hide the "no contacts" label.
noContactsLabel.Visible = !contacts.Any();
lbContacts.Visible = contacts.Any();
// Invalidate display
lbContacts.Invalidate();
}
finally
{
lbContacts.EndUpdate();
lbContacts.TopIndex = scrollBarPosition;
}
}
#endregion
#region Drawing
///
/// Handles the DrawItem event of the lbContacts control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbContacts_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0 || e.Index >= lbContacts.Items.Count)
return;
object item = lbContacts.Items[e.Index];
Contact contact = item as Contact;
if (contact != null)
DrawItem(contact, e);
else
DrawItem((string)item, e);
}
///
/// Handles the MeasureItem event of the lbContacts control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbContacts_MeasureItem(object sender, MeasureItemEventArgs e)
{
if (e.Index < 0)
return;
e.ItemHeight = GetItemHeight(lbContacts.Items[e.Index]);
}
///
/// Gets the item's height.
///
///
private int GetItemHeight(object item)
{
if (item is Contact)
return Math.Max(m_contactsFont.Height * 2 + PadTop * 2, ContactDetailHeight);
return ContactGroupHeaderHeight;
}
///
/// Draws the list item for the given standing
///
///
///
private void DrawItem(Contact contact, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
// Draw background
g.FillRectangle(e.Index % 2 == 0 ? Brushes.White : Brushes.LightGray, e.Bounds);
// Measure and draw contact name
Size contactTextSize = TextRenderer.MeasureText(g, contact.Name,
m_contactsBoldFont, Size.Empty, Format);
TextRenderer.DrawText(g, contact.Name, m_contactsBoldFont, new Rectangle(
e.Bounds.Left + contact.EntityImage.Width + 4, e.Bounds.Top + (contact.Group ==
ContactGroup.Agent ? PadTop : (e.Bounds.Height - contactTextSize.Height) / 2),
contactTextSize.Width + PadLeft, contactTextSize.Height), Color.Black);
// Draw text for agents
if (contact.Group == ContactGroup.Agent)
{
Agent agent = StaticGeography.GetAgentByName(contact.Name);
if (agent != null)
{
Station agentStation = agent.Station;
string agentLocationText = agentStation != null ? agentStation.Name :
agent.Station.Name;
// Determine the agent level and division
string agentLevelText = (agent.AgentType != AgentType.BasicAgent &&
agent.AgentType != AgentType.ResearchAgent) ? agent.AgentType.
GetDescription() : $"Level {Skill.GetRomanFromInt(agent.Level)}";
string agentLevelDivisionText = $"( {agentLevelText} - {agent.Division} )";
// Calculate text size
Size agentLocationTextSize = TextRenderer.MeasureText(g, agentLocationText,
m_contactsFont, Size.Empty, Format);
Size agentLevelDivisionTextSize = TextRenderer.MeasureText(g,
agentLevelDivisionText, m_contactsFont, Size.Empty, Format);
// Draw agent level and division text
TextRenderer.DrawText(g, agentLevelDivisionText, m_contactsFont,
new Rectangle(e.Bounds.Left + contact.EntityImage.Width + 4 +
contactTextSize.Width + PadRight, e.Bounds.Top + PadTop,
agentLevelDivisionTextSize.Width + PadLeft,
agentLevelDivisionTextSize.Height), Color.Black, Format);
// Draw agent location
TextRenderer.DrawText(g, agentLocationText, m_contactsFont, new Rectangle(
e.Bounds.Left + contact.EntityImage.Width + 4, e.Bounds.Top + PadTop +
agentLevelDivisionTextSize.Height, agentLocationTextSize.Width +
PadLeft, agentLocationTextSize.Height), Color.Black);
}
}
else if (Settings.UI.SafeForWork)
{
string contactStandingStatusText = $"({Standing.Status(contact.Standing)})";
// Measure and draw standing text
Size contactStandingStatusTextSize = TextRenderer.MeasureText(g,
contactStandingStatusText, m_contactsFont, Size.Empty, Format);
TextRenderer.DrawText(g, contactStandingStatusText, m_contactsFont,
new Rectangle(e.Bounds.Left + contact.EntityImage.Width + 4 +
contactTextSize.Width + PadRight, e.Bounds.Top + (e.Bounds.Height -
contactStandingStatusTextSize.Height) / 2, contactStandingStatusTextSize.
Width + PadLeft, contactStandingStatusTextSize.Height), Color.Black);
// Draw watchlist text
if (contact.IsInWatchlist)
{
const string ContactInWatchListText = " - Watching";
Size contactInWatchListTextSize = TextRenderer.MeasureText(g,
ContactInWatchListText, m_contactsFont, Size.Empty, Format);
TextRenderer.DrawText(g, ContactInWatchListText, m_contactsFont,
new Rectangle(e.Bounds.Left + contact.EntityImage.Width + 4 +
contactTextSize.Width + contactStandingStatusTextSize.Width +
PadRight, e.Bounds.Top + (e.Bounds.Height -
contactStandingStatusTextSize.Height) / 2,
contactInWatchListTextSize.Width + PadLeft,
contactInWatchListTextSize.Height), Color.Black);
}
}
else
{
// Draw standing image
Image standingImage = Standing.GetStandingImage((int)contact.Standing);
g.DrawImage(standingImage, new Rectangle(e.Bounds.Left + contact.EntityImage.
Width + 4 + contactTextSize.Width + PadRight * 2, e.Bounds.Top + (e.Bounds.
Height - standingImage.Size.Height) / 2, standingImage.Width,
standingImage.Height));
// Draw watchlist image
if (contact.IsInWatchlist)
g.DrawImage(Resources.Watch, new Rectangle(e.Bounds.Left + contact.
EntityImage.Width + 4 + contactTextSize.Width + standingImage.Width +
PadRight * 3, e.Bounds.Top + (e.Bounds.Height - Resources.Watch.
Height) / 2, Resources.Watch.Width, Resources.Watch.Height));
}
// Draw images
if (!Settings.UI.SafeForWork)
g.DrawImage(contact.EntityImage, new Rectangle(e.Bounds.Left + PadLeft / 2,
ContactDetailHeight / 2 - contact.EntityImage.Height / 2 + e.Bounds.Top,
contact.EntityImage.Width, contact.EntityImage.Height));
}
///
/// Draws the list item for the given group.
///
///
///
private void DrawItem(string group, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
// Draws the background
using (LinearGradientBrush lgb = new LinearGradientBrush(new PointF(0F, 0F), new PointF(0F, 21F),
Color.FromArgb(75, 75, 75), Color.FromArgb(25, 25, 25)))
{
g.FillRectangle(lgb, e.Bounds);
}
using (Pen p = new Pen(Color.FromArgb(100, 100, 100)))
{
g.DrawLine(p, e.Bounds.Left, e.Bounds.Top, e.Bounds.Right + 1, e.Bounds.Top);
}
// Setting character spacing
NativeMethods.SetTextCharacterSpacing(g, 4);
// Measure texts
Size standingGroupTextSize = TextRenderer.MeasureText(g, group.ToUpper(CultureConstants.DefaultCulture),
m_contactsBoldFont, Size.Empty, Format);
Rectangle standingGroupTextRect = new Rectangle(e.Bounds.Left + PadLeft,
e.Bounds.Top +
(e.Bounds.Height / 2 - standingGroupTextSize.Height / 2),
standingGroupTextSize.Width + PadRight,
standingGroupTextSize.Height);
// Draws the text header
TextRenderer.DrawText(g, group.ToUpper(CultureConstants.DefaultCulture), m_contactsBoldFont, standingGroupTextRect,
Color.White, Color.Transparent, Format);
// Draws the collapsing arrows
bool isCollapsed = m_collapsedGroups.Contains(group);
Image img = isCollapsed ? Resources.Expand : Resources.Collapse;
g.DrawImageUnscaled(img, new Rectangle(e.Bounds.Right - img.Width - CollapserPadRight,
ContactGroupHeaderHeight / 2 - img.Height / 2 + e.Bounds.Top,
img.Width, img.Height));
}
///
/// Gets the preferred size from the preferred size of the list.
///
///
///
public override Size GetPreferredSize(Size proposedSize) => lbContacts.GetPreferredSize(proposedSize);
#endregion
#region Local events
///
/// Handles the ContactImageUpdated event of the contact control.
///
/// The source of the event.
/// The instance containing the event data.
private void contact_ContactImageUpdated(object sender, EventArgs e)
{
// Force to redraw
lbContacts.Invalidate();
}
///
/// Handles the MouseWheel event of the lbContacts control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbContacts_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta == 0)
return;
// Update the drawing based upon the mouse wheel scrolling
int numberOfItemLinesToMove = e.Delta * SystemInformation.MouseWheelScrollLines / Math.Abs(e.Delta);
int lines = numberOfItemLinesToMove;
if (lines == 0)
return;
// Compute the number of lines to move
int direction = lines / Math.Abs(lines);
int[] numberOfPixelsToMove = new int[lines * direction];
for (int i = 1; i <= Math.Abs(lines); i++)
{
object item = null;
// Going up
if (direction == Math.Abs(direction))
{
// Retrieve the next top item
if (lbContacts.TopIndex - i >= 0)
item = lbContacts.Items[lbContacts.TopIndex - i];
}
// Going down
else
{
// Compute the height of the items from current the topindex (included)
int height = 0;
for (int j = lbContacts.TopIndex + i - 1; j < lbContacts.Items.Count; j++)
{
height += GetItemHeight(lbContacts.Items[j]);
}
// Retrieve the next bottom item
if (height > lbContacts.ClientSize.Height)
item = lbContacts.Items[lbContacts.TopIndex + i - 1];
}
// If found a new item as top or bottom
if (item != null)
numberOfPixelsToMove[i - 1] = GetItemHeight(item) * direction;
else
lines -= direction;
}
// Scroll
if (lines != 0)
lbContacts.Invalidate();
}
///
/// Handles the MouseDown event of the lbContacts control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbContacts_MouseDown(object sender, MouseEventArgs e)
{
int index = lbContacts.IndexFromPoint(e.Location);
if (index < 0 || index >= lbContacts.Items.Count)
return;
Rectangle itemRect;
// Beware, this last index may actually means a click in the whitespace at the bottom
// Let's deal with this special case
if (index == lbContacts.Items.Count - 1)
{
itemRect = lbContacts.GetItemRectangle(index);
if (!itemRect.Contains(e.Location))
return;
}
// For a standings group, we have to handle the collapse/expand mechanism
object item = lbContacts.Items[index];
string contactsGroup = item as string;
if (contactsGroup == null)
return;
// Left button : expand/collapse
if (e.Button != MouseButtons.Right)
{
ToggleGroupExpandCollapse(contactsGroup);
return;
}
// If right click on the button, still expand/collapse
itemRect = lbContacts.GetItemRectangle(lbContacts.Items.IndexOf(item));
Rectangle buttonRect = GetButtonRectangle(contactsGroup, itemRect);
if (buttonRect.Contains(e.Location))
ToggleGroupExpandCollapse(contactsGroup);
}
#endregion
#region Helper Methods
///
/// Toggles the expansion or collapsing of a single group
///
/// The group to expand or collapse.
private void ToggleGroupExpandCollapse(string group)
{
if (m_collapsedGroups.Contains(group))
{
m_collapsedGroups.Remove(group);
UpdateContent();
}
else
{
m_collapsedGroups.Add(group);
UpdateContent();
}
}
///
/// Gets the rectangle for the collapse/expand button.
///
/// The group.
/// The item rect.
///
private Rectangle GetButtonRectangle(string group, Rectangle itemRect)
{
// Checks whether this group is collapsed
bool isCollapsed = m_collapsedGroups.Contains(group);
// Get the image for this state
Image btnImage = isCollapsed ? Resources.Expand : Resources.Collapse;
// Compute the top left point
Point btnPoint = new Point(itemRect.Right - btnImage.Width - CollapserPadRight,
ContactGroupHeaderHeight / 2 - btnImage.Height / 2 + itemRect.Top);
return new Rectangle(btnPoint, btnImage.Size);
}
#endregion
#region Global events
///
/// When the character standings update, we refresh the content.
///
///
///
private void EveMonClient_CharacterContactsUpdated(object sender, CharacterChangedEventArgs e)
{
if (e.Character != Character)
return;
UpdateContent();
}
///
/// When the settings change we update the content.
///
/// In case 'SafeForWork' gets enabled.
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_SettingsChanged(object sender, EventArgs e)
{
UpdateContent();
}
///
/// When ID to namae is updated we update the content.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
UpdateContent();
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContactList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContractsList.Designer.cs
================================================
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterContractsList
{
///
/// 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(CharacterContractsList));
this.noContractsLabel = new System.Windows.Forms.Label();
this.lvContracts = new System.Windows.Forms.ListView();
this.chContract = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chIssuer = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chAssignee = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chIssued = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chRemainingTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.showDetailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.showDetailsMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.showInBrowserMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.showInBrowserMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.exportToCSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ilIcons = new System.Windows.Forms.ImageList(this.components);
this.contextMenu.SuspendLayout();
this.SuspendLayout();
//
// noContractsLabel
//
this.noContractsLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noContractsLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noContractsLabel.Location = new System.Drawing.Point(0, 0);
this.noContractsLabel.Name = "noContractsLabel";
this.noContractsLabel.Size = new System.Drawing.Size(454, 434);
this.noContractsLabel.TabIndex = 2;
this.noContractsLabel.Text = "No contracts are available.";
this.noContractsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lvContracts
//
this.lvContracts.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvContracts.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chContract,
this.chType,
this.chStatus,
this.chIssuer,
this.chAssignee,
this.chIssued,
this.chRemainingTime});
this.lvContracts.ContextMenuStrip = this.contextMenu;
this.lvContracts.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvContracts.FullRowSelect = true;
this.lvContracts.HideSelection = false;
this.lvContracts.Location = new System.Drawing.Point(0, 0);
this.lvContracts.MultiSelect = false;
this.lvContracts.Name = "lvContracts";
this.lvContracts.Size = new System.Drawing.Size(454, 434);
this.lvContracts.SmallImageList = this.ilIcons;
this.lvContracts.TabIndex = 3;
this.lvContracts.UseCompatibleStateImageBehavior = false;
this.lvContracts.View = System.Windows.Forms.View.Details;
this.lvContracts.DoubleClick += new System.EventHandler(this.lvContracts_DoubleClick);
//
// chContract
//
this.chContract.Text = "Contract";
//
// chType
//
this.chType.Text = "Type";
//
// chStatus
//
this.chStatus.Text = "Status";
//
// chIssuer
//
this.chIssuer.Text = "From";
//
// chAssignee
//
this.chAssignee.Text = "To";
//
// chIssued
//
this.chIssued.Text = "Date Issued";
//
// chRemainingTime
//
this.chRemainingTime.Text = "Time Left";
//
// contextMenu
//
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.showDetailsToolStripMenuItem,
this.showDetailsMenuSeparator,
this.showInBrowserMenuItem,
this.showInBrowserMenuSeparator,
this.exportToCSVToolStripMenuItem});
this.contextMenu.Name = "contextMenu";
this.contextMenu.Size = new System.Drawing.Size(171, 82);
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenu_Opening);
//
// showDetailsToolStripMenuItem
//
this.showDetailsToolStripMenuItem.Name = "showDetailsToolStripMenuItem";
this.showDetailsToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
this.showDetailsToolStripMenuItem.Text = "Show Details...";
this.showDetailsToolStripMenuItem.Click += new System.EventHandler(this.showDetailsToolStripMenuItem_Click);
//
// showDetailsMenuSeparator
//
this.showDetailsMenuSeparator.Name = "showDetailsMenuSeparator";
this.showDetailsMenuSeparator.Size = new System.Drawing.Size(167, 6);
//
// showInBrowserMenuItem
//
this.showInBrowserMenuItem.Name = "showInBrowserMenuItem";
this.showInBrowserMenuItem.Size = new System.Drawing.Size(170, 22);
this.showInBrowserMenuItem.Text = "Show In Browser...";
this.showInBrowserMenuItem.Click += new System.EventHandler(this.showInBrowserMenuItem_Click);
//
// showInBrowserMenuSeparator
//
this.showInBrowserMenuSeparator.Name = "showInBrowserMenuSeparator";
this.showInBrowserMenuSeparator.Size = new System.Drawing.Size(167, 6);
//
// exportToCSVToolStripMenuItem
//
this.exportToCSVToolStripMenuItem.Name = "exportToCSVToolStripMenuItem";
this.exportToCSVToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
this.exportToCSVToolStripMenuItem.Text = "Export To CSV...";
this.exportToCSVToolStripMenuItem.Click += new System.EventHandler(this.exportToCSVToolStripMenuItem_Click);
//
// ilIcons
//
this.ilIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilIcons.ImageStream")));
this.ilIcons.TransparentColor = System.Drawing.Color.Transparent;
this.ilIcons.Images.SetKeyName(0, "arrow_up.png");
this.ilIcons.Images.SetKeyName(1, "arrow_down.png");
this.ilIcons.Images.SetKeyName(2, "16x16Transparant.png");
//
// CharacterContractsList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lvContracts);
this.Controls.Add(this.noContractsLabel);
this.Name = "CharacterContractsList";
this.Size = new System.Drawing.Size(454, 434);
this.contextMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noContractsLabel;
private System.Windows.Forms.ListView lvContracts;
private System.Windows.Forms.ColumnHeader chContract;
private System.Windows.Forms.ColumnHeader chType;
private System.Windows.Forms.ColumnHeader chIssuer;
private System.Windows.Forms.ColumnHeader chAssignee;
private System.Windows.Forms.ColumnHeader chIssued;
private System.Windows.Forms.ColumnHeader chStatus;
private System.Windows.Forms.ColumnHeader chRemainingTime;
private System.Windows.Forms.ImageList ilIcons;
private System.Windows.Forms.ContextMenuStrip contextMenu;
private System.Windows.Forms.ToolStripMenuItem showDetailsToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator showDetailsMenuSeparator;
private System.Windows.Forms.ToolStripMenuItem exportToCSVToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem showInBrowserMenuItem;
private System.Windows.Forms.ToolStripSeparator showInBrowserMenuSeparator;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContractsList.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Collections;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Data;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.UISettings;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Interfaces;
using EVEMon.Common.Models;
using EVEMon.Common.Models.Comparers;
using EVEMon.Common.SettingsObjects;
using EVEMon.DetailsWindow;
using EVEMon.SkillPlanner;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterContractsList : UserControl, IListView
{
#region Fields
private readonly List m_columns = new List();
private readonly List m_list = new List();
private InfiniteDisplayToolTip m_tooltip;
private ContractGrouping m_grouping;
private ContractColumn m_sortCriteria;
private IssuedFor m_showIssuedFor;
private string m_textFilter = string.Empty;
private bool m_sortAscending = true;
private bool m_isUpdatingColumns;
private bool m_columnsChanged;
private bool m_init;
#endregion
#region Constructor
///
/// Constructor.
///
public CharacterContractsList()
{
InitializeComponent();
lvContracts.Hide();
lvContracts.AllowColumnReorder = true;
lvContracts.Columns.Clear();
m_showIssuedFor = IssuedFor.All;
showDetailsToolStripMenuItem.Font = FontFactory.GetFont("Segoe UI", 9F, FontStyle.Bold);
noContractsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
ListViewHelper.EnableDoubleBuffer(lvContracts);
lvContracts.ColumnClick += lvContracts_ColumnClick;
lvContracts.ColumnWidthChanged += lvContracts_ColumnWidthChanged;
lvContracts.ColumnReordered += lvContracts_ColumnReordered;
lvContracts.MouseDown += listView_MouseDown;
lvContracts.MouseMove += listView_MouseMove;
lvContracts.MouseLeave += listView_MouseLeave;
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets a value indicating whether this is visible.
///
/// true if visible; otherwise, false.
internal bool Visibility
{
get { return lvContracts.Visible; }
set { lvContracts.Visible = value; }
}
///
/// Gets or sets the text filter.
///
[Browsable(false)]
public string TextFilter
{
get { return m_textFilter; }
set
{
m_textFilter = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the enumeration of research points to display.
///
internal IEnumerable Contracts
{
get { return m_list; }
set
{
m_list.Clear();
if (value == null)
return;
m_list.AddRange(value);
}
}
///
/// Gets or sets the grouping mode.
///
[Browsable(false)]
public Enum Grouping
{
get { return m_grouping; }
set
{
m_grouping = (ContractGrouping)value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets which "Issued for" contracts to display.
///
internal IssuedFor ShowIssuedFor
{
get { return m_showIssuedFor; }
set
{
m_showIssuedFor = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the settings used for columns.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable Columns
{
get
{
// Add the visible columns; matching the display order
List newColumns = new List();
foreach (ColumnHeader header in lvContracts.Columns.Cast().OrderBy(x => x.DisplayIndex))
{
ContractColumnSettings columnSetting = m_columns.First(x => x.Column == (ContractColumn)header.Tag);
if (columnSetting.Width > -1)
columnSetting.Width = header.Width;
newColumns.Add(columnSetting);
}
// Then add the other columns
newColumns.AddRange(m_columns.Where(x => !x.Visible));
return newColumns;
}
set
{
m_columns.Clear();
if (value != null)
m_columns.AddRange(value.Cast());
if (m_init)
UpdateColumns();
}
}
#endregion
# region Inherited Events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
m_tooltip = new InfiniteDisplayToolTip(lvContracts);
EveMonClient.TimerTick += EveMonClient_TimerTick;
EveMonClient.ContractsUpdated += EveMonClient_ContractsUpdated;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
EveMonClient.ConquerableStationListUpdated += EveMonClient_ConquerableStationListUpdated;
EveMonClient.CharacterContractItemsDownloaded += EveMonClient_ContractItemsDownloaded;
EveMonClient.CorporationContractItemsDownloaded += EveMonClient_ContractItemsDownloaded;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
m_tooltip.Dispose();
EveMonClient.TimerTick -= EveMonClient_TimerTick;
EveMonClient.ContractsUpdated -= EveMonClient_ContractsUpdated;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
EveMonClient.ConquerableStationListUpdated -= EveMonClient_ConquerableStationListUpdated;
EveMonClient.CharacterContractItemsDownloaded -= EveMonClient_ContractItemsDownloaded;
EveMonClient.CorporationContractItemsDownloaded -= EveMonClient_ContractItemsDownloaded;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (DesignMode || this.IsDesignModeHosted() || Character == null || !Visible)
return;
// Prevents the properties to call UpdateColumns() till we set all properties
m_init = false;
lvContracts.Visible = false;
Contracts = Character?.Contracts;
Columns = Settings.UI.MainWindow.Contracts.Columns;
Grouping = Character?.UISettings.ContractsGroupBy;
TextFilter = string.Empty;
UpdateColumns();
m_init = true;
UpdateListVisibility();
}
# endregion
#region Update Methods
///
/// Autoresizes the columns.
///
public void AutoResizeColumns()
{
m_columns.ForEach(column =>
{
if (column.Visible)
column.Width = -2;
});
UpdateColumns();
}
///
/// Updates the columns.
///
internal void UpdateColumns()
{
// Returns if not visible
if (!Visible)
return;
lvContracts.BeginUpdate();
m_isUpdatingColumns = true;
try
{
lvContracts.Columns.Clear();
lvContracts.Groups.Clear();
lvContracts.Items.Clear();
foreach (ContractColumnSettings column in m_columns.Where(x => x.Visible))
{
ColumnHeader header = lvContracts.Columns.Add(column.Column.GetHeader(), column.Width);
header.Tag = column.Column;
switch (column.Column)
{
case ContractColumn.Price:
case ContractColumn.Reward:
case ContractColumn.Collateral:
case ContractColumn.Buyout:
case ContractColumn.Volume:
case ContractColumn.Issued:
case ContractColumn.Duration:
case ContractColumn.DaysToComplete:
header.TextAlign = HorizontalAlignment.Right;
break;
}
}
// We update the content
UpdateContent();
}
finally
{
lvContracts.EndUpdate();
m_isUpdatingColumns = false;
}
}
///
/// Updates the content of the listview.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
int scrollBarPosition = lvContracts.GetVerticalScrollBarPosition();
// Store the selected item (if any) to restore it after the update
int selectedItem = lvContracts.SelectedItems.Count > 0 ? lvContracts.
SelectedItems[0].Tag.GetHashCode() : 0;
lvContracts.BeginUpdate();
try
{
bool filterInactive = Character != null && Settings.UI.MainWindow.Contracts.
HideInactiveContracts, filterIssued = m_showIssuedFor != IssuedFor.All;
var contracts = new LinkedList();
foreach (var con in m_list)
// Filter on valid contracts matching text
if (con.ContractType != ContractType.None && con.StartStation != null &&
con.EndStation != null && IsTextMatching(con, m_textFilter))
{
con.UpdateContractItems();
// Filter on issued type and availability
if ((!filterIssued || con.IssuedFor == m_showIssuedFor) &&
(!filterInactive || con.IsAvailable || con.NeedsAttention))
contracts.AddLast(con);
}
UpdateSort();
UpdateContentByGroup(contracts);
// Restore the selected item (if any)
if (selectedItem > 0)
{
foreach (ListViewItem lvItem in lvContracts.Items.Cast().Where(
lvItem => lvItem.Tag.GetHashCode() == selectedItem))
{
lvItem.Selected = true;
}
}
// Adjust the size of the columns
AdjustColumns();
UpdateListVisibility();
}
finally
{
lvContracts.EndUpdate();
lvContracts.SetVerticalScrollBarPosition(scrollBarPosition);
}
}
///
/// Updates the list visibility.
///
private void UpdateListVisibility()
{
// Display or hide the "no contracts" label
if (!m_init)
return;
noContractsLabel.Visible = lvContracts.Items.Count == 0;
lvContracts.Visible = !noContractsLabel.Visible;
}
///
/// Updates the content by group.
///
/// The contracts.
private void UpdateContentByGroup(IEnumerable contracts)
{
switch (m_grouping)
{
case ContractGrouping.State:
IOrderedEnumerable> groups0 =
contracts.GroupBy(x => x.State).OrderBy(x => (int)x.Key);
UpdateContent(groups0);
break;
case ContractGrouping.StateDesc:
IOrderedEnumerable> groups1 =
contracts.GroupBy(x => x.State).OrderByDescending(x => (int)x.Key);
UpdateContent(groups1);
break;
case ContractGrouping.Issued:
IOrderedEnumerable> groups4 =
contracts.GroupBy(x => x.Issued.ToLocalTime().Date).OrderBy(x => x.Key);
UpdateContent(groups4);
break;
case ContractGrouping.IssuedDesc:
IOrderedEnumerable> groups5 =
contracts.GroupBy(x => x.Issued.ToLocalTime().Date).OrderByDescending(x => x.Key);
UpdateContent(groups5);
break;
case ContractGrouping.ContractType:
IOrderedEnumerable> groups6 =
contracts.GroupBy(x => x.ContractType).OrderBy(x => x.Key);
UpdateContent(groups6);
break;
case ContractGrouping.ContractTypeDesc:
IOrderedEnumerable> groups7 =
contracts.GroupBy(x => x.ContractType).OrderByDescending(x => x.Key);
UpdateContent(groups7);
break;
case ContractGrouping.StartLocation:
IOrderedEnumerable> groups8 =
contracts.GroupBy(x => x.StartStation).OrderBy(x => x.Key.Name);
UpdateContent(groups8);
break;
case ContractGrouping.StartLocationDesc:
IOrderedEnumerable> groups9 =
contracts.GroupBy(x => x.StartStation).OrderByDescending(x => x.Key.Name);
UpdateContent(groups9);
break;
}
}
///
/// Updates the content of the listview.
///
///
///
private void UpdateContent(IEnumerable> groups)
{
lvContracts.Items.Clear();
lvContracts.Groups.Clear();
// Add the groups
foreach (IGrouping group in groups)
{
string groupText;
if (group.Key is ContractState)
groupText = ((ContractState)(object)group.Key).GetHeader();
else if (group.Key is ContractType)
groupText = ((ContractType)(object)group.Key).GetDescription();
else if (group.Key is DateTime)
groupText = ((DateTime)(object)group.Key).ToShortDateString();
else
groupText = group.Key.ToString();
ListViewGroup listGroup = new ListViewGroup(groupText);
lvContracts.Groups.Add(listGroup);
// Add the items in every group
lvContracts.Items.AddRange(
group.Select(contract =>
new
{
contract,
item = new ListViewItem(contract.ContractText, listGroup)
{
UseItemStyleForSubItems = false,
Tag = contract
}
}).Select(x => CreateSubItems(x.contract, x.item)).ToArray());
}
}
///
/// Creates the list view sub items.
///
/// The contract.
/// The item.
private ListViewItem CreateSubItems(Contract contract, ListViewItem item)
{
// Display text as dimmed if the contract is no longer available
if (!contract.IsAvailable && !contract.NeedsAttention)
item.ForeColor = SystemColors.GrayText;
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvContracts.Columns.Count + 1)
{
item.SubItems.Add(string.Empty);
}
// Creates the subitems
for (int i = 0; i < lvContracts.Columns.Count; i++)
{
ContractColumn column = (ContractColumn)lvContracts.Columns[i].Tag;
SetColumn(contract, item.SubItems[i], column);
}
// Tooltip
var builder = new StringBuilder();
builder.Append($"Issued For: {contract.IssuedFor}").AppendLine();
builder.Append($"Issued: {contract.Issued.ToLocalTime()}").AppendLine();
builder.Append($"Duration: {contract.Duration} ");
builder.Append($"Day{(contract.Duration.S())}").AppendLine();
if (contract.ContractType == ContractType.Courier)
{
builder.Append($"Days To Complete: {contract.DaysToComplete} ");
builder.Append($"Day{(contract.DaysToComplete.S())}");
builder.AppendLine();
}
string prefix = contract.ContractType == ContractType.Courier ? "Starting " :
string.Empty;
string startSS = contract.StartStation.SolarSystem?.FullLocation ??
EveMonConstants.UnknownText;
builder.Append($"{prefix}Solar System: {startSS}").AppendLine();
builder.Append($"{prefix}Station: {contract.StartStation.Name}").AppendLine();
if (contract.ContractType == ContractType.Courier)
{
string endSS = contract.EndStation.SolarSystem?.FullLocation ??
EveMonConstants.UnknownText;
builder.Append($"Ending Solar System: {endSS}").AppendLine();
builder.Append($"Ending Station: {contract.EndStation.Name}").AppendLine();
}
item.ToolTipText = builder.ToString();
return item;
}
///
/// Adjusts the columns.
///
private void AdjustColumns()
{
foreach (ColumnHeader column in lvContracts.Columns)
{
if (m_columns[column.Index].Width == -1)
m_columns[column.Index].Width = -2;
column.Width = m_columns[column.Index].Width;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column and not set to auto-resize
if (column.Index != lvContracts.Columns.Count - 1 || m_columns[column.Index].Width != -2)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (lvContracts.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += lvContracts.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
///
/// Updates the item sorter.
///
private void UpdateSort()
{
lvContracts.ListViewItemSorter = new ListViewItemComparerByTag(
new ContractComparer(m_sortCriteria, m_sortAscending));
UpdateSortVisualFeedback();
}
///
/// Updates the sort feedback (the arrow on the header).
///
private void UpdateSortVisualFeedback()
{
foreach (ColumnHeader columnHeader in lvContracts.Columns.Cast())
{
ContractColumn column = (ContractColumn)columnHeader.Tag;
if (m_sortCriteria == column)
columnHeader.ImageIndex = m_sortAscending ? 0 : 1;
else
columnHeader.ImageIndex = 2;
}
}
///
/// Formats the price according to the settings.
///
/// The price to display.
/// The price as a string.
private static string FormatPrice(decimal price)
{
return FormatHelper.FormatIf(Settings.UI.MainWindow.Contracts.NumberAbsFormat,
2, price, AbbreviationFormat.AbbreviationSymbols);
}
///
/// Updates the listview sub-item.
///
///
///
///
private static void SetColumn(Contract contract, ListViewItem.ListViewSubItem item, ContractColumn column)
{
Station start = contract.StartStation, end = contract.EndStation;
switch (column)
{
case ContractColumn.Status:
item.Text = contract.Status.GetDescription();
item.ForeColor = contract.Overdue ? Color.Red : Color.Black;
break;
case ContractColumn.ContractText:
item.Text = contract.ContractText;
break;
case ContractColumn.Title:
item.Text = contract.Description;
break;
case ContractColumn.ContractType:
item.Text = contract.ContractType.GetDescription();
break;
case ContractColumn.Issuer:
item.Text = contract.Issuer;
break;
case ContractColumn.Assignee:
item.Text = contract.Assignee;
break;
case ContractColumn.Acceptor:
item.Text = contract.Acceptor;
break;
case ContractColumn.Availability:
item.Text = contract.Availability.GetDescription();
break;
case ContractColumn.Price:
item.Text = FormatPrice(contract.Price);
break;
case ContractColumn.Buyout:
item.Text = FormatPrice(contract.Buyout);
break;
case ContractColumn.Reward:
item.Text = FormatPrice(contract.Reward);
break;
case ContractColumn.Collateral:
item.Text = FormatPrice(contract.Collateral);
break;
case ContractColumn.Volume:
item.Text = FormatPrice(contract.Volume);
break;
case ContractColumn.StartLocation:
item.Text = start.FullLocation;
break;
case ContractColumn.StartRegion:
item.Text = start.SolarSystemChecked.Constellation.Region.Name;
break;
case ContractColumn.StartSolarSystem:
item.Text = start.SolarSystemChecked.Name;
item.ForeColor = start.SolarSystemChecked.SecurityLevelColor;
break;
case ContractColumn.StartStation:
item.Text = start.Name;
break;
case ContractColumn.EndLocation:
item.Text = end.FullLocation;
break;
case ContractColumn.EndRegion:
item.Text = end.SolarSystemChecked.Constellation.Region.Name;
break;
case ContractColumn.EndSolarSystem:
item.Text = end.SolarSystemChecked.Name;
item.ForeColor = end.SolarSystemChecked.SecurityLevelColor;
break;
case ContractColumn.EndStation:
item.Text = end.Name;
break;
case ContractColumn.Issued:
item.Text = contract.Issued.ToLocalTime().ToShortDateString();
break;
case ContractColumn.Accepted:
item.Text = contract.Accepted == DateTime.MinValue ? string.Empty : contract.
Accepted.ToLocalTime().ToShortDateString();
break;
case ContractColumn.Completed:
item.Text = contract.Completed == DateTime.MinValue ? string.Empty : contract.
Completed.ToLocalTime().ToShortDateString();
break;
case ContractColumn.Duration:
item.Text = $"{contract.Duration} Day{(contract.Duration.S())}";
break;
case ContractColumn.DaysToComplete:
item.Text = contract.DaysToComplete == 0 ? string.Empty :
$"{contract.DaysToComplete} Day{(contract.DaysToComplete.S())}";
break;
case ContractColumn.Expiration:
ListViewItemFormat format = FormatExpiration(contract);
item.Text = format.Text;
item.ForeColor = format.TextColor;
break;
case ContractColumn.IssuedFor:
item.Text = contract.IssuedFor.ToString();
break;
default:
throw new NotImplementedException();
}
}
#endregion
#region Helper Methods
///
/// Checks the given text matches the item.
///
/// The x.
/// The text.
///
/// true if [is text matching] [the specified x]; otherwise, false.
///
private static bool IsTextMatching(Contract x, string text)
=> string.IsNullOrEmpty(text) ||
x.Status.GetDescription().ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.ContractText.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.ContractType.GetDescription().ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.Issuer.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.Assignee.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.Acceptor.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.Description.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.Availability.GetDescription().ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.StartStation.Name.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.StartStation.SolarSystemChecked.Name.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.StartStation.SolarSystemChecked.Constellation.Name.ToUpperInvariant().Contains(text, ignoreCase: true) ||
x.StartStation.SolarSystemChecked.Constellation.Region.Name.ToUpperInvariant().Contains(text, ignoreCase: true);
///
/// Gets the text and formatting for the expiration cell
///
/// Contract to generate a format for
/// ListViewItemFormat object describing the format of the cell
private static ListViewItemFormat FormatExpiration(Contract contract)
{
// Initialize to sensible defaults
ListViewItemFormat format = new ListViewItemFormat
{
TextColor = Color.Black,
Text = contract.Expiration.ToRemainingTimeShortDescription(DateTimeKind.Utc)
.ToUpper(CultureConstants.DefaultCulture)
};
// Contract is expiring soon
if (contract.IsAvailable && contract.Expiration < DateTime.UtcNow.AddDays(1))
format.TextColor = Color.DarkOrange;
// We have all the information for formatting an available order
if (contract.IsAvailable)
return format;
// Contract isn't available so lets format it as such
format.Text = contract.State.ToString();
if (contract.State == ContractState.Expired)
format.TextColor = Color.Red;
if (contract.State == ContractState.Rejected || contract.State == ContractState.Failed)
format.TextColor = Color.DarkRed;
if (contract.State == ContractState.Finished)
format.TextColor = Color.DarkGreen;
return format;
}
///
/// Shows the contract details.
///
private void ShowContractDetails()
{
var items = lvContracts.SelectedItems;
if (items.Count > 0)
{
// Fixes a bug where double clicks as the list was updating would crash
var contract = items[0].Tag as Contract;
if (contract != null && contract.ContractType == ContractType.Courier ||
contract.ContractItems.Any())
WindowsFactory.ShowByTag(contract);
}
}
#endregion
#region Local Event Handlers
///
/// Exports item info to CSV format.
///
///
///
private void exportToCSVToolStripMenuItem_Click(object sender, EventArgs e)
{
ListViewExporter.CreateCSV(lvContracts);
}
///
/// On double click shows the contract details window.
///
/// The source of the event.
/// The instance containing the event data.
private void lvContracts_DoubleClick(object sender, EventArgs e)
{
ShowContractDetails();
}
///
/// On column reorder we update the settings.
///
///
///
private void lvContracts_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
m_columnsChanged = true;
}
///
/// When the user manually resizes a column, we make sure to update the column preferences.
///
///
///
private void lvContracts_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (m_isUpdatingColumns || m_columns.Count <= e.ColumnIndex)
return;
if (m_columns[e.ColumnIndex].Width == lvContracts.Columns[e.ColumnIndex].Width)
return;
m_columns[e.ColumnIndex].Width = lvContracts.Columns[e.ColumnIndex].Width;
m_columnsChanged = true;
}
///
/// When the user clicks a column header, we update the sorting.
///
///
///
private void lvContracts_ColumnClick(object sender, ColumnClickEventArgs e)
{
ContractColumn column = (ContractColumn)lvContracts.Columns[e.Column].Tag;
if (m_sortCriteria == column)
m_sortAscending = !m_sortAscending;
else
{
m_sortCriteria = column;
m_sortAscending = true;
}
m_isUpdatingColumns = true;
// Updates the item sorter
UpdateSort();
m_isUpdatingColumns = false;
}
///
/// When the mouse gets pressed, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
return;
lvContracts.Cursor = Cursors.Default;
}
///
/// When the mouse moves over the list, we show the item's tooltip if over an item.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
return;
lvContracts.Cursor = CustomCursors.ContextMenu;
ListViewItem item = lvContracts.GetItemAt(e.Location.X, e.Location.Y);
if (item == null)
{
m_tooltip.Hide();
return;
}
m_tooltip.Show(item.ToolTipText, e.Location);
}
///
/// When the mouse leaves the list, we hide the item's tooltip.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseLeave(object sender, EventArgs e)
{
m_tooltip.Hide();
}
///
/// Upon selected shows the contract details window.
///
/// The source of the event.
/// The instance containing the event data.
private void showDetailsToolStripMenuItem_Click(object sender, EventArgs e)
{
ShowContractDetails();
}
///
/// Shows the context menu only when a contract is selected.
///
/// The source of the event.
/// The instance containing the event data.
private void contextMenu_Opening(object sender, CancelEventArgs e)
{
bool visible = lvContracts.SelectedItems.Count != 0;
showDetailsToolStripMenuItem.Visible =
showDetailsMenuSeparator.Visible =
showInBrowserMenuItem.Visible =
showInBrowserMenuSeparator.Visible = visible;
if (!visible)
return;
Contract contract = lvContracts.SelectedItems[0]?.Tag as Contract;
if (contract?.ContractItems == null)
return;
visible = contract.ContractItems.Count() == 1;
showInBrowserMenuItem.Visible =
showInBrowserMenuSeparator.Visible = visible;
if (!visible)
return;
Item contractItem = contract.ContractItems.FirstOrDefault()?.Item;
if (contractItem == null)
return;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(contractItem.ID);
Ship ship = contractItem as Ship;
Skill skill = Character.Skills[contractItem.ID];
if (skill == Skill.UnknownSkill)
skill = null;
string text = ship != null ? "Ship" : blueprint != null ? "Blueprint" : skill != null ? "Skill" : "Item";
showInBrowserMenuItem.Text = $"Show In {text} Browser...";
}
///
/// Handles the Click event of the showInBrowserMenuItem control.
///
/// The source of the event.
/// The instance containing the event data.
private void showInBrowserMenuItem_Click(object sender, EventArgs e)
{
Contract contract = lvContracts.SelectedItems[0]?.Tag as Contract;
Item contractItem = contract?.ContractItems?.FirstOrDefault()?.Item;
if (contractItem == null)
return;
Ship ship = contractItem as Ship;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(contractItem.ID);
Skill skill = Character.Skills[contractItem.ID];
if (skill == Skill.UnknownSkill)
skill = null;
PlanWindow planWindow = PlanWindow.ShowPlanWindow(Character);
if (ship != null)
planWindow.ShowShipInBrowser(ship);
else if (blueprint != null)
planWindow.ShowBlueprintInBrowser(blueprint);
else if (skill != null)
planWindow.ShowSkillInBrowser(skill);
else
planWindow.ShowItemInBrowser(contractItem);
}
# endregion
#region Global Events
///
/// On timer tick, we update the column settings if any changes have been made to them.
///
///
///
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
if (!Visible || !m_columnsChanged)
return;
Settings.UI.MainWindow.Contracts.Columns.Clear();
Settings.UI.MainWindow.Contracts.Columns.AddRange(Columns.Cast());
// Recreate the columns
Columns = Settings.UI.MainWindow.Contracts.Columns;
m_columnsChanged = false;
}
///
/// When the contracts change, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_ContractsUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
Contracts = Character.Contracts;
UpdateColumns();
}
///
/// When the character contract items are downloaded, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_ContractItemsDownloaded(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
UpdateContent();
}
///
/// When the EveIDToName list updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
UpdateColumns();
}
///
/// When Conquerable Station List updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_ConquerableStationListUpdated(object sender, EventArgs e)
{
if (Character == null)
return;
foreach (Contract contract in m_list)
{
contract.UpdateStation();
}
UpdateColumns();
}
# endregion
#region Helper Classes
private class ListViewItemFormat
{
///
/// Gets or sets the color of the text.
///
/// The color of the text.
public Color TextColor { get; set; }
///
/// Gets or sets the text.
///
/// The text.
public string Text { get; set; }
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterContractsList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
103, 17
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
AAAAAk1TRnQBSQFMAgEBAwEAAXwBBQF8AQUBEAEAARABAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEQBgABCP8A/wD/AP8A/wD/AP8A/wAaAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
AQABAQUAAYAXAAP/AQAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAB8AEPAf4BfwL/AgAB+AEfAfwBPwL/
AgAB/AE/AfgBHwL/AgAB/gF/AfABDwL/AgAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAL
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEmploymentHistoryList.Designer.cs
================================================
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEmploymentHistoryList
{
///
/// 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.noEmploymentHistoryLabel = new System.Windows.Forms.Label();
this.lbEmploymentHistory = new EVEMon.Common.Controls.NoFlickerListBox();
this.SuspendLayout();
//
// noEmploymentHistoryLabel
//
this.noEmploymentHistoryLabel.BackColor = System.Drawing.Color.WhiteSmoke;
this.noEmploymentHistoryLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noEmploymentHistoryLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noEmploymentHistoryLabel.Location = new System.Drawing.Point(0, 0);
this.noEmploymentHistoryLabel.Name = "noEmploymentHistoryLabel";
this.noEmploymentHistoryLabel.Size = new System.Drawing.Size(328, 372);
this.noEmploymentHistoryLabel.TabIndex = 3;
this.noEmploymentHistoryLabel.Text = "Employment History information not available.";
this.noEmploymentHistoryLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lbEmploymentHistory
//
this.lbEmploymentHistory.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lbEmploymentHistory.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbEmploymentHistory.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.lbEmploymentHistory.FormattingEnabled = true;
this.lbEmploymentHistory.IntegralHeight = false;
this.lbEmploymentHistory.ItemHeight = 15;
this.lbEmploymentHistory.Location = new System.Drawing.Point(0, 0);
this.lbEmploymentHistory.Margin = new System.Windows.Forms.Padding(0);
this.lbEmploymentHistory.Name = "lbEmploymentHistory";
this.lbEmploymentHistory.Size = new System.Drawing.Size(328, 372);
this.lbEmploymentHistory.TabIndex = 3;
this.lbEmploymentHistory.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lbEmploymentHistory_DrawItem);
this.lbEmploymentHistory.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.lbEmploymentHistory_MeasureItem);
this.lbEmploymentHistory.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.lbEmploymentHistory_MouseWheel);
//
// CharacterEmploymentHistoryList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.noEmploymentHistoryLabel);
this.Controls.Add(this.lbEmploymentHistory);
this.Name = "CharacterEmploymentHistoryList";
this.Size = new System.Drawing.Size(328, 372);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noEmploymentHistoryLabel;
private Common.Controls.NoFlickerListBox lbEmploymentHistory;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEmploymentHistoryList.cs
================================================
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEmploymentHistoryList : UserControl
{
#region Fields
private const int PadTop = 2;
private const int PadLeft = 6;
private const TextFormatFlags TextFormat = TextFormatFlags.NoPadding | TextFormatFlags.NoClipping;
private const string RecordDateFromText = "From";
private const string RecordDateToText = "to";
private const string RecordDateTodayText = "this day";
// Employment History drawing - Employment record
private const int EmploymentRecordDetailHeight = 34;
private readonly Font m_recordFont;
private readonly Font m_recordBoldFont;
#endregion
#region Constructor
///
/// Initializes a new instance of the class.
///
public CharacterEmploymentHistoryList()
{
InitializeComponent();
lbEmploymentHistory.Visible = false;
m_recordFont = FontFactory.GetFont("Tahoma", 8.25F);
m_recordBoldFont = FontFactory.GetFont("Tahoma", 8.25F, FontStyle.Bold);
noEmploymentHistoryLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets the item's height.
///
private int GetItemHeight => Math.Max(m_recordFont.Height * 2 + PadTop * 2, EmploymentRecordDetailHeight);
#endregion
#region Inherited events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
EveMonClient.CharacterInfoUpdated += EveMonClient_CharacterInfoUpdated;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
EveMonClient.SettingsChanged += EveMonClient_SettingsChanged;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.CharacterInfoUpdated -= EveMonClient_CharacterInfoUpdated;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
EveMonClient.SettingsChanged -= EveMonClient_SettingsChanged;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (Visible)
UpdateContent();
}
#endregion
#region Content Management
///
/// Updates all the content.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
// When no character, we just hide the list
if (Character == null)
{
noEmploymentHistoryLabel.Visible = true;
lbEmploymentHistory.Visible = false;
return;
}
int scrollBarPosition = lbEmploymentHistory.TopIndex;
// Update the skills list
lbEmploymentHistory.BeginUpdate();
try
{
// Add items in the list
lbEmploymentHistory.Items.Clear();
foreach (EmploymentRecord employmentRecord in Character.EmploymentHistory)
{
employmentRecord.EmploymentRecordImageUpdated += record_EmploymentRecordImageUpdated;
lbEmploymentHistory.Items.Add(employmentRecord);
}
// Display or hide the "no skills" label.
noEmploymentHistoryLabel.Visible = !Character.EmploymentHistory.Any();
lbEmploymentHistory.Visible = Character.EmploymentHistory.Any();
// Invalidate display
lbEmploymentHistory.Invalidate();
}
finally
{
lbEmploymentHistory.EndUpdate();
lbEmploymentHistory.TopIndex = scrollBarPosition;
}
}
#endregion
#region Drawing
///
/// Handles the MeasureItem event of the lbEmploymentHistory control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbEmploymentHistory_MeasureItem(object sender, MeasureItemEventArgs e)
{
if (e.Index < 0)
return;
e.ItemHeight = GetItemHeight;
}
///
/// Draws the list item for the given standing
///
/// The source of the event.
/// The instance containing the event data.
private void lbEmploymentHistory_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0 || e.Index >= lbEmploymentHistory.Items.Count)
return;
Graphics g = e.Graphics;
EmploymentRecord record = (EmploymentRecord)lbEmploymentHistory.Items[e.Index];
EmploymentRecord previousRecord = e.Index == 0 ? null : (EmploymentRecord)lbEmploymentHistory.Items[e.Index - 1];
// Draw background
g.FillRectangle(e.Index % 2 == 0 ? Brushes.White : Brushes.LightGray, e.Bounds);
// Measure texts
DateTime dt = previousRecord?.StartDate ?? DateTime.UtcNow;
string recordPeriodText =
$"( {dt.Subtract(record.StartDate).ToDescriptiveText(DescriptiveTextOptions.SpaceBetween, false)} )";
string recordStartDateText = record.StartDate.ToLocalTime().DateTimeToDotFormattedString();
string recordEndDateText = previousRecord == null
? RecordDateTodayText
: previousRecord.StartDate.ToLocalTime().DateTimeToDotFormattedString();
Size recordCorporationNameTextSize = TextRenderer.MeasureText(g, record.CorporationName, m_recordBoldFont, Size.Empty,
TextFormat);
Size recordPeriodTextSize = TextRenderer.MeasureText(g, recordPeriodText, m_recordFont, Size.Empty, TextFormat);
Size recordFromTextSize = TextRenderer.MeasureText(g, RecordDateFromText, m_recordFont, Size.Empty, TextFormat);
Size recordStartDateTextSize = TextRenderer.MeasureText(g, recordStartDateText, m_recordBoldFont, Size.Empty,
TextFormat);
Size recordToTextSize = TextRenderer.MeasureText(g, RecordDateToText, m_recordFont, Size.Empty, TextFormat);
Size recordEndDateTextSize = TextRenderer.MeasureText(g, recordEndDateText,
previousRecord == null ? m_recordFont : m_recordBoldFont,
Size.Empty, TextFormat);
// Draw texts
TextRenderer.DrawText(g, record.CorporationName, m_recordBoldFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7,
e.Bounds.Top + PadTop,
recordCorporationNameTextSize.Width + PadLeft,
recordCorporationNameTextSize.Height), Color.Black);
TextRenderer.DrawText(g, RecordDateFromText, m_recordFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7,
e.Bounds.Top + PadTop + recordCorporationNameTextSize.Height,
recordFromTextSize.Width + PadLeft,
recordFromTextSize.Height), Color.Black);
TextRenderer.DrawText(g, recordStartDateText, m_recordBoldFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7 + recordFromTextSize.Width + PadLeft,
e.Bounds.Top + PadTop + recordCorporationNameTextSize.Height,
recordStartDateTextSize.Width + PadLeft,
recordStartDateTextSize.Height), Color.Black);
TextRenderer.DrawText(g, RecordDateToText, m_recordFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7 + recordFromTextSize.Width + recordStartDateTextSize.Width +
PadLeft * 2,
e.Bounds.Top + PadTop + recordCorporationNameTextSize.Height,
recordToTextSize.Width + PadLeft,
recordToTextSize.Height), Color.Black);
TextRenderer.DrawText(g, recordEndDateText, previousRecord == null ? m_recordFont : m_recordBoldFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7 + recordFromTextSize.Width + recordStartDateTextSize.Width +
recordToTextSize.Width + PadLeft * 3,
e.Bounds.Top + PadTop + recordCorporationNameTextSize.Height,
recordEndDateTextSize.Width + PadLeft,
recordEndDateTextSize.Height), Color.Black);
TextRenderer.DrawText(g, recordPeriodText, m_recordFont,
new Rectangle(
e.Bounds.Left + PadLeft * 7 + recordFromTextSize.Width + recordStartDateTextSize.Width +
recordToTextSize.Width + recordEndDateTextSize.Width + PadLeft * 4,
e.Bounds.Top + PadTop + recordCorporationNameTextSize.Height,
recordPeriodTextSize.Width + PadLeft,
recordPeriodTextSize.Height), Color.Black);
// Draw the corporation image
if (Settings.UI.SafeForWork)
return;
g.DrawImage(record.CorporationImage,
new Rectangle(e.Bounds.Left + PadLeft / 2,
EmploymentRecordDetailHeight / 2 - record.CorporationImage.Height / 2 + e.Bounds.Top,
record.CorporationImage.Width, record.CorporationImage.Height));
}
///
/// Gets the preferred size from the preferred size of the list.
///
///
///
public override Size GetPreferredSize(Size proposedSize) => lbEmploymentHistory.GetPreferredSize(proposedSize);
#endregion
#region Local events
///
/// When the image updates, we redraw the list.
///
/// The source of the event.
/// The instance containing the event data.
private void record_EmploymentRecordImageUpdated(object sender, EventArgs e)
{
// Force to redraw
lbEmploymentHistory.Invalidate();
}
///
/// Handles the MouseWheel event of the lbEmploymentHistory control.
///
/// The source of the event.
/// The instance containing the event data.
private void lbEmploymentHistory_MouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta == 0)
return;
// Update the drawing based upon the mouse wheel scrolling
int numberOfItemLinesToMove = e.Delta * SystemInformation.MouseWheelScrollLines / Math.Abs(e.Delta);
int lines = numberOfItemLinesToMove;
if (lines == 0)
return;
// Compute the number of lines to move
int direction = lines / Math.Abs(lines);
int[] numberOfPixelsToMove = new int[lines * direction];
for (int i = 1; i <= Math.Abs(lines); i++)
{
object item = null;
// Going up
if (direction == Math.Abs(direction))
{
// Retrieve the next top item
if (lbEmploymentHistory.TopIndex - i >= 0)
item = lbEmploymentHistory.Items[lbEmploymentHistory.TopIndex - i];
}
// Going down
else
{
// Compute the height of the items from current the topindex (included)
int height = 0;
for (int j = lbEmploymentHistory.TopIndex + i - 1; j < lbEmploymentHistory.Items.Count; j++)
{
height += GetItemHeight;
}
// Retrieve the next bottom item
if (height > lbEmploymentHistory.ClientSize.Height)
item = lbEmploymentHistory.Items[lbEmploymentHistory.TopIndex + i - 1];
}
// If found a new item as top or bottom
if (item != null)
numberOfPixelsToMove[i - 1] = GetItemHeight * direction;
else
lines -= direction;
}
// Scroll
if (lines != 0)
lbEmploymentHistory.Invalidate();
}
#endregion
#region Global events
///
/// When the character standings update, we update the content.
///
///
///
private void EveMonClient_CharacterInfoUpdated(object sender, CharacterChangedEventArgs e)
{
if (e.Character != Character)
return;
UpdateContent();
}
///
/// When the settings change, we update the content.
///
/// In case 'SafeForWork' gets enabled.
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_SettingsChanged(object sender, EventArgs e)
{
UpdateContent();
}
///
/// When the EveIDToName updates, we refresh the content.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
// Force to redraw
lbEmploymentHistory.Invalidate();
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEmploymentHistoryList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveMailMessagesList.Designer.cs
================================================
using EVEMon.Controls;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEveMailMessagesList
{
///
/// 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(CharacterEveMailMessagesList));
this.ilIcons = new System.Windows.Forms.ImageList(this.components);
this.noEVEMailMessagesLabel = new System.Windows.Forms.Label();
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.mailReadLocal = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
this.exportToCSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.splitContainerMailMessages = new System.Windows.Forms.SplitContainer();
this.lvMailMessages = new System.Windows.Forms.ListView();
this.chSenderName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chSentDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chToCharacterIDs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chToCorpOrAlliance = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chToListID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.eveMailReadingPane = new EVEMon.Controls.ReadingPane();
this.timer = new System.Windows.Forms.Timer(this.components);
this.contextMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainerMailMessages)).BeginInit();
this.splitContainerMailMessages.Panel1.SuspendLayout();
this.splitContainerMailMessages.Panel2.SuspendLayout();
this.splitContainerMailMessages.SuspendLayout();
this.SuspendLayout();
//
// ilIcons
//
this.ilIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilIcons.ImageStream")));
this.ilIcons.TransparentColor = System.Drawing.Color.Transparent;
this.ilIcons.Images.SetKeyName(0, "arrow_up.png");
this.ilIcons.Images.SetKeyName(1, "arrow_down.png");
this.ilIcons.Images.SetKeyName(2, "16x16Transparant.png");
//
// noEVEMailMessagesLabel
//
this.noEVEMailMessagesLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noEVEMailMessagesLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noEVEMailMessagesLabel.Location = new System.Drawing.Point(0, 0);
this.noEVEMailMessagesLabel.Name = "noEVEMailMessagesLabel";
this.noEVEMailMessagesLabel.Size = new System.Drawing.Size(454, 434);
this.noEVEMailMessagesLabel.TabIndex = 1;
this.noEVEMailMessagesLabel.Text = "No EVE mail messages are available.";
this.noEVEMailMessagesLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// contextMenu
//
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mailReadLocal,
this.toolStripSeparator,
this.exportToCSVToolStripMenuItem});
this.contextMenu.Name = "mailListContextMenu";
this.contextMenu.Size = new System.Drawing.Size(157, 76);
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenu_Opening);
//
// mailReadLocal
//
this.mailReadLocal.Name = "mailReadLocal";
this.mailReadLocal.Size = new System.Drawing.Size(156, 22);
this.mailReadLocal.Text = "Read";
this.mailReadLocal.Click += new System.EventHandler(this.mailReadLocal_Click);
//
// toolStripSeparator
//
this.toolStripSeparator.Name = "toolStripSeparator";
this.toolStripSeparator.Size = new System.Drawing.Size(153, 6);
//
// exportToCSVToolStripMenuItem
//
this.exportToCSVToolStripMenuItem.Name = "exportToCSVToolStripMenuItem";
this.exportToCSVToolStripMenuItem.Size = new System.Drawing.Size(156, 22);
this.exportToCSVToolStripMenuItem.Text = "Export To CSV...";
this.exportToCSVToolStripMenuItem.Click += new System.EventHandler(this.exportToCSVToolStripMenuItem_Click);
//
// splitContainerMailMessages
//
this.splitContainerMailMessages.BackColor = System.Drawing.SystemColors.ControlDark;
this.splitContainerMailMessages.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainerMailMessages.Location = new System.Drawing.Point(0, 0);
this.splitContainerMailMessages.Name = "splitContainerMailMessages";
this.splitContainerMailMessages.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainerMailMessages.Panel1
//
this.splitContainerMailMessages.Panel1.Controls.Add(this.lvMailMessages);
//
// splitContainerMailMessages.Panel2
//
this.splitContainerMailMessages.Panel2.Controls.Add(this.eveMailReadingPane);
this.splitContainerMailMessages.Size = new System.Drawing.Size(454, 434);
this.splitContainerMailMessages.SplitterDistance = 288;
this.splitContainerMailMessages.SplitterWidth = 6;
this.splitContainerMailMessages.TabIndex = 2;
//
// lvMailMessages
//
this.lvMailMessages.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvMailMessages.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chSenderName,
this.chTitle,
this.chSentDate,
this.chToCharacterIDs,
this.chToCorpOrAlliance,
this.chToListID});
this.lvMailMessages.ContextMenuStrip = this.contextMenu;
this.lvMailMessages.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvMailMessages.FullRowSelect = true;
this.lvMailMessages.HideSelection = false;
this.lvMailMessages.Location = new System.Drawing.Point(0, 0);
this.lvMailMessages.MultiSelect = false;
this.lvMailMessages.Name = "lvMailMessages";
this.lvMailMessages.Size = new System.Drawing.Size(454, 288);
this.lvMailMessages.SmallImageList = this.ilIcons;
this.lvMailMessages.TabIndex = 0;
this.lvMailMessages.UseCompatibleStateImageBehavior = false;
this.lvMailMessages.View = System.Windows.Forms.View.Details;
this.lvMailMessages.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvMailMessages_ColumnClick);
this.lvMailMessages.ColumnReordered += new System.Windows.Forms.ColumnReorderedEventHandler(this.lvMailMessages_ColumnReordered);
this.lvMailMessages.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.lvMailMessages_ColumnWidthChanged);
this.lvMailMessages.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvMailMessages_ItemSelectionChanged);
this.lvMailMessages.DoubleClick += new System.EventHandler(this.lvMailMessages_DoubleClick);
//
// chSenderName
//
this.chSenderName.Text = "From";
//
// chTitle
//
this.chTitle.Text = "Subject";
this.chTitle.Width = 121;
//
// chSentDate
//
this.chSentDate.Text = "Received";
this.chSentDate.Width = 90;
//
// chToCharacterIDs
//
this.chToCharacterIDs.Text = "To";
//
// chToCorpOrAlliance
//
this.chToCorpOrAlliance.Text = "To Corp Or Alliance";
//
// chToListID
//
this.chToListID.Text = "To Mailing List";
//
// eveMailReadingPane
//
this.eveMailReadingPane.Dock = System.Windows.Forms.DockStyle.Fill;
this.eveMailReadingPane.Location = new System.Drawing.Point(0, 0);
this.eveMailReadingPane.Name = "eveMailReadingPane";
this.eveMailReadingPane.Size = new System.Drawing.Size(454, 140);
this.eveMailReadingPane.TabIndex = 0;
//
// timer
//
this.timer.Tick += new System.EventHandler(this.timer_Tick);
//
// CharacterEveMailMessagesList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.splitContainerMailMessages);
this.Controls.Add(this.noEVEMailMessagesLabel);
this.Name = "CharacterEveMailMessagesList";
this.Size = new System.Drawing.Size(454, 434);
this.contextMenu.ResumeLayout(false);
this.splitContainerMailMessages.Panel1.ResumeLayout(false);
this.splitContainerMailMessages.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerMailMessages)).EndInit();
this.splitContainerMailMessages.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noEVEMailMessagesLabel;
private System.Windows.Forms.ImageList ilIcons;
private System.Windows.Forms.ColumnHeader chSenderName;
private System.Windows.Forms.ColumnHeader chTitle;
private System.Windows.Forms.ColumnHeader chSentDate;
private System.Windows.Forms.ColumnHeader chToCorpOrAlliance;
private System.Windows.Forms.ColumnHeader chToCharacterIDs;
private System.Windows.Forms.ColumnHeader chToListID;
private System.Windows.Forms.SplitContainer splitContainerMailMessages;
private System.Windows.Forms.ListView lvMailMessages;
private System.Windows.Forms.Timer timer;
private ReadingPane eveMailReadingPane;
private System.Windows.Forms.ContextMenuStrip contextMenu;
private System.Windows.Forms.ToolStripMenuItem mailReadLocal;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator;
private System.Windows.Forms.ToolStripMenuItem exportToCSVToolStripMenuItem;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveMailMessagesList.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Collections;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.UISettings;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Interfaces;
using EVEMon.Common.Models;
using EVEMon.Common.Models.Comparers;
using EVEMon.Common.Notifications;
using EVEMon.Common.Serialization.Eve;
using EVEMon.Common.SettingsObjects;
using EVEMon.DetailsWindow;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEveMailMessagesList : UserControl, IListView
{
#region Fields
private readonly List m_columns = new List();
private readonly List m_list = new List();
private EVEMailMessagesGrouping m_grouping;
private EveMailMessageColumn m_sortCriteria;
private ReadingPanePositioning m_panePosition;
private string m_textFilter = string.Empty;
private bool m_sortAscending;
private bool m_columnsChanged;
private bool m_isUpdatingColumns;
private bool m_init;
#endregion
#region Constructor
///
/// Constructor.
///
public CharacterEveMailMessagesList()
{
InitializeComponent();
eveMailReadingPane.HidePane();
splitContainerMailMessages.Hide();
lvMailMessages.Hide();
lvMailMessages.AllowColumnReorder = true;
lvMailMessages.Columns.Clear();
mailReadLocal.Font = FontFactory.GetFont("Segoe UI", 9F, FontStyle.Bold);
noEVEMailMessagesLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
ListViewHelper.EnableDoubleBuffer(lvMailMessages);
lvMailMessages.MouseDown += listView_MouseDown;
lvMailMessages.MouseMove += listView_MouseMove;
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets the text filter.
///
[Browsable(false)]
public string TextFilter
{
get { return m_textFilter; }
set
{
m_textFilter = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the grouping mode.
///
[Browsable(false)]
public Enum Grouping
{
get { return m_grouping; }
set
{
m_grouping = (EVEMailMessagesGrouping)value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the pane position.
///
internal ReadingPanePositioning PanePosition
{
get { return m_panePosition; }
set
{
m_panePosition = value;
UpdatePanePosition();
}
}
///
/// Gets or sets the enumeration of EVE mail messages to display.
///
private IEnumerable EVEMailMessages
{
get { return m_list; }
set
{
m_list.Clear();
if (value == null)
return;
m_list.AddRange(value);
}
}
///
/// Gets or sets the settings used for columns.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable Columns
{
get
{
// Add the visible columns; matching the display order
List newColumns = new List();
foreach (ColumnHeader header in lvMailMessages.Columns.Cast().OrderBy(x => x.DisplayIndex))
{
EveMailMessageColumnSettings columnSetting =
m_columns.First(x => x.Column == (EveMailMessageColumn)header.Tag);
if (columnSetting.Width > -1)
columnSetting.Width = header.Width;
newColumns.Add(columnSetting);
}
// Then add the other columns
newColumns.AddRange(m_columns.Where(x => !x.Visible));
return newColumns;
}
set
{
m_columns.Clear();
if (value != null)
m_columns.AddRange(value.Cast());
if (m_init)
UpdateColumns();
}
}
#endregion
# region Inherited Events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
EveMonClient.TimerTick += EveMonClient_TimerTick;
EveMonClient.CharacterEVEMailMessagesUpdated += EveMonClient_CharacterEVEMailMessagesUpdated;
EveMonClient.CharacterEVEMailingListsUpdated += EveMonClient_CharacterEVEMailingListsUpdated;
EveMonClient.CharacterEVEMailBodyDownloaded += EveMonClient_CharacterEVEMailBodyDownloaded;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
EveMonClient.NotificationSent += EveMonClient_NotificationSent;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.TimerTick -= EveMonClient_TimerTick;
EveMonClient.CharacterEVEMailMessagesUpdated -= EveMonClient_CharacterEVEMailMessagesUpdated;
EveMonClient.CharacterEVEMailingListsUpdated -= EveMonClient_CharacterEVEMailingListsUpdated;
EveMonClient.CharacterEVEMailBodyDownloaded -= EveMonClient_CharacterEVEMailBodyDownloaded;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
EveMonClient.NotificationSent -= EveMonClient_NotificationSent;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (DesignMode || this.IsDesignModeHosted() || Character == null || !Visible)
return;
// Prevents the properties to call UpdateColumns() till we set all properties
m_init = false;
lvMailMessages.Visible = false;
eveMailReadingPane.HidePane();
EVEMailMessages = Character?.EVEMailMessages;
Columns = Settings.UI.MainWindow.EVEMailMessages.Columns;
Grouping = Character?.UISettings.EVEMailMessagesGroupBy;
TextFilter = string.Empty;
PanePosition = Settings.UI.MainWindow.EVEMailMessages.ReadingPanePosition;
UpdateColumns();
m_init = true;
UpdateListVisibility();
}
# endregion
#region Update Methods
///
/// Autoresizes the columns.
///
public void AutoResizeColumns()
{
m_columns.ForEach(column =>
{
if (column.Visible)
column.Width = -2;
});
UpdateColumns();
}
///
/// Updates the columns.
///
private void UpdateColumns()
{
// Returns if not visible
if (!Visible)
return;
lvMailMessages.BeginUpdate();
m_isUpdatingColumns = true;
try
{
lvMailMessages.Columns.Clear();
lvMailMessages.Groups.Clear();
lvMailMessages.Items.Clear();
foreach (EveMailMessageColumnSettings column in m_columns.Where(x => x.Visible))
{
ColumnHeader header = lvMailMessages.Columns.Add(column.Column.GetHeader(), column.Width);
header.Tag = column.Column;
}
// We update the content
UpdateContent();
}
finally
{
lvMailMessages.EndUpdate();
m_isUpdatingColumns = false;
}
}
///
/// Updates the content of the listview.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
int scrollBarPosition = lvMailMessages.GetVerticalScrollBarPosition();
// Store the selected item (if any) to restore it after the update
int selectedItem = lvMailMessages.SelectedItems.Count > 0
? lvMailMessages.SelectedItems[0].Tag.GetHashCode()
: 0;
lvMailMessages.BeginUpdate();
try
{
IEnumerable eveMailMessages = m_list
.Where(x => x.SentDate != DateTime.MinValue).Where(x => IsTextMatching(x, m_textFilter));
UpdateSort();
UpdateContentByGroup(eveMailMessages);
// Restore the selected item (if any)
if (selectedItem > 0)
{
foreach (ListViewItem lvItem in lvMailMessages.Items.Cast().Where(
lvItem => lvItem.Tag.GetHashCode() == selectedItem))
{
lvItem.Selected = true;
}
}
// Adjust the size of the columns
AdjustColumns();
UpdateListVisibility();
}
finally
{
lvMailMessages.EndUpdate();
lvMailMessages.SetVerticalScrollBarPosition(scrollBarPosition);
}
}
///
/// Updates the list visibility.
///
private void UpdateListVisibility()
{
// Display or hide the "no EVE mail messages" label
if (!m_init)
return;
noEVEMailMessagesLabel.Visible = lvMailMessages.Items.Count == 0;
lvMailMessages.Visible = splitContainerMailMessages.Visible = !noEVEMailMessagesLabel.Visible;
}
///
/// Updates the content by group.
///
/// The eve mail messages.
private void UpdateContentByGroup(IEnumerable eveMailMessages)
{
switch (m_grouping)
{
case EVEMailMessagesGrouping.State:
IOrderedEnumerable> groups0 =
eveMailMessages.GroupBy(x => x.State).OrderBy(x => (int)x.Key);
UpdateContent(groups0);
break;
case EVEMailMessagesGrouping.StateDesc:
IOrderedEnumerable> groups1 =
eveMailMessages.GroupBy(x => x.State).OrderByDescending(x => (int)x.Key);
UpdateContent(groups1);
break;
case EVEMailMessagesGrouping.SentDate:
IOrderedEnumerable> groups2 =
eveMailMessages.GroupBy(x => x.SentDate.ToLocalTime().Date).OrderBy(x => x.Key);
UpdateContent(groups2);
break;
case EVEMailMessagesGrouping.SentDateDesc:
IOrderedEnumerable> groups3 =
eveMailMessages.GroupBy(x => x.SentDate.ToLocalTime().Date).OrderByDescending(x => x.Key);
UpdateContent(groups3);
break;
case EVEMailMessagesGrouping.Sender:
IOrderedEnumerable> groups4 =
eveMailMessages.GroupBy(x => x.SenderName).OrderBy(x => x.Key);
UpdateContent(groups4);
break;
case EVEMailMessagesGrouping.SenderDesc:
IOrderedEnumerable> groups5 =
eveMailMessages.GroupBy(x => x.SenderName).OrderByDescending(x => x.Key);
UpdateContent(groups5);
break;
case EVEMailMessagesGrouping.Subject:
IOrderedEnumerable> groups6 =
eveMailMessages.GroupBy(x => x.Title).OrderBy(x => x.Key);
UpdateContent(groups6);
break;
case EVEMailMessagesGrouping.SubjectDesc:
IOrderedEnumerable> groups7 =
eveMailMessages.GroupBy(x => x.Title).OrderByDescending(x => x.Key);
UpdateContent(groups7);
break;
case EVEMailMessagesGrouping.Recipient:
IOrderedEnumerable> groups8 =
eveMailMessages.GroupBy(x => x.ToCharacters.First()).OrderBy(x => x.Key);
UpdateContent(groups8);
break;
case EVEMailMessagesGrouping.RecipientDesc:
IOrderedEnumerable> groups9 =
eveMailMessages.GroupBy(x => x.ToCharacters.First()).OrderByDescending(x => x.Key);
UpdateContent(groups9);
break;
case EVEMailMessagesGrouping.CorpOrAlliance:
IOrderedEnumerable> groups10 =
eveMailMessages.GroupBy(x => x.ToCorpOrAlliance).OrderBy(x => x.Key);
UpdateContent(groups10);
break;
case EVEMailMessagesGrouping.CorpOrAllianceDesc:
IOrderedEnumerable> groups11 =
eveMailMessages.GroupBy(x => x.ToCorpOrAlliance).OrderByDescending(x => x.Key);
UpdateContent(groups11);
break;
case EVEMailMessagesGrouping.MailingList:
IOrderedEnumerable> groups12 =
eveMailMessages.GroupBy(x => x.ToMailingLists.First()).OrderBy(x => x.Key);
UpdateContent(groups12);
break;
case EVEMailMessagesGrouping.MailingListDesc:
IOrderedEnumerable> groups13 =
eveMailMessages.GroupBy(x => x.ToMailingLists.First()).OrderByDescending(x => x.Key);
UpdateContent(groups13);
break;
}
}
///
/// Updates the content of the listview.
///
///
///
private void UpdateContent(IEnumerable> groups)
{
lvMailMessages.Items.Clear();
lvMailMessages.Groups.Clear();
// Add the groups
foreach (IGrouping group in groups)
{
string groupText;
if (group.Key is EveMailState)
groupText = ((EveMailState)(object)group.Key).GetHeader();
else if (group.Key is DateTime)
groupText = ((DateTime)(object)group.Key).ToShortDateString();
else
groupText = group.Key.ToString();
ListViewGroup listGroup = new ListViewGroup(groupText);
lvMailMessages.Groups.Add(listGroup);
// Add the items in every group
lvMailMessages.Items.AddRange(group.Select(eveMailMessage => new
{
eveMailMessage,
item = new ListViewItem(eveMailMessage.SenderName, listGroup)
{
UseItemStyleForSubItems = false,
Tag = eveMailMessage
}
}).Select(x => CreateSubItems(x.eveMailMessage, x.item)).ToArray());
}
}
///
/// Creates the list view sub items.
///
/// The mail message.
/// The item.
private ListViewItem CreateSubItems(EveMailMessage eveMailMessage, ListViewItem item)
{
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvMailMessages.Columns.Count + 1)
{
item.SubItems.Add(string.Empty);
}
// Creates the subitems
for (int i = 0; i < lvMailMessages.Columns.Count; i++)
{
SetColumn(eveMailMessage, item.SubItems[i], (EveMailMessageColumn)lvMailMessages.Columns[i].Tag);
}
return item;
}
///
/// Adjusts the columns.
///
private void AdjustColumns()
{
foreach (ColumnHeader column in lvMailMessages.Columns)
{
if (m_columns[column.Index].Width == -1)
m_columns[column.Index].Width = -2;
column.Width = m_columns[column.Index].Width;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column and not set to auto-resize
if (column.Index != lvMailMessages.Columns.Count - 1 || m_columns[column.Index].Width != -2)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (lvMailMessages.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += lvMailMessages.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
///
/// Updates the item sorter.
///
private void UpdateSort()
{
lvMailMessages.ListViewItemSorter = new ListViewItemComparerByTag(
new EveMailMessageComparer(m_sortCriteria, m_sortAscending));
UpdateSortVisualFeedback();
}
///
/// Updates the sort feedback (the arrow on the header).
///
private void UpdateSortVisualFeedback()
{
foreach (ColumnHeader columnHeader in lvMailMessages.Columns.Cast())
{
EveMailMessageColumn column = (EveMailMessageColumn)columnHeader.Tag;
if (m_sortCriteria == column)
columnHeader.ImageIndex = m_sortAscending ? 0 : 1;
else
columnHeader.ImageIndex = 2;
}
}
///
/// Updates the listview sub-item.
///
///
///
///
private static void SetColumn(EveMailMessage eveMailMessage, ListViewItem.ListViewSubItem item, EveMailMessageColumn column)
{
switch (column)
{
case EveMailMessageColumn.SenderName:
item.Text = eveMailMessage.SenderName;
break;
case EveMailMessageColumn.Title:
item.Text = eveMailMessage.Title;
break;
case EveMailMessageColumn.SentDate:
DateTime sentDateTime = eveMailMessage.SentDate.ToLocalTime();
item.Text = $"{sentDateTime:ddd} {sentDateTime:G}";
break;
case EveMailMessageColumn.ToCharacters:
item.Text = string.Join(", ", eveMailMessage.ToCharacters);
break;
case EveMailMessageColumn.ToCorpOrAlliance:
item.Text = eveMailMessage.ToCorpOrAlliance;
break;
case EveMailMessageColumn.ToMailingList:
item.Text = string.Join(", ", eveMailMessage.ToMailingLists);
break;
default:
throw new NotImplementedException();
}
}
///
/// Updates the pane position.
///
private void UpdatePanePosition()
{
switch (PanePosition)
{
case ReadingPanePositioning.Off:
splitContainerMailMessages.Panel2Collapsed = true;
break;
case ReadingPanePositioning.Bottom:
splitContainerMailMessages.Orientation = Orientation.Horizontal;
splitContainerMailMessages.Panel2Collapsed = false;
break;
case ReadingPanePositioning.Right:
splitContainerMailMessages.Orientation = Orientation.Vertical;
splitContainerMailMessages.Panel2Collapsed = false;
break;
default:
throw new NotImplementedException();
}
}
#endregion
#region Helper Methods
///
/// Tries to open the selected mail in the EVEMon Mail Window.
///
private void ReadMailLocal()
{
ListViewItem item = lvMailMessages.SelectedItems[0];
EveMailMessage message = (EveMailMessage)item.Tag;
// Show or bring to front if a window with the same EVE mail message already exists
WindowsFactory.ShowByTag(message);
}
///
/// Checks the given text matches the item.
///
/// The x.
/// The text.
///
/// true if [is text matching] [the specified x]; otherwise, false.
///
private static bool IsTextMatching(EveMailMessage x, string text) => string.IsNullOrEmpty(text)
|| x.SenderName.ToUpperInvariant().Contains(text, ignoreCase: true)
|| x.Title.ToUpperInvariant().Contains(text, ignoreCase: true)
|| x.ToCorpOrAlliance.ToUpperInvariant().Contains(text, ignoreCase: true)
|| x.ToCharacters.Any(y => y.ToUpperInvariant().Contains(text, ignoreCase: true))
|| x.EVEMailBody.BodyText.ToUpperInvariant().Contains(text, ignoreCase: true);
///
/// Called when selection changed.
///
private void OnSelectionChanged()
{
if (lvMailMessages.SelectedItems.Count == 0)
{
eveMailReadingPane.HidePane();
return;
}
EveMailMessage selectedObject = lvMailMessages.SelectedItems[0].Tag as EveMailMessage;
if (selectedObject == null)
{
eveMailReadingPane.HidePane();
return;
}
// If we haven't done it yet, download the mail body
if (selectedObject.EVEMailBody.MessageID == 0)
{
selectedObject.GetMailBody();
return;
}
eveMailReadingPane.SelectedObject = selectedObject;
}
#endregion
#region Local Event Handlers
///
/// Exports item info to CSV format.
///
///
///
private void exportToCSVToolStripMenuItem_Click(object sender, EventArgs e)
{
ListViewExporter.CreateCSV(lvMailMessages);
}
///
/// Shows the context menu only when a message is selected.
///
///
///
private void contextMenu_Opening(object sender, CancelEventArgs e)
{
mailReadLocal.Enabled = lvMailMessages.SelectedItems.Count != 0;
}
///
/// When the selection update timer ticks, we process the changes caused by a selection change.
///
/// The source of the event.
/// The instance containing the event data.
private void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
OnSelectionChanged();
}
///
/// When the user selects another item, we do not immediately process the change but rather delay it through a timer.
///
/// The source of the event.
/// The instance containing the event data.
private void lvMailMessages_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (timer.Enabled)
return;
timer.Start();
}
///
/// Opens a window form to display the EVE mail body.
///
/// The source of the event.
/// The instance containing the event data.
private void lvMailMessages_DoubleClick(object sender, EventArgs e)
{
ReadMailLocal();
}
///
/// On column reorder we update the settings.
///
///
///
private void lvMailMessages_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
m_columnsChanged = true;
}
///
/// When the user manually resizes a column, we make sure to update the column preferences.
///
///
///
private void lvMailMessages_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (m_isUpdatingColumns || m_columns.Count <= e.ColumnIndex)
return;
if (m_columns[e.ColumnIndex].Width == lvMailMessages.Columns[e.ColumnIndex].Width)
return;
m_columns[e.ColumnIndex].Width = lvMailMessages.Columns[e.ColumnIndex].Width;
m_columnsChanged = true;
}
///
/// When the user clicks a column header, we update the sorting.
///
///
///
private void lvMailMessages_ColumnClick(object sender, ColumnClickEventArgs e)
{
EveMailMessageColumn column = (EveMailMessageColumn)lvMailMessages.Columns[e.Column].Tag;
if (m_sortCriteria == column)
m_sortAscending = !m_sortAscending;
else
{
m_sortCriteria = column;
m_sortAscending = true;
}
m_isUpdatingColumns = true;
// Updates the item sorter
UpdateSort();
m_isUpdatingColumns = false;
}
///
/// When the mouse gets pressed, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
return;
lvMailMessages.Cursor = Cursors.Default;
}
///
/// When the mouse moves over the list, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
return;
lvMailMessages.Cursor = CustomCursors.ContextMenu;
}
///
/// Picking "Read" in the context menu.
///
///
///
private void mailReadLocal_Click(object sender, EventArgs e)
{
ReadMailLocal();
}
# endregion
#region Global Events
///
/// On timer tick, we update the column settings if any changes have been made to them.
///
///
///
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
if (!Visible || !m_columnsChanged)
return;
Settings.UI.MainWindow.EVEMailMessages.Columns.Clear();
Settings.UI.MainWindow.EVEMailMessages.Columns.AddRange(Columns.Cast());
// Recreate the columns
Columns = Settings.UI.MainWindow.EVEMailMessages.Columns;
m_columnsChanged = false;
}
///
/// When the mail messages change update the list.
///
///
///
private void EveMonClient_CharacterEVEMailMessagesUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
EVEMailMessages = Character.EVEMailMessages;
UpdateColumns();
}
///
/// When the mailing lists change update the list.
///
///
///
private void EveMonClient_CharacterEVEMailingListsUpdated(object sender, CharacterChangedEventArgs e)
{
UpdateColumns();
}
///
/// When the mail message body gets downloaded update the reading pane.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_CharacterEVEMailBodyDownloaded(object sender, CharacterChangedEventArgs e)
{
if (e.Character != Character)
return;
OnSelectionChanged();
}
///
/// When the EveIDToName list updates, update the list.
///
///
///
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
UpdateColumns();
}
///
/// Handles the NotificationSent event of the EveMonClient control.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_NotificationSent(object sender, NotificationEventArgs e)
{
if (Character == null)
return;
APIErrorNotificationEventArgs notification = e as APIErrorNotificationEventArgs;
CCPAPIResult notificationResult =
notification?.Result as CCPAPIResult;
if (notificationResult == null)
return;
// In case there was an error, hide the pane
if (notification.Result.HasError)
eveMailReadingPane.HidePane();
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveMailMessagesList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
AAAAAk1TRnQBSQFMAgEBAwEAAawBCAGsAQgBEAEAARABAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEQBgABCP8A/wD/AP8A/wD/AP8A/wAaAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
AQABAQUAAYAXAAP/AQAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAB8AEPAf4BfwL/AgAB+AEfAfwBPwL/
AgAB/AE/AfgBHwL/AgAB/gF/AfABDwL/AgAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAL
170, 20
103, 17
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveNotificationsList.Designer.cs
================================================
using EVEMon.Controls;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEveNotificationsList
{
///
/// 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(CharacterEveNotificationsList));
this.splitContainerNotifications = new System.Windows.Forms.SplitContainer();
this.lvNotifications = new System.Windows.Forms.ListView();
this.chSenderName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chSentDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.exportToCSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ilIcons = new System.Windows.Forms.ImageList(this.components);
this.eveNotificationReadingPane = new EVEMon.Controls.ReadingPane();
this.noEVENotificationsLabel = new System.Windows.Forms.Label();
this.timer = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.splitContainerNotifications)).BeginInit();
this.splitContainerNotifications.Panel1.SuspendLayout();
this.splitContainerNotifications.Panel2.SuspendLayout();
this.splitContainerNotifications.SuspendLayout();
this.contextMenu.SuspendLayout();
this.SuspendLayout();
//
// splitContainerNotifications
//
this.splitContainerNotifications.BackColor = System.Drawing.SystemColors.ControlDark;
this.splitContainerNotifications.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainerNotifications.Location = new System.Drawing.Point(0, 0);
this.splitContainerNotifications.Name = "splitContainerNotifications";
this.splitContainerNotifications.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainerNotifications.Panel1
//
this.splitContainerNotifications.Panel1.Controls.Add(this.lvNotifications);
//
// splitContainerNotifications.Panel2
//
this.splitContainerNotifications.Panel2.Controls.Add(this.eveNotificationReadingPane);
this.splitContainerNotifications.Size = new System.Drawing.Size(454, 434);
this.splitContainerNotifications.SplitterDistance = 288;
this.splitContainerNotifications.SplitterWidth = 6;
this.splitContainerNotifications.TabIndex = 3;
//
// lvNotifications
//
this.lvNotifications.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvNotifications.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chSenderName,
this.chType,
this.chSentDate});
this.lvNotifications.ContextMenuStrip = this.contextMenu;
this.lvNotifications.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvNotifications.FullRowSelect = true;
this.lvNotifications.HideSelection = false;
this.lvNotifications.Location = new System.Drawing.Point(0, 0);
this.lvNotifications.MultiSelect = false;
this.lvNotifications.Name = "lvNotifications";
this.lvNotifications.Size = new System.Drawing.Size(454, 288);
this.lvNotifications.SmallImageList = this.ilIcons;
this.lvNotifications.TabIndex = 0;
this.lvNotifications.UseCompatibleStateImageBehavior = false;
this.lvNotifications.View = System.Windows.Forms.View.Details;
this.lvNotifications.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvNotifications_ColumnClick);
this.lvNotifications.ColumnReordered += new System.Windows.Forms.ColumnReorderedEventHandler(this.lvNotifications_ColumnReordered);
this.lvNotifications.ColumnWidthChanged += new System.Windows.Forms.ColumnWidthChangedEventHandler(this.lvNotifications_ColumnWidthChanged);
this.lvNotifications.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvNotifications_ItemSelectionChanged);
this.lvNotifications.DoubleClick += new System.EventHandler(this.lvNotifications_DoubleClick);
//
// chSenderName
//
this.chSenderName.Text = "From";
//
// chType
//
this.chType.Text = "Subject";
this.chType.Width = 121;
//
// chSentDate
//
this.chSentDate.Text = "Received";
this.chSentDate.Width = 90;
//
// contextMenu
//
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.exportToCSVToolStripMenuItem});
this.contextMenu.Name = "ShipPropertiesContextMenu";
this.contextMenu.Size = new System.Drawing.Size(157, 48);
//
// exportToCSVToolStripMenuItem
//
this.exportToCSVToolStripMenuItem.Name = "exportToCSVToolStripMenuItem";
this.exportToCSVToolStripMenuItem.Size = new System.Drawing.Size(156, 22);
this.exportToCSVToolStripMenuItem.Text = "Export To CSV...";
this.exportToCSVToolStripMenuItem.Click += new System.EventHandler(this.exportToCSVToolStripMenuItem_Click);
//
// ilIcons
//
this.ilIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilIcons.ImageStream")));
this.ilIcons.TransparentColor = System.Drawing.Color.Transparent;
this.ilIcons.Images.SetKeyName(0, "arrow_up.png");
this.ilIcons.Images.SetKeyName(1, "arrow_down.png");
this.ilIcons.Images.SetKeyName(2, "16x16Transparant.png");
//
// eveNotificationReadingPane
//
this.eveNotificationReadingPane.Dock = System.Windows.Forms.DockStyle.Fill;
this.eveNotificationReadingPane.Location = new System.Drawing.Point(0, 0);
this.eveNotificationReadingPane.Name = "eveNotificationReadingPane";
this.eveNotificationReadingPane.Size = new System.Drawing.Size(454, 140);
this.eveNotificationReadingPane.TabIndex = 0;
//
// noEVENotificationsLabel
//
this.noEVENotificationsLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noEVENotificationsLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noEVENotificationsLabel.Location = new System.Drawing.Point(0, 0);
this.noEVENotificationsLabel.Name = "noEVENotificationsLabel";
this.noEVENotificationsLabel.Size = new System.Drawing.Size(454, 434);
this.noEVENotificationsLabel.TabIndex = 4;
this.noEVENotificationsLabel.Text = "No EVE notifications are available.";
this.noEVENotificationsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// timer
//
this.timer.Tick += new System.EventHandler(this.timer_Tick);
//
// CharacterEveNotificationsList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.splitContainerNotifications);
this.Controls.Add(this.noEVENotificationsLabel);
this.Name = "CharacterEveNotificationsList";
this.Size = new System.Drawing.Size(454, 434);
this.splitContainerNotifications.Panel1.ResumeLayout(false);
this.splitContainerNotifications.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerNotifications)).EndInit();
this.splitContainerNotifications.ResumeLayout(false);
this.contextMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainerNotifications;
private System.Windows.Forms.ListView lvNotifications;
private System.Windows.Forms.ColumnHeader chSenderName;
private System.Windows.Forms.ColumnHeader chType;
private System.Windows.Forms.ColumnHeader chSentDate;
private ReadingPane eveNotificationReadingPane;
private System.Windows.Forms.Label noEVENotificationsLabel;
private System.Windows.Forms.ImageList ilIcons;
private System.Windows.Forms.Timer timer;
private System.Windows.Forms.ContextMenuStrip contextMenu;
private System.Windows.Forms.ToolStripMenuItem exportToCSVToolStripMenuItem;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveNotificationsList.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Collections;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.UISettings;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Interfaces;
using EVEMon.Common.Models;
using EVEMon.Common.Models.Comparers;
using EVEMon.Common.Models.Extended;
using EVEMon.Common.Notifications;
using EVEMon.Common.Serialization.Eve;
using EVEMon.Common.SettingsObjects;
using EVEMon.DetailsWindow;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterEveNotificationsList : UserControl, IListView
{
#region Fields
private readonly List m_columns = new List();
private readonly List m_list = new List();
private EVENotificationsGrouping m_grouping;
private EveNotificationColumn m_sortCriteria;
private ReadingPanePositioning m_panePosition;
private string m_textFilter = string.Empty;
private bool m_sortAscending;
private bool m_columnsChanged;
private bool m_isUpdatingColumns;
private bool m_init;
#endregion
#region Constructor
///
/// Constructor.
///
public CharacterEveNotificationsList()
{
InitializeComponent();
eveNotificationReadingPane.HidePane();
splitContainerNotifications.Hide();
lvNotifications.Hide();
lvNotifications.AllowColumnReorder = true;
lvNotifications.Columns.Clear();
noEVENotificationsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
ListViewHelper.EnableDoubleBuffer(lvNotifications);
lvNotifications.MouseDown += listView_MouseDown;
lvNotifications.MouseMove += listView_MouseMove;
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets the text filter.
///
[Browsable(false)]
public string TextFilter
{
get { return m_textFilter; }
set
{
m_textFilter = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the grouping mode.
///
[Browsable(false)]
public Enum Grouping
{
get { return m_grouping; }
set
{
m_grouping = (EVENotificationsGrouping)value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the pane position.
///
internal ReadingPanePositioning PanePosition
{
get { return m_panePosition; }
set
{
m_panePosition = value;
UpdatePanePosition();
}
}
///
/// Gets or sets the enumeration of EVE mail messages to display.
///
private IEnumerable EVENotifications
{
get { return m_list; }
set
{
m_list.Clear();
if (value == null)
return;
m_list.AddRange(value);
}
}
///
/// Gets or sets the settings used for columns.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable Columns
{
get
{
// Add the visible columns; matching the display order
List newColumns = new List();
foreach (ColumnHeader header in lvNotifications.Columns.Cast().OrderBy(x => x.DisplayIndex))
{
EveNotificationColumnSettings columnSetting =
m_columns.First(x => x.Column == (EveNotificationColumn)header.Tag);
if (columnSetting.Width > -1)
columnSetting.Width = header.Width;
newColumns.Add(columnSetting);
}
// Then add the other columns
newColumns.AddRange(m_columns.Where(x => !x.Visible));
return newColumns;
}
set
{
m_columns.Clear();
if (value != null)
m_columns.AddRange(value.Cast());
if (m_init)
UpdateColumns();
}
}
#endregion
# region Inherited Events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
EveMonClient.TimerTick += EveMonClient_TimerTick;
EveMonClient.CharacterEVENotificationsUpdated += EveMonClient_CharacterEVENotificationsUpdated;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
EveMonClient.NotificationRefTypesUpdated += EveMonClient_NotificationRefTypesUpdated;
EveNotificationTextParser.NotificationTextParserUpdated += EveNotificationTextParser_NotificationTextParserUpdated;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.TimerTick -= EveMonClient_TimerTick;
EveMonClient.CharacterEVENotificationsUpdated -= EveMonClient_CharacterEVENotificationsUpdated;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
EveMonClient.NotificationRefTypesUpdated -= EveMonClient_NotificationRefTypesUpdated;
EveNotificationTextParser.NotificationTextParserUpdated -= EveNotificationTextParser_NotificationTextParserUpdated;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (DesignMode || this.IsDesignModeHosted() || Character == null || !Visible)
return;
// Prevents the properties to call UpdateColumns() till we set all properties
m_init = false;
lvNotifications.Visible = false;
eveNotificationReadingPane.HidePane();
EVENotifications = Character?.EVENotifications;
Columns = Settings.UI.MainWindow.EVENotifications.Columns;
Grouping = Character?.UISettings.EVENotificationsGroupBy;
PanePosition = Settings.UI.MainWindow.EVENotifications.ReadingPanePosition;
TextFilter = string.Empty;
UpdateColumns();
m_init = true;
UpdateListVisibility();
}
# endregion
#region Update Methods
///
/// Autoresizes the columns.
///
public void AutoResizeColumns()
{
m_columns.ForEach(column =>
{
if (column.Visible)
column.Width = -2;
});
UpdateColumns();
}
///
/// Updates the columns.
///
private void UpdateColumns()
{
// Returns if not visible
if (!Visible)
return;
lvNotifications.BeginUpdate();
m_isUpdatingColumns = true;
try
{
lvNotifications.Columns.Clear();
lvNotifications.Groups.Clear();
lvNotifications.Items.Clear();
foreach (EveNotificationColumnSettings column in m_columns.Where(x => x.Visible))
{
ColumnHeader header = lvNotifications.Columns.Add(column.Column.GetHeader(), column.Width);
header.Tag = column.Column;
}
// We update the content
UpdateContent();
}
finally
{
lvNotifications.EndUpdate();
m_isUpdatingColumns = false;
}
}
///
/// Updates the content of the listview.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
int scrollBarPosition = lvNotifications.GetVerticalScrollBarPosition();
// Store the selected item (if any) to restore it after the update
int selectedItem = lvNotifications.SelectedItems.Count > 0 ? lvNotifications.
SelectedItems[0].Tag.GetHashCode() : 0;
lvNotifications.BeginUpdate();
splitContainerNotifications.Visible = false;
try
{
IEnumerable eveNotifications = m_list .Where(x => x.SentDate
!= DateTime.MinValue).Where(x => IsTextMatching(x, m_textFilter));
UpdateSort();
UpdateContentByGroup(eveNotifications);
// Restore the selected item (if any)
if (selectedItem > 0)
{
foreach (ListViewItem lvItem in lvNotifications.Items.Cast()
.Where(lvItem => lvItem.Tag.GetHashCode() == selectedItem))
{
lvItem.Selected = true;
}
}
// Adjust the size of the columns
AdjustColumns();
UpdateListVisibility();
}
finally
{
lvNotifications.EndUpdate();
lvNotifications.SetVerticalScrollBarPosition(scrollBarPosition);
}
}
///
/// Updates the list visibility.
///
private void UpdateListVisibility()
{
// Display or hide the "no EVE mail messages" label
if (!m_init)
return;
noEVENotificationsLabel.Visible = lvNotifications.Items.Count == 0;
lvNotifications.Visible = splitContainerNotifications.Visible = !noEVENotificationsLabel.Visible;
}
///
/// Updates the content by group.
///
/// The eve notifications.
private void UpdateContentByGroup(IEnumerable eveNotifications)
{
switch (m_grouping)
{
case EVENotificationsGrouping.Type:
IOrderedEnumerable> groups0 =
eveNotifications.GroupBy(x => x.TypeName).OrderBy(x => x.Key);
UpdateContent(groups0);
break;
case EVENotificationsGrouping.TypeDesc:
IOrderedEnumerable> groups1 =
eveNotifications.GroupBy(x => x.TypeName).OrderByDescending(x => x.Key);
UpdateContent(groups1);
break;
case EVENotificationsGrouping.SentDate:
IOrderedEnumerable> groups2 =
eveNotifications.GroupBy(x => x.SentDate.ToLocalTime().Date).OrderBy(x => x.Key);
UpdateContent(groups2);
break;
case EVENotificationsGrouping.SentDateDesc:
IOrderedEnumerable> groups3 =
eveNotifications.GroupBy(x => x.SentDate.ToLocalTime().Date).OrderByDescending(x => x.Key);
UpdateContent(groups3);
break;
case EVENotificationsGrouping.Sender:
IOrderedEnumerable> groups4 =
eveNotifications.GroupBy(x => x.SenderName).OrderBy(x => x.Key);
UpdateContent(groups4);
break;
case EVENotificationsGrouping.SenderDesc:
IOrderedEnumerable> groups5 =
eveNotifications.GroupBy(x => x.SenderName).OrderByDescending(x => x.Key);
UpdateContent(groups5);
break;
}
}
///
/// Updates the content of the listview.
///
///
///
private void UpdateContent(IEnumerable> groups)
{
lvNotifications.Items.Clear();
lvNotifications.Groups.Clear();
// Add the groups
foreach (IGrouping group in groups)
{
string groupText;
if (group.Key is EveMailState)
groupText = ((EveMailState)(object)group.Key).GetHeader();
else if (group.Key is DateTime)
groupText = ((DateTime)(object)group.Key).ToShortDateString();
else
groupText = group.Key.ToString();
ListViewGroup listGroup = new ListViewGroup(groupText);
lvNotifications.Groups.Add(listGroup);
// Add the items in every group
lvNotifications.Items.AddRange(
group.Select(eveNotification => new
{
eveNotification,
item = new ListViewItem(eveNotification.SenderName, listGroup)
{
UseItemStyleForSubItems = false,
Tag = eveNotification
}
}).Select(x => CreateSubItems(x.eveNotification, x.item)).ToArray());
}
}
///
/// Creates the list view sub items.
///
/// The notification.
/// The item.
private ListViewItem CreateSubItems(EveNotification eveNotification, ListViewItem item)
{
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvNotifications.Columns.Count + 1)
{
item.SubItems.Add(string.Empty);
}
// Creates the subitems
for (int i = 0; i < lvNotifications.Columns.Count; i++)
{
SetColumn(eveNotification, item.SubItems[i], (EveNotificationColumn)lvNotifications.Columns[i].Tag);
}
return item;
}
///
/// Adjusts the columns.
///
private void AdjustColumns()
{
foreach (ColumnHeader column in lvNotifications.Columns)
{
if (m_columns[column.Index].Width == -1)
m_columns[column.Index].Width = -2;
column.Width = m_columns[column.Index].Width;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column and not set to auto-resize
if (column.Index != lvNotifications.Columns.Count - 1 || m_columns[column.Index].Width != -2)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (lvNotifications.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += lvNotifications.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
///
/// Updates the item sorter.
///
private void UpdateSort()
{
lvNotifications.ListViewItemSorter = new ListViewItemComparerByTag(
new EveNotificationComparer(m_sortCriteria, m_sortAscending));
UpdateSortVisualFeedback();
}
///
/// Updates the sort feedback (the arrow on the header).
///
private void UpdateSortVisualFeedback()
{
foreach (ColumnHeader columnHeader in lvNotifications.Columns.Cast())
{
EveNotificationColumn column = (EveNotificationColumn)columnHeader.Tag;
if (m_sortCriteria == column)
columnHeader.ImageIndex = m_sortAscending ? 0 : 1;
else
columnHeader.ImageIndex = 2;
}
}
///
/// Updates the listview sub-item.
///
///
///
///
private static void SetColumn(EveNotification eveNotification, ListViewItem.ListViewSubItem item,
EveNotificationColumn column)
{
switch (column)
{
case EveNotificationColumn.SenderName:
item.Text = eveNotification.SenderName;
break;
case EveNotificationColumn.Type:
item.Text = eveNotification.Title;
break;
case EveNotificationColumn.SentDate:
DateTime sentDateTime = eveNotification.SentDate.ToLocalTime();
item.Text = $"{sentDateTime:ddd} {sentDateTime:G}";
break;
default:
throw new NotImplementedException();
}
}
///
/// Updates the pane position.
///
private void UpdatePanePosition()
{
switch (PanePosition)
{
case ReadingPanePositioning.Off:
splitContainerNotifications.Panel2Collapsed = true;
break;
case ReadingPanePositioning.Bottom:
splitContainerNotifications.Orientation = Orientation.Horizontal;
splitContainerNotifications.Panel2Collapsed = false;
break;
case ReadingPanePositioning.Right:
splitContainerNotifications.Orientation = Orientation.Vertical;
splitContainerNotifications.Panel2Collapsed = false;
break;
default:
throw new NotImplementedException();
}
}
#endregion
#region Helper Methods
///
/// Checks the given text matches the item.
///
/// The x.
/// The text.
///
/// true if [is text matching] [the specified x]; otherwise, false.
///
private static bool IsTextMatching(EveNotification x, string text) => string.IsNullOrEmpty(text)
|| x.SenderName.ToUpperInvariant().Contains(text, ignoreCase: true)
|| x.Title.ToUpperInvariant().Contains(text, ignoreCase: true)
|| x.Text.ToUpperInvariant().Contains(text, ignoreCase: true);
///
/// Called when selection changed.
///
private void OnSelectionChanged()
{
if (lvNotifications.SelectedItems.Count == 0)
{
eveNotificationReadingPane.HidePane();
return;
}
EveNotification selectedObject = lvNotifications.SelectedItems[0].Tag as EveNotification;
if (selectedObject == null)
{
eveNotificationReadingPane.HidePane();
return;
}
eveNotificationReadingPane.SelectedObject = selectedObject;
}
#endregion
#region Local Event Handlers
///
/// Exports item info to CSV format.
///
///
///
private void exportToCSVToolStripMenuItem_Click(object sender, EventArgs e)
{
ListViewExporter.CreateCSV(lvNotifications);
}
///
/// When the selection update timer ticks, we process the changes caused by a selection change.
///
/// The source of the event.
/// The instance containing the event data.
private void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
OnSelectionChanged();
}
///
/// When the user selects another item, we do not immediately process the change but rather delay it through a timer.
///
/// The source of the event.
/// The instance containing the event data.
private void lvNotifications_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (timer.Enabled)
return;
timer.Start();
}
///
/// Opens a window form to display the EVE notification.
///
/// The source of the event.
/// The instance containing the event data.
private void lvNotifications_DoubleClick(object sender, EventArgs e)
{
var items = lvNotifications.SelectedItems;
if (items.Count > 0)
{
var item = items[0];
var notification = (EveNotification)item.Tag;
// Quit if we haven't downloaded the notification text yet
if (notification.EVENotificationText != null)
// Show or bring to front if a window with the same EVE notification already exists
WindowsFactory.ShowByTag(notification);
}
}
///
/// On column reorder we update the settings.
///
///
///
private void lvNotifications_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
m_columnsChanged = true;
}
///
/// When the user manually resizes a column, we make sure to update the column preferences.
///
///
///
private void lvNotifications_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (m_isUpdatingColumns || m_columns.Count <= e.ColumnIndex)
return;
if (m_columns[e.ColumnIndex].Width == lvNotifications.Columns[e.ColumnIndex].Width)
return;
m_columns[e.ColumnIndex].Width = lvNotifications.Columns[e.ColumnIndex].Width;
m_columnsChanged = true;
}
///
/// When the user clicks a column header, we update the sorting.
///
///
///
private void lvNotifications_ColumnClick(object sender, ColumnClickEventArgs e)
{
var column = (EveNotificationColumn)lvNotifications.Columns[e.Column].Tag;
if (m_sortCriteria == column)
m_sortAscending = !m_sortAscending;
else
{
m_sortCriteria = column;
m_sortAscending = true;
}
m_isUpdatingColumns = true;
// Updates the item sorter
UpdateSort();
m_isUpdatingColumns = false;
}
///
/// When the mouse gets pressed, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
return;
lvNotifications.Cursor = Cursors.Default;
}
///
/// When the mouse moves over the list, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
return;
lvNotifications.Cursor = CustomCursors.ContextMenu;
}
# endregion
#region Global Events
///
/// On timer tick, we update the column settings if any changes have been made to them.
///
///
///
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
if (!Visible || !m_columnsChanged)
return;
Settings.UI.MainWindow.EVENotifications.Columns.Clear();
Settings.UI.MainWindow.EVENotifications.Columns.AddRange(Columns.Cast());
// Recreate the columns
Columns = Settings.UI.MainWindow.EVENotifications.Columns;
m_columnsChanged = false;
}
///
/// When the notifications change update the list.
///
///
///
private void EveMonClient_CharacterEVENotificationsUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
EVENotifications = Character.EVENotifications;
UpdateColumns();
}
///
/// When the EveIDToName list updates, update the list.
///
///
///
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
UpdateColumns();
}
///
/// When the NotificationRefTypes list updates, update the list.
///
///
///
private void EveMonClient_NotificationRefTypesUpdated(object sender, EventArgs e)
{
UpdateColumns();
}
///
/// When the notification text parser updates, update the list.
///
///
///
private void EveNotificationTextParser_NotificationTextParserUpdated(object sender, EventArgs e)
{
UpdateColumns();
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterEveNotificationsList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
178, 17
17, 17
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADi
AAAAAk1TRnQBSQFMAgEBAwEAAXwBCAF8AQgBEAEAARABAAT/AREBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABEAMAAQEBAAEQBgABCP8A/wD/AP8A/wD/AP8A/wAaAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
AQABAQUAAYAXAAP/AQAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAB8AEPAf4BfwL/AgAB+AEfAfwBPwL/
AgAB/AE/AfgBHwL/AgAB/gF/AfABDwL/AgAG/wIABv8CAAb/AgAG/wIABv8CAAb/AgAL
98, 17
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterFactionalWarfareStatsList.Designer.cs
================================================
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterFactionalWarfareStatsList
{
///
/// 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()
{
System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Kills", System.Windows.Forms.HorizontalAlignment.Left);
System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Victory Points", System.Windows.Forms.HorizontalAlignment.Left);
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("Yesterday");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("Last Week");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("Total");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("Yesterday");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("Last Week");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("Total");
System.Windows.Forms.ListViewGroup listViewGroup3 = new System.Windows.Forms.ListViewGroup("General", System.Windows.Forms.HorizontalAlignment.Left);
System.Windows.Forms.ListViewGroup listViewGroup4 = new System.Windows.Forms.ListViewGroup("Kills", System.Windows.Forms.HorizontalAlignment.Left);
System.Windows.Forms.ListViewGroup listViewGroup5 = new System.Windows.Forms.ListViewGroup("Victory Points", System.Windows.Forms.HorizontalAlignment.Left);
System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem("Pilots");
System.Windows.Forms.ListViewItem listViewItem8 = new System.Windows.Forms.ListViewItem("Systems Controlled");
System.Windows.Forms.ListViewItem listViewItem9 = new System.Windows.Forms.ListViewItem("Yesterday");
System.Windows.Forms.ListViewItem listViewItem10 = new System.Windows.Forms.ListViewItem("Last Week");
System.Windows.Forms.ListViewItem listViewItem11 = new System.Windows.Forms.ListViewItem("Total");
System.Windows.Forms.ListViewItem listViewItem12 = new System.Windows.Forms.ListViewItem("Yesterday");
System.Windows.Forms.ListViewItem listViewItem13 = new System.Windows.Forms.ListViewItem("Last Week");
System.Windows.Forms.ListViewItem listViewItem14 = new System.Windows.Forms.ListViewItem("Total");
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharacterFactionalWarfareStatsList));
this.noFactionalWarfareLabel = new System.Windows.Forms.Label();
this.notEnlistedLabel = new System.Windows.Forms.Label();
this.ListPanel = new System.Windows.Forms.Panel();
this.ListSplitContainer = new EVEMon.Common.Controls.PersistentSplitContainer();
this.lvPersonal = new System.Windows.Forms.ListView();
this.chDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chYou = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chAll = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lvMilitia = new System.Windows.Forms.ListView();
this.chMilitia = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chAmarr = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chCaldari = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chGallente = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chMinmatar = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.HeaderTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.FightingPartiesPanel = new System.Windows.Forms.Panel();
this.PlusPictureBox = new System.Windows.Forms.PictureBox();
this.AgainstPictureBox = new System.Windows.Forms.PictureBox();
this.AllyAgainstFactionPictureBox = new System.Windows.Forms.PictureBox();
this.PrimeAgainstFactionPictureBox = new System.Windows.Forms.PictureBox();
this.EnlistedFactionPictureBox = new System.Windows.Forms.PictureBox();
this.FactionPictureBox = new System.Windows.Forms.PictureBox();
this.CorporationPictureBox = new System.Windows.Forms.PictureBox();
this.RankLabel = new System.Windows.Forms.Label();
this.TimeServedLabel = new System.Windows.Forms.Label();
this.FactionLabel = new System.Windows.Forms.Label();
this.CorporationLabel = new System.Windows.Forms.Label();
this.ListPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ListSplitContainer)).BeginInit();
this.ListSplitContainer.Panel1.SuspendLayout();
this.ListSplitContainer.Panel2.SuspendLayout();
this.ListSplitContainer.SuspendLayout();
this.HeaderTableLayoutPanel.SuspendLayout();
this.FightingPartiesPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.PlusPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.AgainstPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.AllyAgainstFactionPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PrimeAgainstFactionPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.EnlistedFactionPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.FactionPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.CorporationPictureBox)).BeginInit();
this.SuspendLayout();
//
// noFactionalWarfareLabel
//
this.noFactionalWarfareLabel.BackColor = System.Drawing.Color.WhiteSmoke;
this.noFactionalWarfareLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noFactionalWarfareLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noFactionalWarfareLabel.Location = new System.Drawing.Point(0, 0);
this.noFactionalWarfareLabel.Name = "noFactionalWarfareLabel";
this.noFactionalWarfareLabel.Size = new System.Drawing.Size(409, 607);
this.noFactionalWarfareLabel.TabIndex = 3;
this.noFactionalWarfareLabel.Text = "Factional Warfare information not available.";
this.noFactionalWarfareLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// notEnlistedLabel
//
this.notEnlistedLabel.BackColor = System.Drawing.Color.WhiteSmoke;
this.notEnlistedLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.notEnlistedLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.notEnlistedLabel.Location = new System.Drawing.Point(0, 0);
this.notEnlistedLabel.Name = "notEnlistedLabel";
this.notEnlistedLabel.Size = new System.Drawing.Size(409, 607);
this.notEnlistedLabel.TabIndex = 4;
this.notEnlistedLabel.Text = "Character not enlisted in Factional Warfare.";
this.notEnlistedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// ListPanel
//
this.ListPanel.Controls.Add(this.ListSplitContainer);
this.ListPanel.Controls.Add(this.HeaderTableLayoutPanel);
this.ListPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ListPanel.Location = new System.Drawing.Point(0, 0);
this.ListPanel.Name = "ListPanel";
this.ListPanel.Size = new System.Drawing.Size(409, 607);
this.ListPanel.TabIndex = 6;
//
// ListSplitContainer
//
this.ListSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.ListSplitContainer.IsSplitterFixed = true;
this.ListSplitContainer.Location = new System.Drawing.Point(0, 70);
this.ListSplitContainer.Name = "ListSplitContainer";
this.ListSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// ListSplitContainer.Panel1
//
this.ListSplitContainer.Panel1.Controls.Add(this.lvPersonal);
//
// ListSplitContainer.Panel2
//
this.ListSplitContainer.Panel2.Controls.Add(this.lvMilitia);
this.ListSplitContainer.RememberDistanceKey = null;
this.ListSplitContainer.Size = new System.Drawing.Size(409, 537);
this.ListSplitContainer.SplitterDistance = 232;
this.ListSplitContainer.SplitterWidth = 1;
this.ListSplitContainer.TabIndex = 9;
//
// lvPersonal
//
this.lvPersonal.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvPersonal.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chDescription,
this.chYou,
this.chAll});
this.lvPersonal.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvPersonal.FullRowSelect = true;
listViewGroup1.Header = "Kills";
listViewGroup1.Name = "Kills";
listViewGroup2.Header = "Victory Points";
listViewGroup2.Name = "Victory Points";
this.lvPersonal.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
listViewGroup1,
listViewGroup2});
this.lvPersonal.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvPersonal.HideSelection = false;
listViewItem1.Group = listViewGroup1;
listViewItem2.Group = listViewGroup1;
listViewItem3.Group = listViewGroup1;
listViewItem4.Group = listViewGroup2;
listViewItem5.Group = listViewGroup2;
listViewItem6.Group = listViewGroup2;
this.lvPersonal.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem1,
listViewItem2,
listViewItem3,
listViewItem4,
listViewItem5,
listViewItem6});
this.lvPersonal.Location = new System.Drawing.Point(0, 0);
this.lvPersonal.MultiSelect = false;
this.lvPersonal.Name = "lvPersonal";
this.lvPersonal.Size = new System.Drawing.Size(409, 232);
this.lvPersonal.TabIndex = 6;
this.lvPersonal.UseCompatibleStateImageBehavior = false;
this.lvPersonal.View = System.Windows.Forms.View.Details;
this.lvPersonal.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.lvPersonal_ColumnWidthChanging);
//
// chDescription
//
this.chDescription.Text = "Personal";
this.chDescription.Width = 101;
//
// chYou
//
this.chYou.Text = "You";
this.chYou.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// chAll
//
this.chAll.Text = "All";
this.chAll.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// lvMilitia
//
this.lvMilitia.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvMilitia.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chMilitia,
this.chAmarr,
this.chCaldari,
this.chGallente,
this.chMinmatar});
this.lvMilitia.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvMilitia.FullRowSelect = true;
listViewGroup3.Header = "General";
listViewGroup3.Name = "General";
listViewGroup4.Header = "Kills";
listViewGroup4.Name = "Kills";
listViewGroup5.Header = "Victory Points";
listViewGroup5.Name = "Victory Points";
this.lvMilitia.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
listViewGroup3,
listViewGroup4,
listViewGroup5});
this.lvMilitia.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvMilitia.HideSelection = false;
listViewItem7.Group = listViewGroup3;
listViewItem8.Group = listViewGroup3;
listViewItem9.Group = listViewGroup4;
listViewItem10.Group = listViewGroup4;
listViewItem11.Group = listViewGroup4;
listViewItem12.Group = listViewGroup5;
listViewItem13.Group = listViewGroup5;
listViewItem14.Group = listViewGroup5;
this.lvMilitia.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem7,
listViewItem8,
listViewItem9,
listViewItem10,
listViewItem11,
listViewItem12,
listViewItem13,
listViewItem14});
this.lvMilitia.Location = new System.Drawing.Point(0, 0);
this.lvMilitia.MultiSelect = false;
this.lvMilitia.Name = "lvMilitia";
this.lvMilitia.Size = new System.Drawing.Size(409, 304);
this.lvMilitia.TabIndex = 7;
this.lvMilitia.UseCompatibleStateImageBehavior = false;
this.lvMilitia.View = System.Windows.Forms.View.Details;
this.lvMilitia.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.lvMilitia_ColumnWidthChanging);
//
// chMilitia
//
this.chMilitia.Text = "Militia";
this.chMilitia.Width = 101;
//
// chAmarr
//
this.chAmarr.Text = "Amarr";
this.chAmarr.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// chCaldari
//
this.chCaldari.Text = "Caldari";
this.chCaldari.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// chGallente
//
this.chGallente.Text = "Gallente";
this.chGallente.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// chMinmatar
//
this.chMinmatar.Text = "Minmatar";
this.chMinmatar.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// HeaderTableLayoutPanel
//
this.HeaderTableLayoutPanel.AutoSize = true;
this.HeaderTableLayoutPanel.BackColor = System.Drawing.Color.WhiteSmoke;
this.HeaderTableLayoutPanel.ColumnCount = 4;
this.HeaderTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 64F));
this.HeaderTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.HeaderTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.HeaderTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 65F));
this.HeaderTableLayoutPanel.Controls.Add(this.FightingPartiesPanel, 1, 0);
this.HeaderTableLayoutPanel.Controls.Add(this.FactionPictureBox, 0, 0);
this.HeaderTableLayoutPanel.Controls.Add(this.CorporationPictureBox, 3, 0);
this.HeaderTableLayoutPanel.Controls.Add(this.RankLabel, 1, 2);
this.HeaderTableLayoutPanel.Controls.Add(this.TimeServedLabel, 2, 2);
this.HeaderTableLayoutPanel.Controls.Add(this.FactionLabel, 1, 1);
this.HeaderTableLayoutPanel.Controls.Add(this.CorporationLabel, 2, 1);
this.HeaderTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Top;
this.HeaderTableLayoutPanel.Location = new System.Drawing.Point(0, 0);
this.HeaderTableLayoutPanel.Name = "HeaderTableLayoutPanel";
this.HeaderTableLayoutPanel.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
this.HeaderTableLayoutPanel.RowCount = 3;
this.HeaderTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.HeaderTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.HeaderTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.HeaderTableLayoutPanel.Size = new System.Drawing.Size(409, 70);
this.HeaderTableLayoutPanel.TabIndex = 8;
//
// FightingPartiesPanel
//
this.HeaderTableLayoutPanel.SetColumnSpan(this.FightingPartiesPanel, 2);
this.FightingPartiesPanel.Controls.Add(this.PlusPictureBox);
this.FightingPartiesPanel.Controls.Add(this.AgainstPictureBox);
this.FightingPartiesPanel.Controls.Add(this.AllyAgainstFactionPictureBox);
this.FightingPartiesPanel.Controls.Add(this.PrimeAgainstFactionPictureBox);
this.FightingPartiesPanel.Controls.Add(this.EnlistedFactionPictureBox);
this.FightingPartiesPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.FightingPartiesPanel.Location = new System.Drawing.Point(64, 3);
this.FightingPartiesPanel.Margin = new System.Windows.Forms.Padding(0);
this.FightingPartiesPanel.Name = "FightingPartiesPanel";
this.FightingPartiesPanel.Size = new System.Drawing.Size(280, 35);
this.FightingPartiesPanel.TabIndex = 7;
//
// PlusPictureBox
//
this.PlusPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.PlusPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("PlusPictureBox.Image")));
this.PlusPictureBox.Location = new System.Drawing.Point(156, 2);
this.PlusPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.PlusPictureBox.Name = "PlusPictureBox";
this.PlusPictureBox.Size = new System.Drawing.Size(32, 32);
this.PlusPictureBox.TabIndex = 6;
this.PlusPictureBox.TabStop = false;
//
// AgainstPictureBox
//
this.AgainstPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.AgainstPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("AgainstPictureBox.Image")));
this.AgainstPictureBox.Location = new System.Drawing.Point(92, 2);
this.AgainstPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.AgainstPictureBox.Name = "AgainstPictureBox";
this.AgainstPictureBox.Size = new System.Drawing.Size(32, 32);
this.AgainstPictureBox.TabIndex = 5;
this.AgainstPictureBox.TabStop = false;
//
// SecondAgainstFactionPictureBox
//
this.AllyAgainstFactionPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.AllyAgainstFactionPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("SecondAgainstFactionPictureBox.Image")));
this.AllyAgainstFactionPictureBox.InitialImage = ((System.Drawing.Image)(resources.GetObject("SecondAgainstFactionPictureBox.InitialImage")));
this.AllyAgainstFactionPictureBox.Location = new System.Drawing.Point(188, 2);
this.AllyAgainstFactionPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.AllyAgainstFactionPictureBox.Name = "AllyAgainstFactionPictureBox";
this.AllyAgainstFactionPictureBox.Size = new System.Drawing.Size(32, 32);
this.AllyAgainstFactionPictureBox.TabIndex = 4;
this.AllyAgainstFactionPictureBox.TabStop = false;
//
// FirstAgainstFactionPictureBox
//
this.PrimeAgainstFactionPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.PrimeAgainstFactionPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("FirstAgainstFactionPictureBox.Image")));
this.PrimeAgainstFactionPictureBox.InitialImage = ((System.Drawing.Image)(resources.GetObject("FirstAgainstFactionPictureBox.InitialImage")));
this.PrimeAgainstFactionPictureBox.Location = new System.Drawing.Point(124, 2);
this.PrimeAgainstFactionPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.PrimeAgainstFactionPictureBox.Name = "PrimeAgainstFactionPictureBox";
this.PrimeAgainstFactionPictureBox.Size = new System.Drawing.Size(32, 32);
this.PrimeAgainstFactionPictureBox.TabIndex = 1;
this.PrimeAgainstFactionPictureBox.TabStop = false;
//
// EnlistedFactionPictureBox
//
this.EnlistedFactionPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
this.EnlistedFactionPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("EnlistedFactionPictureBox.Image")));
this.EnlistedFactionPictureBox.InitialImage = ((System.Drawing.Image)(resources.GetObject("EnlistedFactionPictureBox.InitialImage")));
this.EnlistedFactionPictureBox.Location = new System.Drawing.Point(60, 2);
this.EnlistedFactionPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.EnlistedFactionPictureBox.Name = "EnlistedFactionPictureBox";
this.EnlistedFactionPictureBox.Size = new System.Drawing.Size(32, 32);
this.EnlistedFactionPictureBox.TabIndex = 0;
this.EnlistedFactionPictureBox.TabStop = false;
//
// FactionPictureBox
//
this.FactionPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("FactionPictureBox.Image")));
this.FactionPictureBox.InitialImage = ((System.Drawing.Image)(resources.GetObject("FactionPictureBox.InitialImage")));
this.FactionPictureBox.Location = new System.Drawing.Point(0, 3);
this.FactionPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.FactionPictureBox.Name = "FactionPictureBox";
this.HeaderTableLayoutPanel.SetRowSpan(this.FactionPictureBox, 3);
this.FactionPictureBox.Size = new System.Drawing.Size(64, 64);
this.FactionPictureBox.TabIndex = 8;
this.FactionPictureBox.TabStop = false;
//
// CorporationPictureBox
//
this.CorporationPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("CorporationPictureBox.Image")));
this.CorporationPictureBox.InitialImage = ((System.Drawing.Image)(resources.GetObject("CorporationPictureBox.InitialImage")));
this.CorporationPictureBox.Location = new System.Drawing.Point(344, 3);
this.CorporationPictureBox.Margin = new System.Windows.Forms.Padding(0);
this.CorporationPictureBox.Name = "CorporationPictureBox";
this.HeaderTableLayoutPanel.SetRowSpan(this.CorporationPictureBox, 3);
this.CorporationPictureBox.Size = new System.Drawing.Size(64, 64);
this.CorporationPictureBox.TabIndex = 9;
this.CorporationPictureBox.TabStop = false;
//
// RankLabel
//
this.RankLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.RankLabel.AutoSize = true;
this.RankLabel.Location = new System.Drawing.Point(165, 54);
this.RankLabel.Name = "RankLabel";
this.RankLabel.Size = new System.Drawing.Size(36, 13);
this.RankLabel.TabIndex = 3;
this.RankLabel.Text = "Rank:";
this.RankLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// TimeServedLabel
//
this.TimeServedLabel.AutoSize = true;
this.TimeServedLabel.Location = new System.Drawing.Point(207, 54);
this.TimeServedLabel.Name = "TimeServedLabel";
this.TimeServedLabel.Size = new System.Drawing.Size(68, 13);
this.TimeServedLabel.TabIndex = 4;
this.TimeServedLabel.Text = "Time served:";
this.TimeServedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// FactionLabel
//
this.FactionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.FactionLabel.AutoSize = true;
this.FactionLabel.Location = new System.Drawing.Point(156, 41);
this.FactionLabel.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0);
this.FactionLabel.Name = "FactionLabel";
this.FactionLabel.Size = new System.Drawing.Size(45, 13);
this.FactionLabel.TabIndex = 10;
this.FactionLabel.Text = "Faction:";
this.FactionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// CorporationLabel
//
this.CorporationLabel.AutoSize = true;
this.CorporationLabel.Location = new System.Drawing.Point(207, 41);
this.CorporationLabel.Margin = new System.Windows.Forms.Padding(3, 3, 3, 0);
this.CorporationLabel.Name = "CorporationLabel";
this.CorporationLabel.Size = new System.Drawing.Size(64, 13);
this.CorporationLabel.TabIndex = 11;
this.CorporationLabel.Text = "Corporation:";
//
// CharacterFactionalWarfareStatsList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.ListPanel);
this.Controls.Add(this.noFactionalWarfareLabel);
this.Controls.Add(this.notEnlistedLabel);
this.Name = "CharacterFactionalWarfareStatsList";
this.Size = new System.Drawing.Size(409, 607);
this.ListPanel.ResumeLayout(false);
this.ListPanel.PerformLayout();
this.ListSplitContainer.Panel1.ResumeLayout(false);
this.ListSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.ListSplitContainer)).EndInit();
this.ListSplitContainer.ResumeLayout(false);
this.HeaderTableLayoutPanel.ResumeLayout(false);
this.HeaderTableLayoutPanel.PerformLayout();
this.FightingPartiesPanel.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.PlusPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.AgainstPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.AllyAgainstFactionPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PrimeAgainstFactionPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.EnlistedFactionPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.FactionPictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.CorporationPictureBox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label noFactionalWarfareLabel;
private System.Windows.Forms.Label notEnlistedLabel;
private System.Windows.Forms.Panel ListPanel;
private System.Windows.Forms.ListView lvPersonal;
private System.Windows.Forms.ColumnHeader chDescription;
private System.Windows.Forms.ColumnHeader chYou;
private System.Windows.Forms.ColumnHeader chAll;
private System.Windows.Forms.ListView lvMilitia;
private System.Windows.Forms.ColumnHeader chMilitia;
private System.Windows.Forms.ColumnHeader chAmarr;
private System.Windows.Forms.ColumnHeader chCaldari;
private System.Windows.Forms.ColumnHeader chGallente;
private System.Windows.Forms.ColumnHeader chMinmatar;
private System.Windows.Forms.TableLayoutPanel HeaderTableLayoutPanel;
private System.Windows.Forms.Label RankLabel;
private Common.Controls.PersistentSplitContainer ListSplitContainer;
private System.Windows.Forms.Label TimeServedLabel;
private System.Windows.Forms.Panel FightingPartiesPanel;
private System.Windows.Forms.PictureBox AllyAgainstFactionPictureBox;
private System.Windows.Forms.PictureBox PrimeAgainstFactionPictureBox;
private System.Windows.Forms.PictureBox EnlistedFactionPictureBox;
private System.Windows.Forms.PictureBox PlusPictureBox;
private System.Windows.Forms.PictureBox AgainstPictureBox;
private System.Windows.Forms.PictureBox FactionPictureBox;
private System.Windows.Forms.PictureBox CorporationPictureBox;
private System.Windows.Forms.Label FactionLabel;
private System.Windows.Forms.Label CorporationLabel;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterFactionalWarfareStatsList.cs
================================================
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Models;
using EVEMon.Common.Service;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterFactionalWarfareStatsList : UserControl
{
#region Fields
private FactionalWarfareStats m_charFacWarStats;
#endregion
#region Constructor
public CharacterFactionalWarfareStatsList()
{
InitializeComponent();
ListPanel.Visible = false;
notEnlistedLabel.Visible = false;
notEnlistedLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
noFactionalWarfareLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
#endregion
#region Inherited events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
EveMonClient.CharacterFactionalWarfareStatsUpdated += EveMonClient_CharacterFactionalWarfareStatsUpdated;
EveMonClient.EveFactionalWarfareStatsUpdated += EveMonClient_EveFactionalWarfareStatsUpdated;
EveMonClient.SettingsChanged += EveMonClient_SettingsChanged;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
EveMonClient.CharacterFactionalWarfareStatsUpdated -= EveMonClient_CharacterFactionalWarfareStatsUpdated;
EveMonClient.EveFactionalWarfareStatsUpdated -= EveMonClient_EveFactionalWarfareStatsUpdated;
EveMonClient.SettingsChanged -= EveMonClient_SettingsChanged;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (Visible)
UpdateContent();
}
#endregion
#region Content Management
///
/// Updates all the content.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
// When no character, we just hide the list
if (Character == null)
{
noFactionalWarfareLabel.Visible = true;
notEnlistedLabel.Visible = false;
ListPanel.Visible = false;
return;
}
// When character is not enlisted in factional warfare, we just hide the list
// and display the 'Not enlisted' label
if (Character.IsFactionalWarfareNotEnlisted)
{
notEnlistedLabel.Visible = true;
noFactionalWarfareLabel.Visible = false;
ListPanel.Visible = false;
return;
}
m_charFacWarStats = Character.FactionalWarfareStats;
// Update the header controls
UpdateHeader();
// Update the personal stats list
UpdatePersonalStatsList();
// Update the militia stats list
UpdateMilitiaStatsList();
noFactionalWarfareLabel.Visible = m_charFacWarStats == null;
ListPanel.Visible = !noFactionalWarfareLabel.Visible;
}
///
/// Updates the header.
///
private void UpdateHeader()
{
if (m_charFacWarStats == null)
return;
List factionsAgainstEnlisted =
EveFactionalWarfareStats.GetAgainstFactionIDs(m_charFacWarStats.FactionID).ToList();
FactionPictureBox.Visible = !Settings.UI.SafeForWork;
CorporationPictureBox.Visible = !Settings.UI.SafeForWork;
FightingPartiesPanel.Visible = !Settings.UI.SafeForWork || !factionsAgainstEnlisted.Any();
// Update the images
ImageService.GetAllianceImageAsync(FactionPictureBox, m_charFacWarStats.FactionID);
ImageService.GetCorporationImageAsync(CorporationPictureBox, Character.CorporationID);
ImageService.GetAllianceImageAsync(EnlistedFactionPictureBox, m_charFacWarStats.FactionID);
if (factionsAgainstEnlisted.Any())
{
ImageService.GetAllianceImageAsync(PrimeAgainstFactionPictureBox, factionsAgainstEnlisted[0]);
ImageService.GetAllianceImageAsync(AllyAgainstFactionPictureBox, factionsAgainstEnlisted[1]);
}
// Update the labels
string highestRankText = m_charFacWarStats.HighestRank > m_charFacWarStats.CurrentRank
? $"({GetMilitiaRank(m_charFacWarStats.HighestRank)})"
: string.Empty;
TimeSpan timeServed = DateTime.UtcNow.Subtract(m_charFacWarStats.EnlistedDate);
string timeServedText = timeServed < TimeSpan.FromDays(1) ? "Less than one day." :
$"{timeServed.Days} day{(timeServed.Days.S())}";
FactionLabel.Text = $"Faction: {m_charFacWarStats.FactionName}";
CorporationLabel.Text = $"Corporation: {Character.CorporationName}";
RankLabel.Text = $"Rank: {GetMilitiaRank(m_charFacWarStats.CurrentRank)} {highestRankText}";
TimeServedLabel.Text = $"Time served: {timeServedText}";
}
///
/// Updates the personal stats list.
///
private void UpdatePersonalStatsList()
{
if (m_charFacWarStats == null)
return;
lvPersonal.BeginUpdate();
try
{
foreach (ListViewItem item in lvPersonal.Items.Cast())
{
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvPersonal.Columns.Count)
{
item.SubItems.Add(string.Empty);
}
// Create the subitems
CreatePersonalListViewSubItems(item);
}
// Adjust the size of the columns
AdjustColumns(lvPersonal);
}
finally
{
lvPersonal.EndUpdate();
}
}
///
/// Creates the personal list view sub items.
///
/// The item.
private void CreatePersonalListViewSubItems(ListViewItem item)
{
// Clear the subitems except the item itself
for (int i = 1; i < lvPersonal.Columns.Count; i++)
{
item.SubItems.RemoveAt(1);
}
switch (item.Index)
{
case 0:
item.SubItems.Add(m_charFacWarStats.KillsYesterday.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsKillsYesterday.ToNumericString(0));
break;
case 1:
item.SubItems.Add(m_charFacWarStats.KillsLastWeek.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsKillsLastWeek.ToNumericString(0));
break;
case 2:
item.SubItems.Add(m_charFacWarStats.KillsTotal.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsKillsTotal.ToNumericString(0));
break;
case 3:
item.SubItems.Add(m_charFacWarStats.VictoryPointsYesterday.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsVictoryPointsYesterday.ToNumericString(0));
break;
case 4:
item.SubItems.Add(m_charFacWarStats.VictoryPointsLastWeek.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsVictoryPointsLastWeek.ToNumericString(0));
break;
case 5:
item.SubItems.Add(m_charFacWarStats.VictoryPointsTotal.ToNumericString(0));
item.SubItems.Add(EveFactionalWarfareStats.TotalsVictoryPointsTotal.ToNumericString(0));
break;
default:
throw new NotImplementedException();
}
}
///
/// Updates the militia stats list.
///
private void UpdateMilitiaStatsList()
{
if (m_charFacWarStats == null)
return;
lvMilitia.BeginUpdate();
try
{
foreach (ListViewItem item in lvMilitia.Items.Cast())
{
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvMilitia.Columns.Count)
{
item.SubItems.Add(string.Empty);
}
// Create the subitems
CreateMilitiaListViewSubItems(item);
}
// Adjust the size of the columns
AdjustColumns(lvMilitia);
}
finally
{
lvMilitia.EndUpdate();
}
}
///
/// Creates the militia list view sub items.
///
/// The item.
private void CreateMilitiaListViewSubItems(ListViewItem item)
{
// Exit if EVE factional warfare stats have not yet been updated
if (!EveFactionalWarfareStats.FactionalWarfareStats.Any())
return;
EveFactionWarfareStats amarrFacWarStats =
EveFactionalWarfareStats.GetFactionalWarfareStatsForFaction(DBConstants.AmarrFactionID);
EveFactionWarfareStats caldariFacWarStats =
EveFactionalWarfareStats.GetFactionalWarfareStatsForFaction(DBConstants.CaldariFactionID);
EveFactionWarfareStats gallenteFacWarStats =
EveFactionalWarfareStats.GetFactionalWarfareStatsForFaction(DBConstants.GallenteFactionID);
EveFactionWarfareStats minmatarFacWarStats =
EveFactionalWarfareStats.GetFactionalWarfareStatsForFaction(DBConstants.MinmatarFactionID);
// Clear the subitems except the item itself
for (int i = 1; i < lvMilitia.Columns.Count; i++)
{
item.SubItems.RemoveAt(1);
}
switch (item.Index)
{
case 0:
item.SubItems.Add(amarrFacWarStats.Pilots.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.Pilots.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.Pilots.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.Pilots.ToNumericString(0));
break;
case 1:
item.SubItems.Add(amarrFacWarStats.SystemsControlled.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.SystemsControlled.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.SystemsControlled.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.SystemsControlled.ToNumericString(0));
break;
case 2:
item.SubItems.Add(amarrFacWarStats.KillsYesterday.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.KillsYesterday.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.KillsYesterday.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.KillsYesterday.ToNumericString(0));
break;
case 3:
item.SubItems.Add(amarrFacWarStats.KillsLastWeek.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.KillsLastWeek.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.KillsLastWeek.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.KillsLastWeek.ToNumericString(0));
break;
case 4:
item.SubItems.Add(amarrFacWarStats.KillsTotal.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.KillsTotal.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.KillsTotal.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.KillsTotal.ToNumericString(0));
break;
case 5:
item.SubItems.Add(amarrFacWarStats.VictoryPointsYesterday.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.VictoryPointsYesterday.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.VictoryPointsYesterday.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.VictoryPointsYesterday.ToNumericString(0));
break;
case 6:
item.SubItems.Add(amarrFacWarStats.VictoryPointsLastWeek.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.VictoryPointsLastWeek.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.VictoryPointsLastWeek.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.VictoryPointsLastWeek.ToNumericString(0));
break;
case 7:
item.SubItems.Add(amarrFacWarStats.VictoryPointsTotal.ToNumericString(0));
item.SubItems.Add(caldariFacWarStats.VictoryPointsTotal.ToNumericString(0));
item.SubItems.Add(gallenteFacWarStats.VictoryPointsTotal.ToNumericString(0));
item.SubItems.Add(minmatarFacWarStats.VictoryPointsTotal.ToNumericString(0));
break;
default:
throw new NotImplementedException();
}
}
///
/// Adjusts the columns.
///
private void AdjustColumns(ListView listView)
{
foreach (ColumnHeader column in listView.Columns)
{
column.Width = -2;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column
if (column.Index != listView.Columns.Count - 1)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (listView.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += listView.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
#endregion
#region Helper methods
///
/// Gets the militia rank.
///
/// The rank.
///
private string GetMilitiaRank(int rank)
{
switch (Character.FactionalWarfareStats.FactionID)
{
case DBConstants.AmarrFactionID:
return GetFactionMilitiaRank(rank).GetDescription();
case DBConstants.CaldariFactionID:
return GetFactionMilitiaRank(rank).GetDescription();
case DBConstants.GallenteFactionID:
return GetFactionMilitiaRank(rank).GetDescription();
case DBConstants.MinmatarFactionID:
return GetFactionMilitiaRank(rank).GetDescription();
default:
throw new NotImplementedException();
}
}
///
/// Gets the faction militia rank.
///
///
/// The rank.
///
private static T GetFactionMilitiaRank(int rank)
{
if (rank < Enum.GetValues(typeof(T)).Length)
return (T)Enum.ToObject(typeof(T), rank);
return default(T);
}
#endregion
#region Global events
///
/// When the character factional warfare stats update, we update the content.
///
///
///
private void EveMonClient_CharacterFactionalWarfareStatsUpdated(object sender, CharacterChangedEventArgs e)
{
if (e.Character != Character)
return;
UpdateContent();
}
///
/// When the EVE factional warfare stats update, we update the content.
///
///
///
private void EveMonClient_EveFactionalWarfareStatsUpdated(object sender, EventArgs e)
{
UpdateContent();
}
///
/// When the settings change, we update the content.
///
/// In case 'SafeForWork' gets enabled.
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_SettingsChanged(object sender, EventArgs e)
{
UpdateContent();
}
#endregion
#region Local events
///
/// Handles the ColumnWidthChanging event of the lvPersonal control.
///
/// The source of the event.
/// The instance containing the event data.
private void lvPersonal_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
e.Cancel = true;
e.NewWidth = lvPersonal.Columns[e.ColumnIndex].Width;
}
///
/// Handles the ColumnWidthChanging event of the lvMilitia control.
///
/// The source of the event.
/// The instance containing the event data.
private void lvMilitia_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
e.Cancel = true;
e.NewWidth = lvMilitia.Columns[e.ColumnIndex].Width;
}
#endregion
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterFactionalWarfareStatsList.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAJ8SURBVFhH7VbPi1JRFJ7njNmMFs6IY1kSlC4aRMT8Lf7W/LFoIbgIQgcrFy0V3IjwRCVoMUZQ
C6FVu0CGFrZp59/QP9BfMCu3nb5zmQfNQM3jjTkQfvDx7nv33nO+c+45l7exscY6A+sMaMjAJqAHrgE8
1mBC+xZ2uA3sAnvADrBKEdIWYDabd6fT6fFisaDJZPLTarUeIiS99rDU75Q49RaLxToej6lQKFAqlSKj
0fgRJizqzVxiJWcAmd9vtVrk9/spHo8TTuQzTN69hFn1W7nwkAFbu92mUChEiURCEeBQb0XlSo6WHV4H
lKq/Adjt9nudTkdEn0wm/40Adn4TuA3cAWzAPsBjp9N50O/3KZvNihqAPj6CpWZA4qgfAEfAe+Ad8Bbg
Jz59mM/nwnmxWCSv1/s9k8kc4V1WGIvFZJPJ9ATCdCoTfmaZZACazebr2WxGo9GIBoMBDYdDMZZlmcrl
sqgB7oRKpUK9Xo84KzzHz263Sy6X6wRWbZpE6HS6zXA4/KZarYpC42iZnHZEK86emc/nhQgmj3O5nHgy
cXoE5wHNdwT6+xkKjnD8hOMnXDiCKAOKRqNCDIvgd3TGGaJVCfX6A84ToEHLMfCePfAx2ABf/MaXpVKJ
0uk0BYNBQqN8w9yrc2ue4/0peABuaRXAG1kEXzJc5Qrv1+t1ikQiioBjzD06t4b33AJ3QEmrgD/tMzQa
DQoEAoqApbfhRYKFAI/Hc3UCarUa+Xy+qxMA5ydut5scDgfhmv50WicXZW5p83r8hNRQ/V/Ar5IkHcIy
XzgrA1+vVtAPcp8/BLdX5v3UEYvgvyC+ZLhdl95qqw5o7e//zcBfi/MXCa/XldpQmvEAAAAASUVORK5C
YII=
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
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOwAAA
DsABataJCQAAA21JREFUWEdjYBgFlIUAo7GxMStlRpCpG2TxhN4JXtmZ2X2SkpJcZBpDvrYQ3xCVvbv3
Puvt7v2rq61bDTSJmXzTcOtkBEqx4JBm9PXxXa6upr6FhYXFEpcaLS0tNrIcBgriKROmeGWkZ/TiCWIe
qAM50C0BR1HPBJ+szKx+sqIoJISyIAZF0Z5dex5TEkWMgf6BK/EFcXN1sTzQpyK4gt/Px28xgSgiGDs4
gxikc8HUhvKelopmPKZw44oigjYTo2BRR8DBjQtbbwkLC/MSo56qanR1dQV3z4z6vW95xR9genGlquHE
GFaRnxB6cXPZ/zMbyv5P6O2YC0wL/EB9VCkVMYrXwqz41GXT61Yt6MtaM78zavWyrqBVW6b5XX9wpOP/
szMz/5/aMfXzkV2LruzbPPfcjnUzj2xbPfNISox/C1oZgq9MgfgZVGj0dfX5p6emo+d9IS0l4TnZ8R5/
FkzI/H8S6PM7hzv+v7o0///bO5v+PzjZ///M1qr/y6Yk/89PcPmrriy+jp2dXREWkvb29iyT+id5FuYX
ThAXFwclTOwgKChIFU/xCipqg7k52R8pSIv+z45z/X/tyIz/1/a1/F/UZPM/N0zjv5mmyHteDpYSoDqU
uiEgIEB5/579RBXbBPM+0HCpYBets8c2tf3fvrAM7JDzu9v/lyU7fmVjY/MEyoOCGh0QYy5cD968D1K1
aUb+vZM7p/4Pc1X6LyrI/b+7JuH/3I6Uf8CgdsGTgAmaS0ziZyjJzzI4uq7jv7uN3n8VGcH3nBzM51Wk
+P/PaEv+X1GUOgdHCBBlNlGKJnSXtyRHOv3n4mK/DtTgBIpvDjaWKkMduW+T24of8/LyChNlELmKsuO9
LrCysGwA6ldAMgMU77ZhvvbXVFRU3Mg1G0MfqEqNi4sDGcgEkpSXl+cQFuCLBjJxFb0iitJielCDmOLj
4x2AbHayHKSnp8e9cN7CKVs2bnkbFhJWBjQEo87HZ3BPV0/mvt37XuXl5E3j4uKSIMcRjMC6fFJ8XPwv
fn7+NqABuFpGWM2ura0NLMgv+KWvp78HqICPHAcwKCsrg4LQUphfGERjAziLVx0dHQ2gBkcBAQEfIE39
9iIoffT39AeAildRUVFQHqcvADXZ9uzcQ1TxSiuXkVS80soR1CleaeW6UXOJCQEA0sMsxGlB/rQAAAAA
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOwAAA
DsABataJCQAAA21JREFUWEdjYBgFlIUAo7GxMStlRpCpG2TxhN4JXtmZ2X2SkpJcZBpDvrYQ3xCVvbv3
Puvt7v2rq61bDTSJmXzTcOtkBEqx4JBm9PXxXa6upr6FhYXFEpcaLS0tNrIcBgriKROmeGWkZ/TiCWIe
qAM50C0BR1HPBJ+szKx+sqIoJISyIAZF0Z5dex5TEkWMgf6BK/EFcXN1sTzQpyK4gt/Px28xgSgiGDs4
gxikc8HUhvKelopmPKZw44oigjYTo2BRR8DBjQtbbwkLC/MSo56qanR1dQV3z4z6vW95xR9genGlquHE
GFaRnxB6cXPZ/zMbyv5P6O2YC0wL/EB9VCkVMYrXwqz41GXT61Yt6MtaM78zavWyrqBVW6b5XX9wpOP/
szMz/5/aMfXzkV2LruzbPPfcjnUzj2xbPfNISox/C1oZgq9MgfgZVGj0dfX5p6emo+d9IS0l4TnZ8R5/
FkzI/H8S6PM7hzv+v7o0///bO5v+PzjZ///M1qr/y6Yk/89PcPmrriy+jp2dXREWkvb29iyT+id5FuYX
ThAXFwclTOwgKChIFU/xCipqg7k52R8pSIv+z45z/X/tyIz/1/a1/F/UZPM/N0zjv5mmyHteDpYSoDqU
uiEgIEB5/579RBXbBPM+0HCpYBets8c2tf3fvrAM7JDzu9v/lyU7fmVjY/MEyoOCGh0QYy5cD968D1K1
aUb+vZM7p/4Pc1X6LyrI/b+7JuH/3I6Uf8CgdsGTgAmaS0ziZyjJzzI4uq7jv7uN3n8VGcH3nBzM51Wk
+P/PaEv+X1GUOgdHCBBlNlGKJnSXtyRHOv3n4mK/DtTgBIpvDjaWKkMduW+T24of8/LyChNlELmKsuO9
LrCysGwA6ldAMgMU77ZhvvbXVFRU3Mg1G0MfqEqNi4sDGcgEkpSXl+cQFuCLBjJxFb0iitJielCDmOLj
4x2AbHayHKSnp8e9cN7CKVs2bnkbFhJWBjQEo87HZ3BPV0/mvt37XuXl5E3j4uKSIMcRjMC6fFJ8XPwv
fn7+NqABuFpGWM2ura0NLMgv+KWvp78HqICPHAcwKCsrg4LQUphfGERjAziLVx0dHQ2gBkcBAQEfIE39
9iIoffT39AeAildRUVFQHqcvADXZ9uzcQ1TxSiuXkVS80soR1CleaeW6UXOJCQEA0sMsxGlB/rQAAAAA
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOwAAA
DsABataJCQAAA21JREFUWEdjYBgFlIUAo7GxMStlRpCpG2TxhN4JXtmZ2X2SkpJcZBpDvrYQ3xCVvbv3
Puvt7v2rq61bDTSJmXzTcOtkBEqx4JBm9PXxXa6upr6FhYXFEpcaLS0tNrIcBgriKROmeGWkZ/TiCWIe
qAM50C0BR1HPBJ+szKx+sqIoJISyIAZF0Z5dex5TEkWMgf6BK/EFcXN1sTzQpyK4gt/Px28xgSgiGDs4
gxikc8HUhvKelopmPKZw44oigjYTo2BRR8DBjQtbbwkLC/MSo56qanR1dQV3z4z6vW95xR9genGlquHE
GFaRnxB6cXPZ/zMbyv5P6O2YC0wL/EB9VCkVMYrXwqz41GXT61Yt6MtaM78zavWyrqBVW6b5XX9wpOP/
szMz/5/aMfXzkV2LruzbPPfcjnUzj2xbPfNISox/C1oZgq9MgfgZVGj0dfX5p6emo+d9IS0l4TnZ8R5/
FkzI/H8S6PM7hzv+v7o0///bO5v+PzjZ///M1qr/y6Yk/89PcPmrriy+jp2dXREWkvb29iyT+id5FuYX
ThAXFwclTOwgKChIFU/xCipqg7k52R8pSIv+z45z/X/tyIz/1/a1/F/UZPM/N0zjv5mmyHteDpYSoDqU
uiEgIEB5/579RBXbBPM+0HCpYBets8c2tf3fvrAM7JDzu9v/lyU7fmVjY/MEyoOCGh0QYy5cD968D1K1
aUb+vZM7p/4Pc1X6LyrI/b+7JuH/3I6Uf8CgdsGTgAmaS0ziZyjJzzI4uq7jv7uN3n8VGcH3nBzM51Wk
+P/PaEv+X1GUOgdHCBBlNlGKJnSXtyRHOv3n4mK/DtTgBIpvDjaWKkMduW+T24of8/LyChNlELmKsuO9
LrCysGwA6ldAMgMU77ZhvvbXVFRU3Mg1G0MfqEqNi4sDGcgEkpSXl+cQFuCLBjJxFb0iitJielCDmOLj
4x2AbHayHKSnp8e9cN7CKVs2bnkbFhJWBjQEo87HZ3BPV0/mvt37XuXl5E3j4uKSIMcRjMC6fFJ8XPwv
fn7+NqABuFpGWM2ura0NLMgv+KWvp78HqICPHAcwKCsrg4LQUphfGERjAziLVx0dHQ2gBkcBAQEfIE39
9iIoffT39AeAildRUVFQHqcvADXZ9uzcQ1TxSiuXkVS80soR1CleaeW6UXOJCQEA0sMsxGlB/rQAAAAA
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOwAAA
DsABataJCQAAA21JREFUWEdjYBgFlIUAo7GxMStlRpCpG2TxhN4JXtmZ2X2SkpJcZBpDvrYQ3xCVvbv3
Puvt7v2rq61bDTSJmXzTcOtkBEqx4JBm9PXxXa6upr6FhYXFEpcaLS0tNrIcBgriKROmeGWkZ/TiCWIe
qAM50C0BR1HPBJ+szKx+sqIoJISyIAZF0Z5dex5TEkWMgf6BK/EFcXN1sTzQpyK4gt/Px28xgSgiGDs4
gxikc8HUhvKelopmPKZw44oigjYTo2BRR8DBjQtbbwkLC/MSo56qanR1dQV3z4z6vW95xR9genGlquHE
GFaRnxB6cXPZ/zMbyv5P6O2YC0wL/EB9VCkVMYrXwqz41GXT61Yt6MtaM78zavWyrqBVW6b5XX9wpOP/
szMz/5/aMfXzkV2LruzbPPfcjnUzj2xbPfNISox/C1oZgq9MgfgZVGj0dfX5p6emo+d9IS0l4TnZ8R5/
FkzI/H8S6PM7hzv+v7o0///bO5v+PzjZ///M1qr/y6Yk/89PcPmrriy+jp2dXREWkvb29iyT+id5FuYX
ThAXFwclTOwgKChIFU/xCipqg7k52R8pSIv+z45z/X/tyIz/1/a1/F/UZPM/N0zjv5mmyHteDpYSoDqU
uiEgIEB5/579RBXbBPM+0HCpYBets8c2tf3fvrAM7JDzu9v/lyU7fmVjY/MEyoOCGh0QYy5cD968D1K1
aUb+vZM7p/4Pc1X6LyrI/b+7JuH/3I6Uf8CgdsGTgAmaS0ziZyjJzzI4uq7jv7uN3n8VGcH3nBzM51Wk
+P/PaEv+X1GUOgdHCBBlNlGKJnSXtyRHOv3n4mK/DtTgBIpvDjaWKkMduW+T24of8/LyChNlELmKsuO9
LrCysGwA6ldAMgMU77ZhvvbXVFRU3Mg1G0MfqEqNi4sDGcgEkpSXl+cQFuCLBjJxFb0iitJielCDmOLj
4x2AbHayHKSnp8e9cN7CKVs2bnkbFhJWBjQEo87HZ3BPV0/mvt37XuXl5E3j4uKSIMcRjMC6fFJ8XPwv
fn7+NqABuFpGWM2ura0NLMgv+KWvp78HqICPHAcwKCsrg4LQUphfGERjAziLVx0dHQ2gBkcBAQEfIE39
9iIoffT39AeAildRUVFQHqcvADXZ9uzcQ1TxSiuXkVS80soR1CleaeW6UXOJCQEA0sMsxGlB/rQAAAAA
SUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOwAAA
DsABataJCQAAA21JREFUWEdjYBgFlIUAo7GxMStlRpCpG2TxhN4JXtmZ2X2SkpJcZBpDvrYQ3xCVvbv3
Puvt7v2rq61bDTSJmXzTcOtkBEqx4JBm9PXxXa6upr6FhYXFEpcaLS0tNrIcBgriKROmeGWkZ/TiCWIe
qAM50C0BR1HPBJ+szKx+sqIoJISyIAZF0Z5dex5TEkWMgf6BK/EFcXN1sTzQpyK4gt/Px28xgSgiGDs4
gxikc8HUhvKelopmPKZw44oigjYTo2BRR8DBjQtbbwkLC/MSo56qanR1dQV3z4z6vW95xR9genGlquHE
GFaRnxB6cXPZ/zMbyv5P6O2YC0wL/EB9VCkVMYrXwqz41GXT61Yt6MtaM78zavWyrqBVW6b5XX9wpOP/
szMz/5/aMfXzkV2LruzbPPfcjnUzj2xbPfNISox/C1oZgq9MgfgZVGj0dfX5p6emo+d9IS0l4TnZ8R5/
FkzI/H8S6PM7hzv+v7o0///bO5v+PzjZ///M1qr/y6Yk/89PcPmrriy+jp2dXREWkvb29iyT+id5FuYX
ThAXFwclTOwgKChIFU/xCipqg7k52R8pSIv+z45z/X/tyIz/1/a1/F/UZPM/N0zjv5mmyHteDpYSoDqU
uiEgIEB5/579RBXbBPM+0HCpYBets8c2tf3fvrAM7JDzu9v/lyU7fmVjY/MEyoOCGh0QYy5cD968D1K1
aUb+vZM7p/4Pc1X6LyrI/b+7JuH/3I6Uf8CgdsGTgAmaS0ziZyjJzzI4uq7jv7uN3n8VGcH3nBzM51Wk
+P/PaEv+X1GUOgdHCBBlNlGKJnSXtyRHOv3n4mK/DtTgBIpvDjaWKkMduW+T24of8/LyChNlELmKsuO9
LrCysGwA6ldAMgMU77ZhvvbXVFRU3Mg1G0MfqEqNi4sDGcgEkpSXl+cQFuCLBjJxFb0iitJielCDmOLj
4x2AbHayHKSnp8e9cN7CKVs2bnkbFhJWBjQEo87HZ3BPV0/mvt37XuXl5E3j4uKSIMcRjMC6fFJ8XPwv
fn7+NqABuFpGWM2ura0NLMgv+KWvp78HqICPHAcwKCsrg4LQUphfGERjAziLVx0dHQ2gBkcBAQEfIE39
9iIoffT39AeAildRUVFQHqcvADXZ9uzcQ1TxSiuXkVS80soR1CleaeW6UXOJCQEA0sMsxGlB/rQAAAAA
SUVORK5CYII=
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
AABJRU5ErkJggg==
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
AABJRU5ErkJggg==
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
VmgAAAAASUVORK5CYII=
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
VmgAAAAASUVORK5CYII=
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterIndustryJobsList.Designer.cs
================================================
using EVEMon.Common.Controls;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterIndustryJobsList
{
///
/// 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(CharacterIndustryJobsList));
this.lvJobs = new System.Windows.Forms.ListView();
this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chTTC = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chInstalledItem = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chOutputItem = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.contextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.showInstalledInBrowserMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.showInBrowserMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
this.exportToCSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ilIcons = new System.Windows.Forms.ImageList(this.components);
this.noJobsLabel = new System.Windows.Forms.Label();
this.industryExpPanelControl = new EVEMon.Common.Controls.ExpandablePanelControl();
this.showProducedInBrowserMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenu.SuspendLayout();
this.SuspendLayout();
//
// lvJobs
//
this.lvJobs.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.lvJobs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chState,
this.chTTC,
this.chInstalledItem,
this.chOutputItem});
this.lvJobs.ContextMenuStrip = this.contextMenu;
this.lvJobs.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvJobs.FullRowSelect = true;
this.lvJobs.HideSelection = false;
this.lvJobs.Location = new System.Drawing.Point(0, 0);
this.lvJobs.MultiSelect = false;
this.lvJobs.Name = "lvJobs";
this.lvJobs.Size = new System.Drawing.Size(454, 334);
this.lvJobs.SmallImageList = this.ilIcons;
this.lvJobs.TabIndex = 0;
this.lvJobs.UseCompatibleStateImageBehavior = false;
this.lvJobs.View = System.Windows.Forms.View.Details;
//
// chState
//
this.chState.Text = "State";
//
// chTTC
//
this.chTTC.Text = "TTC";
//
// chInstalledItem
//
this.chInstalledItem.Text = "Installed Item";
//
// chOutputItem
//
this.chOutputItem.Text = "Output Item";
//
// contextMenu
//
this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.showInstalledInBrowserMenuItem,
this.showProducedInBrowserMenuItem,
this.showInBrowserMenuSeparator,
this.exportToCSVToolStripMenuItem});
this.contextMenu.Name = "ShipPropertiesContextMenu";
this.contextMenu.Size = new System.Drawing.Size(218, 98);
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenu_Opening);
//
// showInstalledInBrowserMenuItem
//
this.showInstalledInBrowserMenuItem.Name = "showInstalledInBrowserMenuItem";
this.showInstalledInBrowserMenuItem.Size = new System.Drawing.Size(217, 22);
this.showInstalledInBrowserMenuItem.Text = "Show Input In Blueprint Browser...";
this.showInstalledInBrowserMenuItem.Click += new System.EventHandler(this.showInBrowserMenuItem_Click);
//
// showProducedInBrowserMenuItem
//
this.showProducedInBrowserMenuItem.Name = "showProducedInBrowserMenuItem";
this.showProducedInBrowserMenuItem.Size = new System.Drawing.Size(217, 22);
this.showProducedInBrowserMenuItem.Text = "Show Output In Browser...";
this.showProducedInBrowserMenuItem.Click += new System.EventHandler(this.showInBrowserMenuItem_Click);
//
// showInBrowserMenuSeparator
//
this.showInBrowserMenuSeparator.Name = "showInBrowserMenuSeparator";
this.showInBrowserMenuSeparator.Size = new System.Drawing.Size(214, 6);
//
// exportToCSVToolStripMenuItem
//
this.exportToCSVToolStripMenuItem.Name = "exportToCSVToolStripMenuItem";
this.exportToCSVToolStripMenuItem.Size = new System.Drawing.Size(217, 22);
this.exportToCSVToolStripMenuItem.Text = "Export To CSV...";
this.exportToCSVToolStripMenuItem.Click += new System.EventHandler(this.exportToCSVToolStripMenuItem_Click);
//
// ilIcons
//
this.ilIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilIcons.ImageStream")));
this.ilIcons.TransparentColor = System.Drawing.Color.Transparent;
this.ilIcons.Images.SetKeyName(0, "arrow_up.png");
this.ilIcons.Images.SetKeyName(1, "arrow_down.png");
this.ilIcons.Images.SetKeyName(2, "16x16Transparant.png");
//
// noJobsLabel
//
this.noJobsLabel.Dock = System.Windows.Forms.DockStyle.Fill;
this.noJobsLabel.ForeColor = System.Drawing.SystemColors.GrayText;
this.noJobsLabel.Location = new System.Drawing.Point(0, 0);
this.noJobsLabel.Name = "noJobsLabel";
this.noJobsLabel.Size = new System.Drawing.Size(454, 434);
this.noJobsLabel.TabIndex = 2;
this.noJobsLabel.Text = "No industry jobs are available.";
this.noJobsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// industryExpPanelControl
//
this.industryExpPanelControl.AnimationSpeed = EVEMon.Common.Controls.AnimationSpeed.Medium;
this.industryExpPanelControl.Dock = System.Windows.Forms.DockStyle.Bottom;
this.industryExpPanelControl.EnableContextMenu = false;
this.industryExpPanelControl.ExpandDirection = EVEMon.Common.Controls.Direction.Down;
this.industryExpPanelControl.ExpandedHeight = 100;
this.industryExpPanelControl.ExpandedOnStartup = false;
this.industryExpPanelControl.HeaderHeight = 30;
this.industryExpPanelControl.HeaderText = "Header Text";
this.industryExpPanelControl.ImageCollapse = ((System.Drawing.Bitmap)(resources.GetObject("industryExpPanelControl.ImageCollapse")));
this.industryExpPanelControl.ImageExpand = ((System.Drawing.Bitmap)(resources.GetObject("industryExpPanelControl.ImageExpand")));
this.industryExpPanelControl.Location = new System.Drawing.Point(0, 334);
this.industryExpPanelControl.Name = "industryExpPanelControl";
this.industryExpPanelControl.Size = new System.Drawing.Size(454, 100);
this.industryExpPanelControl.TabIndex = 1;
//
// CharacterIndustryJobsList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.lvJobs);
this.Controls.Add(this.industryExpPanelControl);
this.Controls.Add(this.noJobsLabel);
this.Name = "CharacterIndustryJobsList";
this.Size = new System.Drawing.Size(454, 434);
this.contextMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView lvJobs;
private System.Windows.Forms.Label noJobsLabel;
private System.Windows.Forms.ColumnHeader chState;
private System.Windows.Forms.ColumnHeader chTTC;
private System.Windows.Forms.ColumnHeader chInstalledItem;
private System.Windows.Forms.ColumnHeader chOutputItem;
private System.Windows.Forms.ImageList ilIcons;
private ExpandablePanelControl industryExpPanelControl;
private System.Windows.Forms.ContextMenuStrip contextMenu;
private System.Windows.Forms.ToolStripMenuItem exportToCSVToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem showInstalledInBrowserMenuItem;
private System.Windows.Forms.ToolStripSeparator showInBrowserMenuSeparator;
private System.Windows.Forms.ToolStripMenuItem showProducedInBrowserMenuItem;
}
}
================================================
FILE: src/EVEMon/CharacterMonitoring/CharacterIndustryJobsList.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EVEMon.Common;
using EVEMon.Common.Collections;
using EVEMon.Common.Constants;
using EVEMon.Common.Controls;
using EVEMon.Common.CustomEventArgs;
using EVEMon.Common.Data;
using EVEMon.Common.Enumerations;
using EVEMon.Common.Enumerations.UISettings;
using EVEMon.Common.Extensions;
using EVEMon.Common.Factories;
using EVEMon.Common.Helpers;
using EVEMon.Common.Interfaces;
using EVEMon.Common.Models;
using EVEMon.Common.Models.Comparers;
using EVEMon.Common.SettingsObjects;
using EVEMon.SkillPlanner;
namespace EVEMon.CharacterMonitoring
{
internal sealed partial class CharacterIndustryJobsList : UserControl, IListView
{
#region Fields
private const int PAD = 5;
private readonly List m_columns = new List();
private readonly List m_list = new List(32);
private InfiniteDisplayToolTip m_tooltip;
private Timer m_refreshTimer;
private IndustryJobGrouping m_grouping;
private IndustryJobColumn m_sortCriteria;
private IssuedFor m_showIssuedFor;
private string m_textFilter = string.Empty;
private bool m_sortAscending = true;
private bool m_isUpdatingColumns;
private bool m_columnsChanged;
private bool m_init;
private int m_columnTTCIndex;
// Panel info variables
private int m_skillBasedManufacturingJobs, m_skillBasedResearchingJobs,
m_skillBasedReactionJobs;
private int m_remoteManufacturingRange, m_remoteResearchingRange,
m_remoteReactionsRange;
private JobsIssued m_activeManufacturing, m_activeResearch, m_activeReactions;
#endregion
# region Constructor
public CharacterIndustryJobsList()
{
InitializeComponent();
InitializeExpandablePanelControls();
lvJobs.Hide();
lvJobs.AllowColumnReorder = true;
lvJobs.Columns.Clear();
industryExpPanelControl.Hide();
m_showIssuedFor = IssuedFor.All;
noJobsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold);
industryExpPanelControl.Font = FontFactory.GetFont("Tahoma", 8.25f);
ListViewHelper.EnableDoubleBuffer(lvJobs);
lvJobs.ColumnClick += listView_ColumnClick;
lvJobs.ColumnWidthChanged += listView_ColumnWidthChanged;
lvJobs.ColumnReordered += listView_ColumnReordered;
lvJobs.MouseDown += listView_MouseDown;
lvJobs.MouseMove += listView_MouseMove;
lvJobs.MouseLeave += listView_MouseLeave;
}
#endregion
#region Properties
///
/// Gets the character associated with this monitor.
///
internal CCPCharacter Character { get; set; }
///
/// Gets or sets a value indicating whether this is visible.
///
/// true if visible; otherwise, false.
internal bool Visibility
{
get { return lvJobs.Visible; }
set { lvJobs.Visible = value; }
}
///
/// Gets or sets the text filter.
///
[Browsable(false)]
public string TextFilter
{
get { return m_textFilter; }
set
{
m_textFilter = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets the grouping mode.
///
[Browsable(false)]
public Enum Grouping
{
get { return m_grouping; }
set
{
m_grouping = (IndustryJobGrouping)value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets or sets which "Issued for" jobs to display.
///
internal IssuedFor ShowIssuedFor
{
get { return m_showIssuedFor; }
set
{
m_showIssuedFor = value;
if (m_init)
UpdateColumns();
}
}
///
/// Gets true when character has active jobs issued for corporation.
///
private bool HasActiveCorporationIssuedJobs
=> m_list.Any(x => x.State == JobState.Active && x.IssuedFor == IssuedFor.Corporation);
///
/// Gets or sets the enumeration of jobs to display.
///
internal IEnumerable Jobs
{
get { return m_list; }
set
{
m_list.Clear();
if (value == null)
return;
m_list.AddRange(value);
}
}
///
/// Gets or sets the settings used for columns.
///
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public IEnumerable Columns
{
get
{
// Add the visible columns; matching the display order
List newColumns = new List();
foreach (ColumnHeader header in lvJobs.Columns.Cast().OrderBy(x => x.DisplayIndex))
{
IndustryJobColumnSettings columnSetting = m_columns.First(x => x.Column == (IndustryJobColumn)header.Tag);
if (columnSetting.Width > -1)
columnSetting.Width = header.Width;
newColumns.Add(columnSetting);
}
// Then add the other columns
newColumns.AddRange(m_columns.Where(x => !x.Visible));
return newColumns;
}
set
{
m_columns.Clear();
if (value != null)
m_columns.AddRange(value.Cast());
// Whenever the columns changes, we need to
// reset the dipslay index of the TTC column
m_columnTTCIndex = -1;
if (m_init)
UpdateColumns();
}
}
#endregion
# region Inherited Events
///
/// On load subscribe the events.
///
/// An that contains the event data.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode || this.IsDesignModeHosted())
return;
m_tooltip = new InfiniteDisplayToolTip(lvJobs);
m_refreshTimer = new Timer();
m_refreshTimer.Tick += refresh_TimerTick;
m_refreshTimer.Interval = 1000;
EveMonClient.TimerTick += EveMonClient_TimerTick;
EveMonClient.IndustryJobsUpdated += EveMonClient_IndustryJobsUpdated;
EveMonClient.ConquerableStationListUpdated += EveMonClient_ConquerableStationListUpdated;
EveMonClient.CharacterIndustryJobsCompleted += EveMonClient_CharacterIndustryJobsCompleted;
EveMonClient.EveIDToNameUpdated += EveMonClient_EveIDToNameUpdated;
Disposed += OnDisposed;
}
///
/// Unsubscribe events on disposing.
///
///
///
private void OnDisposed(object sender, EventArgs e)
{
m_tooltip.Dispose();
m_refreshTimer.Dispose();
EveMonClient.TimerTick -= EveMonClient_TimerTick;
EveMonClient.IndustryJobsUpdated -= EveMonClient_IndustryJobsUpdated;
EveMonClient.ConquerableStationListUpdated -= EveMonClient_ConquerableStationListUpdated;
EveMonClient.CharacterIndustryJobsCompleted -= EveMonClient_CharacterIndustryJobsCompleted;
EveMonClient.EveIDToNameUpdated -= EveMonClient_EveIDToNameUpdated;
Disposed -= OnDisposed;
}
///
/// When the control becomes visible again, we update the content.
///
///
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (DesignMode || this.IsDesignModeHosted() || Character == null || !Visible)
return;
// Prevents the properties to call UpdateColumns() till we set all properties
m_init = false;
lvJobs.Visible = false;
industryExpPanelControl.Visible = false;
Jobs = Character?.IndustryJobs;
Columns = Settings.UI.MainWindow.IndustryJobs.Columns;
Grouping = Character?.UISettings.JobsGroupBy;
TextFilter = string.Empty;
UpdateColumns();
m_init = true;
UpdateListVisibility();
}
# endregion
#region Updates Main Industry Window
///
/// Autoresizes the columns.
///
public void AutoResizeColumns()
{
m_columns.ForEach(column =>
{
if (column.Visible)
column.Width = -2;
});
UpdateColumns();
}
///
/// Updates the columns.
///
internal void UpdateColumns()
{
// Returns if not visible
if (!Visible)
return;
lvJobs.BeginUpdate();
m_isUpdatingColumns = true;
try
{
lvJobs.Columns.Clear();
lvJobs.Groups.Clear();
lvJobs.Items.Clear();
foreach (IndustryJobColumnSettings column in m_columns.Where(x => x.Visible))
{
ColumnHeader header = lvJobs.Columns.Add(column.Column.GetHeader(), column.Width);
header.Tag = column.Column;
switch (column.Column)
{
case IndustryJobColumn.TTC:
case IndustryJobColumn.Cost:
case IndustryJobColumn.Probability:
header.TextAlign = HorizontalAlignment.Right;
break;
case IndustryJobColumn.Runs:
header.TextAlign = HorizontalAlignment.Center;
break;
}
}
// We update the content
UpdateContent();
}
finally
{
lvJobs.EndUpdate();
m_isUpdatingColumns = false;
}
}
///
/// Updates the content of the listview.
///
private void UpdateContent()
{
// Returns if not visible
if (!Visible)
return;
int scrollBarPosition = lvJobs.GetVerticalScrollBarPosition();
// Store the selected item (if any) to restore it after the update
int selectedItem = lvJobs.SelectedItems.Count > 0 ? lvJobs.SelectedItems[0].Tag.
GetHashCode() : 0;
lvJobs.BeginUpdate();
try
{
bool hideInactive = Character != null && Settings.UI.MainWindow.IndustryJobs.
HideInactiveJobs, hideIssued = m_showIssuedFor != IssuedFor.All;
var jobs = new LinkedList();
// Filter jobs
foreach (var job in m_list)
{
job.UpdateLocation(Character);
job.UpdateInstallation(Character);
if (job.InstalledItem != null && job.OutputItem != null && job.
SolarSystem != null && IsTextMatching(job, m_textFilter))
{
if ((!hideInactive || job.IsActive) && (!hideIssued || job.IssuedFor ==
m_showIssuedFor))
jobs.AddLast(job);
}
}
UpdateSort();
UpdateContentByGroup(jobs);
// Restore the selected item (if any)
if (selectedItem > 0)
foreach (ListViewItem lvItem in lvJobs.Items.Cast().Where(
lvItem => lvItem.Tag.GetHashCode() == selectedItem))
lvItem.Selected = true;
// Adjust the size of the columns
AdjustColumns();
// Update the expandable panel info
UpdateExpPanelContent();
UpdateListVisibility();
}
finally
{
lvJobs.EndUpdate();
lvJobs.SetVerticalScrollBarPosition(scrollBarPosition);
}
}
///
/// Updates the list visibility.
///
private void UpdateListVisibility()
{
// Display or hide the "no jobs" label
if (!m_init)
return;
noJobsLabel.Visible = lvJobs.Items.Count == 0;
industryExpPanelControl.Visible = true;
industryExpPanelControl.Header.Visible = true;
lvJobs.Visible = !noJobsLabel.Visible;
m_refreshTimer.Enabled = lvJobs.Visible;
}
///
/// Updates the content by group.
///
/// The jobs.
private void UpdateContentByGroup(IEnumerable jobs)
{
switch (m_grouping)
{
case IndustryJobGrouping.State:
IOrderedEnumerable> groups0 =
jobs.GroupBy(x => x.State).OrderBy(x => (int)x.Key);
UpdateContent(groups0);
break;
case IndustryJobGrouping.StateDesc:
IOrderedEnumerable> groups1 =
jobs.GroupBy(x => x.State).OrderByDescending(x => (int)x.Key);
UpdateContent(groups1);
break;
case IndustryJobGrouping.EndDate:
IOrderedEnumerable> groups2 =
jobs.GroupBy(x => x.EndDate.ToLocalTime().Date).OrderBy(x => x.Key);
UpdateContent(groups2);
break;
case IndustryJobGrouping.EndDateDesc:
IOrderedEnumerable> groups3 =
jobs.GroupBy(x => x.EndDate.ToLocalTime().Date).OrderByDescending(x => x.Key);
UpdateContent(groups3);
break;
case IndustryJobGrouping.InstalledItemType:
IOrderedEnumerable> groups4 =
jobs.GroupBy(x => x.InstalledItem.MarketGroup.CategoryPath).OrderBy(x => x.Key);
UpdateContent(groups4);
break;
case IndustryJobGrouping.InstalledItemTypeDesc:
IOrderedEnumerable> groups5 =
jobs.GroupBy(x => x.InstalledItem.MarketGroup.CategoryPath).OrderByDescending(x => x.Key);
UpdateContent(groups5);
break;
case IndustryJobGrouping.OutputItemType:
IOrderedEnumerable> groups6 =
jobs.GroupBy(x => x.OutputItem.MarketGroup.CategoryPath).OrderBy(x => x.Key);
UpdateContent(groups6);
break;
case IndustryJobGrouping.OutputItemTypeDesc:
IOrderedEnumerable> groups7 =
jobs.GroupBy(x => x.OutputItem.MarketGroup.CategoryPath).OrderByDescending(x => x.Key);
UpdateContent(groups7);
break;
case IndustryJobGrouping.Activity:
IOrderedEnumerable> groups8 =
jobs.GroupBy(x => x.Activity.GetDescription()).OrderBy(x => x.Key);
UpdateContent(groups8);
break;
case IndustryJobGrouping.ActivityDesc:
IOrderedEnumerable> groups9 =
jobs.GroupBy(x => x.Activity.GetDescription()).OrderByDescending(x => x.Key);
UpdateContent(groups9);
break;
case IndustryJobGrouping.Location:
IOrderedEnumerable> groups10 =
jobs.GroupBy(x => x.Installation).OrderBy(x => x.Key);
UpdateContent(groups10);
break;
case IndustryJobGrouping.LocationDesc:
IOrderedEnumerable> groups11 =
jobs.GroupBy(x => x.Installation).OrderByDescending(x => x.Key);
UpdateContent(groups11);
break;
}
}
///
/// Updates the content of the listview.
///
///
///
private void UpdateContent(IEnumerable> groups)
{
lvJobs.Items.Clear();
lvJobs.Groups.Clear();
// Add the groups
foreach (IGrouping group in groups)
{
string groupText;
if (group.Key is JobState)
groupText = ((JobState)(object)group.Key).GetHeader();
else if (group.Key is DateTime)
groupText = ((DateTime)(object)group.Key).ToShortDateString();
else
groupText = group.Key.ToString();
ListViewGroup listGroup = new ListViewGroup(groupText);
lvJobs.Groups.Add(listGroup);
// Add the items in every group
lvJobs.Items.AddRange(
group.Select(job => new
{
job,
item = new ListViewItem(job.InstalledItem.Name, listGroup)
{
UseItemStyleForSubItems = false,
Tag = job
}
}).Select(x => CreateSubItems(x.job, x.item)).ToArray());
}
}
///
/// Creates the list view sub items.
///
/// The job.
/// The item.
private ListViewItem CreateSubItems(IndustryJob job, ListViewItem item)
{
// Display text as dimmed if the job is no longer available
if (!job.IsActive)
item.ForeColor = SystemColors.GrayText;
// Add enough subitems to match the number of columns
while (item.SubItems.Count < lvJobs.Columns.Count + 1)
{
item.SubItems.Add(string.Empty);
}
// Creates the subitems
for (int i = 0; i < lvJobs.Columns.Count; i++)
{
ColumnHeader header = lvJobs.Columns[i];
IndustryJobColumn column = (IndustryJobColumn)header.Tag;
SetColumn(job, item.SubItems[i], column);
}
// Tooltip
var builder = new StringBuilder();
builder.Append($"Issued For: ").AppendLine(job.IssuedFor.ToString());
builder.Append($"Installed: ").AppendLine(job.InstalledTime.
ToAbsoluteDateTimeDescription(DateTimeKind.Local));
builder.Append($"Finishes: ").AppendLine(job.EndDate.
ToAbsoluteDateTimeDescription(DateTimeKind.Local));
builder.Append($"Activity: ").AppendLine(job.Activity.GetDescription());
builder.Append($"Solar System: ").AppendLine(job.SolarSystem.FullLocation);
builder.Append($"Installation: ").AppendLine(job.Installation);
item.ToolTipText = builder.ToString();
return item;
}
///
/// Adjusts the columns.
///
private void AdjustColumns()
{
foreach (ColumnHeader column in lvJobs.Columns)
{
if (m_columns[column.Index].Width == -1)
m_columns[column.Index].Width = -2;
column.Width = m_columns[column.Index].Width;
// Due to .NET design we need to prevent the last colummn to resize to the right end
// Return if it's not the last column and not set to auto-resize
if (column.Index != lvJobs.Columns.Count - 1 || m_columns[column.Index].Width != -2)
continue;
const int Pad = 4;
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(column.Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (lvJobs.SmallImageList != null && column.ImageIndex > -1)
columnHeaderWidth += lvJobs.SmallImageList.ImageSize.Width + Pad;
// Calculate the width of the header and the items of the column
int columnMaxWidth = column.ListView.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[column.Index].Text, Font).Width).Concat(
new[] { columnHeaderWidth }).Max() + Pad + 1;
// Assign the width found
column.Width = columnMaxWidth;
}
}
///
/// Updates the item sorter.
///
private void UpdateSort()
{
lvJobs.ListViewItemSorter = new ListViewItemComparerByTag(
new IndustryJobComparer(m_sortCriteria, m_sortAscending));
UpdateSortVisualFeedback();
}
///
/// Updates the sort feedback (the arrow on the header).
///
private void UpdateSortVisualFeedback()
{
foreach (ColumnHeader columnHeader in lvJobs.Columns.Cast())
{
IndustryJobColumn column = (IndustryJobColumn)columnHeader.Tag;
if (m_sortCriteria == column)
columnHeader.ImageIndex = m_sortAscending ? 0 : 1;
else
columnHeader.ImageIndex = 2;
}
}
///
/// Updates the listview sub-item.
///
///
///
///
private static void SetColumn(IndustryJob job, ListViewItem.ListViewSubItem item, IndustryJobColumn column)
{
switch (column)
{
case IndustryJobColumn.State:
item.Text = job.State == JobState.Active ? job.ActiveJobState.
GetDescription() : job.State.ToString();
item.ForeColor = GetStateColor(job);
break;
case IndustryJobColumn.TTC:
item.Text = job.TTC;
if (job.State == JobState.Paused)
item.ForeColor = Color.Red;
break;
case IndustryJobColumn.InstalledItem:
item.Text = job.InstalledItem.Name;
break;
case IndustryJobColumn.InstalledItemType:
item.Text = job.InstalledItem.MarketGroup.CategoryPath;
break;
case IndustryJobColumn.OutputItem:
long units = GetUnitCount(job);
// If units goes over max int, limit to max int for pluralization
item.Text = units + " Unit" + ((int)Math.Min(units, int.MaxValue)).S() +
" of " + job.OutputItem.Name;
break;
case IndustryJobColumn.OutputItemType:
item.Text = job.OutputItem.MarketGroup.CategoryPath;
break;
case IndustryJobColumn.Activity:
item.Text = job.Activity.GetDescription();
break;
case IndustryJobColumn.InstallTime:
item.Text = job.InstalledTime.ToLocalTime().ToString();
break;
case IndustryJobColumn.EndTime:
item.Text = job.EndDate.ToLocalTime().ToString();
break;
case IndustryJobColumn.OriginalOrCopy:
item.Text = EveMonConstants.UnknownText;
break;
case IndustryJobColumn.InstalledME:
item.Text = string.Empty; /*(job.Activity == BlueprintActivity.ResearchingMaterialEfficiency
? job.InstalledME.ToString(CultureConstants.DefaultCulture)
: String.Empty);*/
break;
case IndustryJobColumn.EndME:
item.Text = string.Empty; /*(job.Activity == BlueprintActivity.ResearchingMaterialEfficiency
? (job.InstalledME + job.Runs).ToString(CultureConstants.DefaultCulture)
: String.Empty);*/
break;
case IndustryJobColumn.InstalledPE:
item.Text = string.Empty; /*(job.Activity == BlueprintActivity.ResearchingTimeEfficiency
? job.InstalledTE.ToString(CultureConstants.DefaultCulture)
: String.Empty);*/
break;
case IndustryJobColumn.EndPE:
item.Text = string.Empty; /*(job.Activity == BlueprintActivity.ResearchingTimeEfficiency
? (job.InstalledTE + job.Runs).ToString(CultureConstants.DefaultCulture)
: String.Empty);*/
break;
case IndustryJobColumn.Location:
item.Text = job.FullLocation;
break;
case IndustryJobColumn.Region:
item.Text = job.SolarSystem.Constellation.Region.Name;
break;
case IndustryJobColumn.SolarSystem:
item.Text = job.SolarSystem.Name;
item.ForeColor = job.SolarSystem.SecurityLevelColor;
break;
case IndustryJobColumn.Installation:
item.Text = job.Installation;
break;
case IndustryJobColumn.IssuedFor:
item.Text = job.IssuedFor.ToString();
break;
case IndustryJobColumn.LastStateChange:
item.Text = job.LastStateChange.ToLocalTime().ToString();
break;
case IndustryJobColumn.Cost:
item.Text = job.Cost.ToNumericString(2);
break;
case IndustryJobColumn.Probability:
item.Text = Math.Abs(job.Probability) < double.Epsilon ? string.Empty :
job.Probability.ToString("P1");
break;
case IndustryJobColumn.Runs:
item.Text = job.Runs.ToString();
break;
default:
throw new NotImplementedException();
}
}
#endregion
# region Helper Methods
///
/// Gets the unit count.
///
/// The job.
///
private static long GetUnitCount(IndustryJob job)
{
switch (job.Activity)
{
case BlueprintActivity.Manufacturing:
// Returns the amount produced
return (long)job.Runs * job.OutputItem.PortionSize;
case BlueprintActivity.SimpleReactions:
return job.Runs * job.InstalledItem.ReactionOutcome.Quantity;
case BlueprintActivity.Reactions:
return job.Runs * job.InstalledItem.ReactionOutcome.Quantity;
default:
return 1L;
}
}
///
/// Gets the color of the state.
///
/// The job.
///
private static Color GetStateColor(IndustryJob job)
{
switch (job.State)
{
case JobState.Canceled:
return Color.DarkGray;
case JobState.Failed:
return Color.DarkRed;
case JobState.Paused:
return Color.RoyalBlue;
case JobState.Active:
return GetActiveJobStateColor(job.ActiveJobState);
default:
return SystemColors.GrayText;
}
}
///
/// Gets the color of the active job state.
///
/// State of the active job.
///
private static Color GetActiveJobStateColor(ActiveJobState activeJobState)
{
switch (activeJobState)
{
case ActiveJobState.Pending:
return Color.Red;
case ActiveJobState.InProgress:
return Color.Orange;
case ActiveJobState.Ready:
return Color.Green;
default:
return SystemColors.GrayText;
}
}
///
/// Checks the given text matches the item.
///
/// The x.
/// The text.
///
/// true if [is text matching] [the specified x]; otherwise, false.
///
private static bool IsTextMatching(IndustryJob x, string text) => string.
IsNullOrEmpty(text) || x.InstalledItem.Name.Contains(text, ignoreCase: true) ||
x.OutputItem.Name.Contains(text, ignoreCase: true) ||
(x.Installation?.Contains(text, ignoreCase: true) ?? false) ||
(x.SolarSystem?.Name?.Contains(text, ignoreCase: true) ?? false) ||
(x.SolarSystem?.Constellation?.Name?.Contains(text, ignoreCase: true) ?? false) ||
(x.SolarSystem?.Constellation?.Region?.Name?.Contains(text, ignoreCase: true) ??
false);
///
/// Updates the time to completion.
///
private void UpdateTimeToCompletion()
{
const int Pad = 4;
int columnTTCIndex = m_columns.IndexOf(m_columns.FirstOrDefault(x => x.Column ==
IndustryJobColumn.TTC));
foreach (ListViewItem listViewItem in lvJobs.Items.Cast())
{
IndustryJob job = (IndustryJob)listViewItem.Tag;
if (!job.IsActive || job.ActiveJobState == ActiveJobState.Ready)
continue;
// Update the time to completion
if (columnTTCIndex != -1 && m_columns[columnTTCIndex].Visible)
{
if (m_columnTTCIndex == -1)
m_columnTTCIndex = lvJobs.Columns[columnTTCIndex].DisplayIndex;
listViewItem.SubItems[m_columnTTCIndex].Text = job.TTC;
// Using AutoResizeColumn when TTC is the first column
// results to a nasty visual bug due to ListViewItem.ImageIndex placeholder
if (m_columnTTCIndex == 0)
{
// Calculate column header text width with padding
int columnHeaderWidth = TextRenderer.MeasureText(lvJobs.Columns[
m_columnTTCIndex].Text, Font).Width + Pad * 2;
// If there is an image assigned to the header, add its width with padding
if (ilIcons.ImageSize.Width > 0)
columnHeaderWidth += ilIcons.ImageSize.Width + Pad;
int columnWidth = Math.Max(lvJobs.Items.Cast().Select(
item => TextRenderer.MeasureText(item.SubItems[m_columnTTCIndex].
Text, Font).Width).Max(), columnHeaderWidth) + Pad + 2;
lvJobs.Columns[m_columnTTCIndex].Width = columnWidth;
}
else
lvJobs.AutoResizeColumn(m_columnTTCIndex, ColumnHeaderAutoResizeStyle.
HeaderSize);
}
// Job was pending and its time to start
if (job.ActiveJobState == ActiveJobState.Pending && job.StartDate < DateTime.
UtcNow)
{
job.ActiveJobState = ActiveJobState.InProgress;
UpdateContent();
}
if (job.TTC.Length != 0)
continue;
// Job is ready
job.ActiveJobState = ActiveJobState.Ready;
UpdateContent();
}
}
#endregion
#region Event Handlers
///
/// Exports item info to CSV format.
///
///
///
private void exportToCSVToolStripMenuItem_Click(object sender, EventArgs e)
{
ListViewExporter.CreateCSV(lvJobs);
}
///
/// Handles the Tick event of the m_timer control.
///
/// The source of the event.
/// The instance containing the event data.
private void refresh_TimerTick(object sender, EventArgs e)
{
UpdateTimeToCompletion();
}
///
/// On column reorder we update the settings.
///
///
///
private void listView_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
m_columnsChanged = true;
}
///
/// When the user manually resizes a column, we make sure to update the column preferences.
///
///
///
private void listView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (m_isUpdatingColumns || m_columns.Count <= e.ColumnIndex)
return;
// Don't update the columns if the TTC column width changes
if (e.ColumnIndex == m_columnTTCIndex)
return;
if (m_columns[e.ColumnIndex].Width == lvJobs.Columns[e.ColumnIndex].Width)
return;
m_columns[e.ColumnIndex].Width = lvJobs.Columns[e.ColumnIndex].Width;
m_columnsChanged = true;
}
///
/// When the user clicks a column header, we update the sorting.
///
///
///
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
IndustryJobColumn column = (IndustryJobColumn)lvJobs.Columns[e.Column].Tag;
if (m_sortCriteria == column)
m_sortAscending = !m_sortAscending;
else
{
m_sortCriteria = column;
m_sortAscending = true;
}
m_isUpdatingColumns = true;
// Updates the item sorter
UpdateSort();
m_isUpdatingColumns = false;
}
///
/// When the mouse gets pressed, we change the cursor.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
return;
lvJobs.Cursor = Cursors.Default;
}
///
/// When the mouse moves over the list, we show the item's tooltip if over an item.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
return;
lvJobs.Cursor = CustomCursors.ContextMenu;
ListViewItem item = lvJobs.GetItemAt(e.Location.X, e.Location.Y);
if (item == null)
{
m_tooltip.Hide();
return;
}
m_tooltip.Show(item.ToolTipText, e.Location);
}
///
/// When the mouse leaves the list, we hide the item's tooltip.
///
/// The source of the event.
/// The instance containing the event data.
private void listView_MouseLeave(object sender, EventArgs e)
{
m_tooltip.Hide();
}
///
/// Handles the Opening event of the contextMenu control.
///
/// The source of the event.
/// The instance containing the event data.
private void contextMenu_Opening(object sender, CancelEventArgs e)
{
bool visible = lvJobs.SelectedItems.Count != 0;
showInstalledInBrowserMenuItem.Visible =
showProducedInBrowserMenuItem.Visible =
showInBrowserMenuSeparator.Visible = visible;
if (!visible)
return;
IndustryJob job = lvJobs.SelectedItems[0]?.Tag as IndustryJob;
if (job?.InstalledItem == null || job.OutputItem == null)
return;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(job.OutputItem.ID);
Ship ship = job.OutputItem as Ship;
string text = ship != null ? "Ship" : blueprint != null ? "Blueprint" : "Item";
showProducedInBrowserMenuItem.Text = $"Show Output In {text} Browser...";
}
///
/// Handles the Click event of the showInBrowserMenuItem control.
///
/// The source of the event.
/// The instance containing the event data.
private void showInBrowserMenuItem_Click(object sender, EventArgs e)
{
ToolStripItem menuItem = sender as ToolStripItem;
if (menuItem == null)
return;
IndustryJob job = lvJobs.SelectedItems[0]?.Tag as IndustryJob;
if (menuItem == showInstalledInBrowserMenuItem)
{
if (job?.OutputItem == null)
return;
// showProducedInBrowserMenuItem was clicked
Ship ship = job.OutputItem as Ship;
Blueprint blueprint = StaticBlueprints.GetBlueprintByID(job.OutputItem.ID);
PlanWindow planWindow = PlanWindow.ShowPlanWindow(Character);
if (ship != null)
planWindow.ShowShipInBrowser(ship);
else if (blueprint != null)
planWindow.ShowBlueprintInBrowser(blueprint);
else
planWindow.ShowItemInBrowser(job.OutputItem);
return;
}
if (job?.InstalledItem == null)
return;
// showInstalledInBrowserMenuItem was clicked
PlanWindow.ShowPlanWindow(Character).ShowBlueprintInBrowser(job.InstalledItem);
}
# endregion
#region Global Events
///
/// Handles the IndustryJobsCompleted event of the EveMonClient control.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_CharacterIndustryJobsCompleted(object sender, IndustryJobsEventArgs e)
{
UpdateContent();
}
///
/// When the ID to name conversion is updated, update the list.
///
///
///
private void EveMonClient_EveIDToNameUpdated(object sender, EventArgs e)
{
UpdateContent();
}
///
/// When the industry jobs are updated, update the list and the expandable panel info.
///
///
///
private void EveMonClient_IndustryJobsUpdated(object sender, CharacterChangedEventArgs e)
{
if (Character == null || e.Character != Character)
return;
Jobs = Character.IndustryJobs;
UpdateColumns();
}
///
/// On timer tick, we update the internal timer and
/// and the columns settings if any changes have beem made to them.
///
///
///
private void EveMonClient_TimerTick(object sender, EventArgs e)
{
if (!Visible)
{
if (m_refreshTimer.Enabled)
m_refreshTimer.Stop();
return;
}
// Find how many jobs are active and not ready
int activeJobs = lvJobs.Items.Cast().Select(
item => (IndustryJob)item.Tag).Count(job => job.IsActive && job.ActiveJobState != ActiveJobState.Ready);
// We use time dilation according to the ammount of active jobs that are not ready,
// due to excess CPU usage for computing the 'time to completion' when there are too many jobs
m_refreshTimer.Interval = 900 + 100 * activeJobs;
if (!m_columnsChanged)
return;
Settings.UI.MainWindow.IndustryJobs.Columns.Clear();
Settings.UI.MainWindow.IndustryJobs.Columns.AddRange(Columns.Cast());
// Recreate the columns
Columns = Settings.UI.MainWindow.IndustryJobs.Columns;
m_columnsChanged = false;
}
///
/// When Conquerable Station List updates, update the list.
///
/// The source of the event.
/// The instance containing the event data.
private void EveMonClient_ConquerableStationListUpdated(object sender, EventArgs e)
{
if (Character == null)
return;
foreach (IndustryJob job in m_list)
{
job.UpdateInstallation(this.Character);
}
UpdateColumns();
}
#endregion
#region Updates Expandable Panel On Global Events
///
/// Updates the content of the expandable panel.
///
private void UpdateExpPanelContent()
{
if (Character == null)
{
industryExpPanelControl.Visible = false;
return;
}
// Calculate the related info for the panel
CalculatePanelInfo();
// Update the Header text of the panel
UpdateHeaderText();
// Update the info in the panel
UpdatePanelInfo();
// Force to redraw
industryExpPanelControl.Refresh();
}
///
/// Gets a subset of the header panel text.
///
/// The type of job to display.
/// The number of jobs given from skills including the base
/// 1 job.
/// The number of active jobs issued.
/// Text describing the number of jobs left.
private string GetHeaderText(string header, int totalJobs, JobsIssued issued)
{
long remainingJobs = Math.Max(0L, totalJobs - issued.ForCharacter - issued.
ForCorporation);
return string.Format("{0} Jobs Remaining: {1:D} out of {2:D} max", header,
remainingJobs, totalJobs);
}
///
/// Updates the header text of the panel.
///
private void UpdateHeaderText()
{
industryExpPanelControl.HeaderText = GetHeaderText("Manufacturing",
m_skillBasedManufacturingJobs, m_activeManufacturing) + " " +
GetHeaderText("Researching", m_skillBasedResearchingJobs, m_activeResearch) +
" " + GetHeaderText("Reaction", m_skillBasedReactionJobs,
m_activeReactions);
}
///
/// Updates the labels text in the panel.
///
private void UpdatePanelInfo()
{
// Basic label text
m_lblActiveManufacturingJobs.Text = "Active Manufacturing Jobs: " +
m_activeManufacturing.Total;
m_lblActiveResearchingJobs.Text = "Active Researching Jobs: " +
m_activeResearch.Total;
m_lblActiveReactionJobs.Text = "Active Reaction Jobs: " + m_activeReactions.Total;
m_lblRemoteManufacturingRange.Text = "Remote Manufacturing Range: limited to " +
StaticGeography.GetRange(m_remoteManufacturingRange);
m_lblRemoteResearchingRange.Text = $"Remote Researching Range: limited to " +
StaticGeography.GetRange(m_remoteResearchingRange);
m_lblRemoteReactionRange.Text = $"Remote Reaction Range: limited to " +
StaticGeography.GetRange(m_remoteReactionsRange);
if (HasActiveCorporationIssuedJobs)
{
// Supplemental label text
m_lblActiveCharManufacturingJobs.Text = $"Character Issued: {m_activeManufacturing.ForCharacter}";
m_lblActiveCorpManufacturingJobs.Text = $"Corporation Issued: {m_activeManufacturing.ForCorporation}";
m_lblActiveCharResearchingJobs.Text = $"Character Issued: {m_activeResearch.ForCharacter}";
m_lblActiveCorpResearchingJobs.Text = $"Corporation Issued: {m_activeResearch.ForCorporation}";
m_lblActiveCharReactionJobs.Text = $"Character Issued: {m_activeReactions.ForCharacter}";
m_lblActiveCorpReactionJobs.Text = $"Corporation Issued: {m_activeReactions.ForCorporation}";
}
// Update label position
UpdatePanelControlPosition();
}
///
/// Updates the position of controls in the expandable panel.
///
/// The current panel height.
/// The label showing total jobs.
/// The label showing job range.
/// The label showing character jobs.
/// The label showing corporation jobs.
/// The new panel height.
private int UpdatePanelItemPosition(int height, Label totalJobs, Label range,
Label charJobs, Label corpJobs)
{
totalJobs.Location = new Point(PAD, height);
range.Location = new Point(range.Location.X, height);
if (HasActiveCorporationIssuedJobs)
{
charJobs.Location = new Point(PAD * 3, height);
charJobs.Visible = true;
corpJobs.Location = new Point(PAD * 3, height);
corpJobs.Visible = true;
height += charJobs.Height + corpJobs.Height + PAD;
}
else
{
charJobs.Visible = false;
corpJobs.Visible = false;
}
height += totalJobs.Height;
return height;
}
///
/// Updates expandable panel controls positions.
///
private void UpdatePanelControlPosition()
{
industryExpPanelControl.SuspendLayout();
int height = industryExpPanelControl.ExpandDirection == Direction.Up ? PAD :
industryExpPanelControl.HeaderHeight;
height = UpdatePanelItemPosition(height, m_lblActiveManufacturingJobs,
m_lblRemoteManufacturingRange, m_lblActiveCharManufacturingJobs,
m_lblActiveCorpManufacturingJobs);
height = UpdatePanelItemPosition(height, m_lblActiveResearchingJobs,
m_lblRemoteResearchingRange, m_lblActiveCharResearchingJobs,
m_lblActiveCorpResearchingJobs);
height = UpdatePanelItemPosition(height, m_lblActiveReactionJobs,
m_lblRemoteReactionRange, m_lblActiveCharReactionJobs,
m_lblActiveCorpReactionJobs) + PAD;
// Update panel's expanded height
industryExpPanelControl.ExpandedHeight = height + ((industryExpPanelControl.
ExpandDirection == Direction.Up) ? industryExpPanelControl.HeaderHeight : PAD);
industryExpPanelControl.ResumeLayout(false);
}
///
/// Calculates the industry jobs related info for the panel.
///
private void CalculatePanelInfo()
{
m_activeManufacturing = new JobsIssued(m_list, BlueprintActivity.Manufacturing);
m_activeResearch = new JobsIssued(m_list, BlueprintActivity.ResearchingTechnology,
BlueprintActivity.ResearchingMaterialEfficiency, BlueprintActivity.Copying,
BlueprintActivity.Duplicating, BlueprintActivity.Invention, BlueprintActivity.
ReverseEngineering, BlueprintActivity.ResearchingTimeEfficiency);
m_activeReactions = new JobsIssued(m_list, BlueprintActivity.SimpleReactions,
BlueprintActivity.Reactions);
// Calculate character's max manufacturing jobs
m_skillBasedManufacturingJobs = IndustryJob.MaxManufacturingJobsFor(Character);
// Calculate character's max researching jobs
m_skillBasedResearchingJobs = IndustryJob.MaxResearchJobsFor(Character);
// Calculate character's max reaction jobs
m_skillBasedReactionJobs = IndustryJob.MaxReactionJobsFor(Character);
// Calculate character's remote manufacturing range
m_remoteManufacturingRange = Character.LastConfirmedSkillLevel(DBConstants.
SupplyChainManagementSkillID);
// Calculate character's remote researching range
m_remoteResearchingRange = Character.LastConfirmedSkillLevel(DBConstants.
ScientificNetworkingSkillID);
// Calculate character's remote reactions range
m_remoteReactionsRange = Character.LastConfirmedSkillLevel(DBConstants.
RemoteReactionsSkillID);
}
# endregion
#region Initialize Expandable Panel Controls
// Basic labels constructor
private readonly Label m_lblActiveManufacturingJobs = new Label();
private readonly Label m_lblActiveResearchingJobs = new Label();
private readonly Label m_lblActiveReactionJobs = new Label();
private readonly Label m_lblRemoteManufacturingRange = new Label();
private readonly Label m_lblRemoteResearchingRange = new Label();
private readonly Label m_lblRemoteReactionRange = new Label();
// Supplemental labels constructor
private readonly Label m_lblActiveCharManufacturingJobs = new Label();
private readonly Label m_lblActiveCorpManufacturingJobs = new Label();
private readonly Label m_lblActiveCharResearchingJobs = new Label();
private readonly Label m_lblActiveCorpResearchingJobs = new Label();
private readonly Label m_lblActiveCharReactionJobs = new Label();
private readonly Label m_lblActiveCorpReactionJobs = new Label();
private void InitializeExpandablePanelControls()
{
industryExpPanelControl.SuspendLayout();
// Add basic labels to panel
industryExpPanelControl.Controls.AddRange(new Control[]
{
m_lblActiveManufacturingJobs,
m_lblActiveResearchingJobs,
m_lblActiveReactionJobs,
m_lblRemoteManufacturingRange,
m_lblRemoteResearchingRange,
m_lblRemoteReactionRange
});
// Add supplemental labels to panel
industryExpPanelControl.Controls.AddRange(new Control[]
{
m_lblActiveCharManufacturingJobs,
m_lblActiveCorpManufacturingJobs,
m_lblActiveCharResearchingJobs,
m_lblActiveCorpResearchingJobs,
m_lblActiveCharReactionJobs,
m_lblActiveCorpReactionJobs
});
// Apply properties
foreach (Label label in industryExpPanelControl.Controls.OfType