diff --git a/Application/ModernSetupApp/ModernSetupApp.c b/Application/ModernSetupApp/ModernSetupApp.c index ac49438..637433f 100644 --- a/Application/ModernSetupApp/ModernSetupApp.c +++ b/Application/ModernSetupApp/ModernSetupApp.c @@ -413,7 +413,7 @@ UefiMain ( if ((Focus == SetupFocusContent) && (Page == PagePreferences) && mModernSetupPreferencePopupOpen) { ModernSetupHandlePreferencePopupUp (); } else if ((Focus == SetupFocusContent) && (Page == PageExit) && mModernSetupLanguageDropdownOpen) { - mModernSetupLanguageDropdownSelection = (mModernSetupLanguageDropdownSelection == 0) ? 1 : 0; + mModernSetupLanguageDropdownSelection = (mModernSetupLanguageDropdownSelection == 0) ? (MODERN_SETUP_LANGUAGE_OPTION_COUNT - 1) : (mModernSetupLanguageDropdownSelection - 1); } else if ((Focus == SetupFocusContent) && (Page == PageDashboard)) { if (ModernSetupGetDashboardQuickGrid (&Ui, mModernSetupPreferences.DashboardDensity, &DashboardGrid) && (DashboardSelection >= DashboardGrid.CardsPerRow)) @@ -437,7 +437,7 @@ UefiMain ( if ((Focus == SetupFocusContent) && (Page == PagePreferences) && mModernSetupPreferencePopupOpen) { ModernSetupHandlePreferencePopupDown (); } else if ((Focus == SetupFocusContent) && (Page == PageExit) && mModernSetupLanguageDropdownOpen) { - mModernSetupLanguageDropdownSelection = (mModernSetupLanguageDropdownSelection + 1) % 2; + mModernSetupLanguageDropdownSelection = (mModernSetupLanguageDropdownSelection + 1) % MODERN_SETUP_LANGUAGE_OPTION_COUNT; } else if (Focus == SetupFocusNav) { if (ModernSetupGetPageSelectableCount (&Ui, Page) > 0) { Focus = SetupFocusContent; diff --git a/Application/ModernSetupApp/ModernSetupAppActions.c b/Application/ModernSetupApp/ModernSetupAppActions.c index bb5fcd4..46a9372 100644 --- a/Application/ModernSetupApp/ModernSetupAppActions.c +++ b/Application/ModernSetupApp/ModernSetupAppActions.c @@ -530,22 +530,54 @@ ModernSetupGetLanguageOptionName ( IN UINTN Selection ) { - return (Selection == 0) ? - ModernUiGetString (ModernUiStringLanguageChinese) : - ModernUiGetString (ModernUiStringLanguageEnglish); + switch (Selection) { + case 0: + return ModernUiGetString (ModernUiStringLanguageChinese); + case 2: + return ModernUiGetString (ModernUiStringLanguageRussian); + case 1: + default: + return ModernUiGetString (ModernUiStringLanguageEnglish); + } +} + +/** + Return TRUE when the active UI language is Russian. + + @retval TRUE Active language starts with "ru". + @retval FALSE Active language is another supported language. +**/ +STATIC +BOOLEAN +IsRussianLanguage ( + VOID + ) +{ + CONST CHAR8 *Language; + + Language = ModernUiGetLanguage (); + return (BOOLEAN)((Language[0] == 'r') && (Language[1] == 'u')); } /** Return the selector index for the active language. - @return Zero for Chinese, one for English. + @return Zero for Chinese, two for Russian, one for English. **/ UINTN ModernSetupGetActiveLanguageSelection ( VOID ) { - return IsChineseLanguage () ? 0 : 1; + if (IsChineseLanguage ()) { + return 0; + } + + if (IsRussianLanguage ()) { + return 2; + } + + return 1; } /** @@ -1135,7 +1167,7 @@ ApplyLanguageSelection ( return; } - Language = (Selection == 0) ? "zh-Hans" : "en-US"; + Language = (Selection == 0) ? "zh-Hans" : ((Selection == 2) ? "ru-RU" : "en-US"); Status = ModernUiSetLanguage (Language, TRUE); LanguageName = ModernSetupGetLanguageOptionName (ModernSetupGetActiveLanguageSelection ()); diff --git a/Application/ModernSetupApp/ModernSetupAppChrome.c b/Application/ModernSetupApp/ModernSetupAppChrome.c index 2dbcd45..bddf5db 100644 --- a/Application/ModernSetupApp/ModernSetupAppChrome.c +++ b/Application/ModernSetupApp/ModernSetupAppChrome.c @@ -21,6 +21,7 @@ STATIC CONST PAGE_DESCRIPTOR mPages[] = { { PageManagement, ModernUiStringPageManagement, ModernUiStringPageManagementHint }, { PagePower, ModernUiStringPagePower, ModernUiStringPagePowerHint }, { PagePerformance, ModernUiStringPagePerformance, ModernUiStringPagePerformanceHint }, + { PageQuickSettings, ModernUiStringPageQuickSettings, ModernUiStringPageQuickSettingsHint }, { PageServerInventory, ModernUiStringPageServerInventory, ModernUiStringPageServerInventoryHint }, { PagePreferences, ModernUiStringPagePreferences, ModernUiStringPagePreferencesHint }, { PageExit, ModernUiStringPageExit, ModernUiStringPageExitHint } @@ -37,6 +38,7 @@ STATIC CONST CHAR16 *mEnglishCompactTabLabels[] = { L"Mgmt", L"Power", L"Perf", + L"Quick", L"Assets", L"Prefs", L"Exit" @@ -53,6 +55,7 @@ STATIC CONST CHAR16 *mChineseCompactTabLabels[] = { L"管理", L"电源", L"性能", + L"设置", L"资产", L"偏好", L"退出" diff --git a/Application/ModernSetupApp/ModernSetupAppInternal.h b/Application/ModernSetupApp/ModernSetupAppInternal.h index aff6031..b19d705 100644 --- a/Application/ModernSetupApp/ModernSetupAppInternal.h +++ b/Application/ModernSetupApp/ModernSetupAppInternal.h @@ -79,6 +79,13 @@ #define MODERN_SETUP_EXIT_ROW_COUNT 4 #define MODERN_SETUP_EXIT_VALUE_WIDTH 220 +// +// Language selector options, in selector-index order: 0 Chinese, 1 English, +// 2 Russian. Keep the dropdown cycle, draw loop, and option-name/apply mapping +// in sync with this count. +// +#define MODERN_SETUP_LANGUAGE_OPTION_COUNT 3 + typedef enum { PageDashboard = 0, PageSystemInfo, @@ -90,6 +97,7 @@ typedef enum { PageManagement, PagePower, PagePerformance, + PageQuickSettings, PageServerInventory, PagePreferences, PageExit, diff --git a/Application/ModernSetupApp/ModernSetupAppPages.c b/Application/ModernSetupApp/ModernSetupAppPages.c index cfc32b9..04ccc53 100644 --- a/Application/ModernSetupApp/ModernSetupAppPages.c +++ b/Application/ModernSetupApp/ModernSetupAppPages.c @@ -1680,6 +1680,110 @@ SnapshotCapabilityText ( return CapabilityText (Present); } +/** + Draw the Quick Settings page: high-churn platform knobs grouped by domain. + + Tier-B prototype per Docs/ConfigurableItemsAndQuickSettings.md. This curates + the read-only policy-entry presence hints the providers already discover + (SR-IOV, Above-4G, ASPM, VT-d/IOMMU, RAS, Secure Boot, ...) into one screen so + a user can see, at a glance, which high-churn settings this platform exposes. + It is intentionally read-only: changing any of these stays in native + FormBrowser. (Per-row SendForm deep-link is a follow-up slice.) + + @param[in] Ui Initialized render context. Must not be NULL. + @param[in] Theme Theme token table. Must not be NULL. + @param[in] Focus Current focus area. +**/ +STATIC +VOID +MODERN_SETUP_NOINLINE +DrawQuickSettings ( + IN MODERN_UI_RENDER_CONTEXT *Ui, + IN CONST MODERN_UI_THEME *Theme, + IN SETUP_FOCUS Focus + ) +{ + MODERN_SETUP_PROVIDER_SNAPSHOT Providers; + MODERN_UI_RECT Content; + MODERN_UI_RECT Panel; + MODERN_UI_RECT Column; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background; + UINTN LeftWidth; + UINTN RightWidth; + UINTN RowY; + CONST CHAR16 *SecureBootText; + + ModernSetupGetCachedProviderSnapshot (&Providers); + + SecureBootText = (Providers.Security.SecureBoot == ModernUiSecurityStateEnabled) ? ModernUiGetString (ModernUiStringEnabled) : + ((Providers.Security.SecureBoot == ModernUiSecurityStateDisabled) ? ModernUiGetString (ModernUiStringDisabled) : ModernUiGetString (ModernUiStringUnknown)); + + Content = ModernSetupContentRect (Ui); + Panel = (MODERN_UI_RECT){ Content.X, Content.Y, Content.Width, MIN (Content.Height, 540) }; + Background = ModernUiBlendColor (Theme->Surface, Theme->BackgroundBlack, 30); + DrawProviderSummarySection (Ui, Theme, Panel, L"Quick Settings", TRUE); + ModernUiDrawFocusFrame (Ui, Panel, (BOOLEAN)(Focus == SetupFocusContent), Theme); + ModernUiDrawTextFit ( + Ui, + Panel.X + 22, + Panel.Y + 38, + Panel.Width - 44, + L"Read-only entry points to high-churn settings. Change them in native setup.", + Theme->MutedText, + Background + ); + + if (Panel.Width >= 720) { + LeftWidth = (Panel.Width - 60) / 2; + RightWidth = Panel.Width - 60 - LeftWidth; + } else { + LeftWidth = Panel.Width - 44; + RightWidth = 0; + } + + Column = (MODERN_UI_RECT){ Panel.X + 22, Panel.Y + 70, LeftWidth, Panel.Height - 86 }; + RowY = Column.Y; + DrawProviderSubsectionHeader (Ui, Theme, Column.X, RowY, Column.Width, L"Virtualization & Isolation"); + RowY += 22; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"VT-d / IOMMU", SnapshotCapabilityText (Providers.PcieStatus, (BOOLEAN)(Providers.Pcie.IommuPolicyEntryPresent || Providers.Pcie.IoMmuProtocolPresent))); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"SR-IOV", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.SriovPolicyEntryPresent)); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"ACS / ARI", SnapshotCapabilityText (Providers.PcieStatus, (BOOLEAN)(Providers.Pcie.AcsPolicyEntryPresent || Providers.Pcie.AriPolicyEntryPresent))); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"CPU virtualization", SnapshotCapabilityText (Providers.PerformanceStatus, Providers.Performance.VirtualizationPolicyEntryPresent)); + RowY += 36; + + DrawProviderSubsectionHeader (Ui, Theme, Column.X, RowY, Column.Width, L"Security"); + RowY += 22; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, ModernUiGetString (ModernUiStringSecureBoot), SecureBootText); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"TPM (TCG2)", SnapshotCapabilityText (Providers.SecurityStatus, (BOOLEAN)(Providers.Security.Tcg2Protocol == ModernUiSecurityStateEnabled))); + + if (RightWidth == 0) { + return; + } + + Column = (MODERN_UI_RECT){ Panel.X + 38 + LeftWidth, Panel.Y + 70, RightWidth, Panel.Height - 86 }; + RowY = Column.Y; + DrawProviderSubsectionHeader (Ui, Theme, Column.X, RowY, Column.Width, L"PCIe Resource"); + RowY += 22; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"Above 4G Decoding", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.Above4GPolicyEntryPresent)); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"Resizable BAR", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.ResizeBarPolicyEntryPresent)); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"ASPM", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.AspmPolicyEntryPresent)); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"Hot-Plug", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.HotPlugPolicyEntryPresent)); + RowY += 36; + + DrawProviderSubsectionHeader (Ui, Theme, Column.X, RowY, Column.Width, L"Tuning / Serviceability"); + RowY += 22; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"RAS policy", SnapshotCapabilityText (Providers.PerformanceStatus, Providers.Performance.RasPolicyEntryPresent)); + RowY += 26; + DrawProviderSummaryInfoRow (Ui, Theme, Column.X, RowY, Column.Width, L"PCIe config page", SnapshotCapabilityText (Providers.PcieStatus, Providers.Pcie.PciePolicyEntryPresent)); +} + /** Draw a compact read-only Server Inventory summary from app provider snapshots. @@ -2092,11 +2196,11 @@ DrawExit ( DropdownX = RowX + RowWidth - ValueWidth - 12; DropdownY = Panel.Y + MODERN_SETUP_EXIT_ROW_TOP + MODERN_SETUP_EXIT_ROW_COUNT * MODERN_SETUP_EXIT_ROW_STRIDE - 8; - PopupModel.Rect = (MODERN_UI_RECT){ DropdownX, DropdownY, ValueWidth, 80 }; + PopupModel.Rect = (MODERN_UI_RECT){ DropdownX, DropdownY, ValueWidth, 14 + MODERN_SETUP_LANGUAGE_OPTION_COUNT * 34 }; PopupModel.Title = NULL; ModernUiEngineDrawPopup (Ui, &PopupModel, Theme); - for (Option = 0; Option < 2; Option++) { + for (Option = 0; Option < MODERN_SETUP_LANGUAGE_OPTION_COUNT; Option++) { IsSelected = (BOOLEAN)(Option == mModernSetupLanguageDropdownSelection); RowModel.Rect = (MODERN_UI_RECT){ DropdownX + 6, DropdownY + 7 + Option * 34, ValueWidth - 12, 30 }; RowModel.Prompt = ModernSetupGetLanguageOptionName (Option); @@ -2172,6 +2276,9 @@ ModernSetupDrawCurrentPage ( case PagePerformance: DrawPerformance (Ui, Theme, Focus); break; + case PageQuickSettings: + DrawQuickSettings (Ui, Theme, Focus); + break; case PageServerInventory: DrawServerInventorySummary (Ui, Theme, Focus); break; diff --git a/CHANGELOG.md b/CHANGELOG.md index 83171bc..3a0822e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,39 @@ this file as both a release log and a lightweight development progress record. ### Added +- **Russian (ru) UI language.** The language selector is now three-way + (Chinese / English / Russian); selecting Русский switches the whole + ModernSetupApp UI to Russian. The Cyrillic glyph subset is baked from + Noto Sans CJK SC (SIL OFL 1.1) into the shared built-in glyph table with + per-glyph proportional advance and baseline alignment, so Cyrillic renders + anti-aliased and properly spaced alongside the Latin/CJK glyphs. Translations + are a best-effort technical pass pending native review. + +### Changed + +- **Native HII form right rail now shows real SMBIOS system data.** The + in-setup chrome's right rail previously displayed a static, partly-placeholder + telemetry panel; it now sources System (SMBIOS Type 1), Processor + (architecture + Type 4 model) and Memory (Type 17 type/speed) from the shared + ModernUiPlatformTablesLib, with an honest Sensors slot (N/A until a physical + platform supplies live readings). Empty fields fall back cleanly, so QEMU + shows what its SMBIOS provides and a real board shows its written identity. +- **Native HII forms get an honest breadcrumb title bar.** On forms reached + via SendForm, the decorative five-category tab strip (which read as clickable + but performed no navigation -- FormBrowser owns Esc=back / arrows=move) is + replaced by a " >
" breadcrumb that makes the real form + identity prominent. The native front page keeps its menu tabs. +- **Native HII forms look cleaner when entered through the modern engine.** + Removed the decorative telemetry rail (a static, partly-placeholder + CPU/Architecture/Memory/Voltage panel) that the DisplayEngine drew on the + right of every FormBrowser form; the form now reclaims that width and shows + no fake data. Also dropped the permanent "LIVE VIEW" footer status pill, + which carried no information and rendered as a clipped stub -- only + actionable states (unsaved / reboot / modal / live-refresh) surface a pill + now. Affects both the GOP and LVGL backends. + +### Added + - The ModernSetupApp header now shows the UI release version (e.g. "Modern UEFI Setup v1.1.0"), so a running UI can be matched to a specific release on screen. The version is a single source of truth in diff --git a/Include/ModernUi/ModernUiString.h b/Include/ModernUi/ModernUiString.h index 333e67b..2c20e83 100644 --- a/Include/ModernUi/ModernUiString.h +++ b/Include/ModernUi/ModernUiString.h @@ -145,6 +145,9 @@ typedef enum { ModernUiStringPreferenceDefaultsLoaded, ModernUiStringPageSystemInfo, ModernUiStringPageSystemInfoHint, + ModernUiStringPageQuickSettings, + ModernUiStringPageQuickSettingsHint, + ModernUiStringLanguageRussian, ModernUiStringMax } MODERN_UI_STRING_ID; diff --git a/Library/ModernUiCustomizedDisplayLib/CustomizedDisplayLibInternal.c b/Library/ModernUiCustomizedDisplayLib/CustomizedDisplayLibInternal.c index 926cd27..0dd1fe6 100644 --- a/Library/ModernUiCustomizedDisplayLib/CustomizedDisplayLibInternal.c +++ b/Library/ModernUiCustomizedDisplayLib/CustomizedDisplayLibInternal.c @@ -273,6 +273,13 @@ ModernDisplayCalculateLayout ( Layout->ContentLeftColumn = gScreenDimensions.LeftColumn + HorizontalMargin; Layout->ContentRightColumn = gScreenDimensions.RightColumn - HorizontalMargin; + // + // The right rail is a system-context panel beside the native form: real + // platform/CPU/memory identity sourced from SMBIOS (see DrawRightRail), with + // a slot reserved for live sensors a physical platform can populate. It is + // shown only when the screen is wide enough that reserving its columns does + // not crowd the statements/help. + // Layout->RightRailVisible = (BOOLEAN)( (ScreenColumns >= MODERN_SETUP_RIGHT_RAIL_MIN_COLUMNS) && ((Layout->ContentRightColumn - Layout->ContentLeftColumn) > @@ -340,11 +347,11 @@ ModernDisplayStatementTextInset ( } /** - Draw a lightweight divider between the statement list and right-side help rail. + Draw a lightweight divider between the statement list and the right rail. - This is a visual grouping hint only. FormBrowser still owns where help text is - printed and how it wraps; the divider simply makes the modern chrome read as - two regions: actionable statements on the left, contextual help on the right. + Visual grouping hint only: FormBrowser still owns where help text is printed. + The divider makes the modern chrome read as two regions -- actionable + statements on the left, the system-context rail on the right. @param[in] Layout Calculated DisplayEngine layout. Must not be NULL. @param[in] Theme Theme token table. Must not be NULL. @@ -578,6 +585,121 @@ ModernDisplayDrawFormTitleContext ( ); } +/** + Draw an honest " > " breadcrumb in the header tab band + for native (non-front-page) FormBrowser forms. + + Replaces the decorative five-category tab strip, which on a native form read as + clickable navigation but performed none -- FormBrowser owns navigation + (Esc = back, arrows = move highlight). The breadcrumb instead states where the + user is and makes the real form identity the prominent element. The category + prefix is shown only for clearly classified forms (Devices/Boot/Security/Exit); + an unclassified form shows just its title so no misleading label is attached. + + Presentation-only: the title comes from FormBrowser-owned FormData and the + category is the same classifier the chrome already used. It does not alter + form navigation, HII GUID binding, callbacks, or storage. + + @param[in] Layout Calculated DisplayEngine layout. Must not be NULL. + @param[in] Theme Theme token table. Must not be NULL. + @param[in] CellHeight Pixel height for one text row. + @param[in] CategoryIndex Chrome tab classifier result (0..4). + @param[in] PrintableTitle Printable form title text. May be NULL. +**/ +STATIC +VOID +ModernDisplayDrawFormBreadcrumb ( + IN CONST MODERN_DISPLAY_LAYOUT *Layout, + IN CONST MODERN_UI_THEME *Theme, + IN UINTN CellWidth, + IN UINTN CellHeight, + IN UINTN CategoryIndex, + IN CONST CHAR16 *PrintableTitle + ) +{ + UINTN HeaderHeight; + UINTN BandY; + UINTN X; + UINTN Width; + UINTN PrefixWidth; + UINTN UnderlineWidth; + CONST CHAR16 *Category; + CHAR16 Prefix[64]; + + if ((Layout == NULL) || (Theme == NULL) || (PrintableTitle == NULL) || + (PrintableTitle[0] == CHAR_NULL) || (CellWidth == 0) || (CellHeight == 0)) + { + return; + } + + HeaderHeight = Layout->HeaderRows * CellHeight; + BandY = (HeaderHeight > 52) ? (HeaderHeight - 52) : 0; + X = Layout->ContentLeftColumn * CellWidth; + Width = (Layout->ContentRightColumn > Layout->ContentLeftColumn) ? + ((Layout->ContentRightColumn - Layout->ContentLeftColumn) * CellWidth) : 0; + if (Width == 0) { + return; + } + + // + // Category prefix only for the clearly classified buckets; index 0 is both the + // "Setup Categories" front bucket and the unmatched default, so prefixing it + // would risk a wrong label -- show the bare title there. + // + Category = NULL; + switch (CategoryIndex) { + case 1: + Category = ModernUiGetString (ModernUiStringPageDevices); + break; + case 2: + Category = ModernUiGetString (ModernUiStringPageBoot); + break; + case 3: + Category = ModernUiGetString (ModernUiStringPageSecurity); + break; + case 4: + Category = ModernUiGetString (ModernUiStringPageExit); + break; + default: + Category = NULL; + break; + } + + PrefixWidth = 0; + if (Category != NULL) { + UnicodeSPrint (Prefix, sizeof (Prefix), L"%s > ", Category); + ModernUiDrawText (&mModernRenderContext, X, BandY + 8, Prefix, Theme->MutedText, Theme->BackgroundBlack); + PrefixWidth = ModernUiMeasureText (Prefix); + } + + // + // The form title is the prominent element (bright Text), so the operator reads + // the page identity at a glance instead of a faint sub-line. + // + ModernUiDrawTextFit ( + &mModernRenderContext, + X + PrefixWidth, + BandY + 8, + (Width > PrefixWidth) ? (Width - PrefixWidth) : Width, + PrintableTitle, + Theme->Text, + Theme->BackgroundBlack + ); + + // + // Accent underline sized to the actual breadcrumb width (prefix + title, + // clamped to the band), so it tracks the text instead of a fixed stub. + // + UnderlineWidth = PrefixWidth + ModernUiMeasureText (PrintableTitle); + UnderlineWidth = MIN (UnderlineWidth, Width); + UnderlineWidth = MAX (UnderlineWidth, 24); + ModernUiFillRect ( + &mModernRenderContext, + (MODERN_UI_RECT){ X, BandY + 34, UnderlineWidth, 2 }, + Theme->AccentYellow + ); +} + /** Return normalized page-level state for the Modern DisplayEngine footer. @@ -641,7 +763,13 @@ ModernDisplayPageStatusText ( return L"LIVE REFRESH"; case ModernDisplayPageStateLive: default: - return L"LIVE VIEW"; + // + // The ordinary "nothing noteworthy" state shows no footer status pill: a + // permanent "LIVE VIEW" badge added no information and rendered as a + // clipped stub in the thin form footer. Only actionable states + // (unsaved / reboot / modal / live-refresh) surface a pill now. + // + return NULL; } } @@ -785,26 +913,57 @@ ModernDisplaySelectChromeTab ( return 0; } - if ((StrStr (Title, L"Boot") != NULL) || (StrStr (Title, L"启动") != NULL)) { + // + // Boot / network-boot forms. + // + if ((StrStr (Title, L"Boot") != NULL) || (StrStr (Title, L"PXE") != NULL) || + (StrStr (Title, L"iSCSI") != NULL) || (StrStr (Title, L"HTTP") != NULL) || + (StrStr (Title, L"启动") != NULL)) + { return 2; } - if ((StrStr (Title, L"Device") != NULL) || (StrStr (Title, L"Driver") != NULL) || - (StrStr (Title, L"设备") != NULL)) + // + // Security / trusted-computing forms. + // + if ((StrStr (Title, L"Security") != NULL) || (StrStr (Title, L"Secure") != NULL) || + (StrStr (Title, L"TPM") != NULL) || (StrStr (Title, L"TCG") != NULL) || + (StrStr (Title, L"TCM") != NULL) || (StrStr (Title, L"Password") != NULL) || + (StrStr (Title, L"安全") != NULL) || (StrStr (Title, L"密码") != NULL)) { - return 1; - } - - if ((StrStr (Title, L"Security") != NULL) || (StrStr (Title, L"安全") != NULL)) { return 3; } + // + // Exit / save-and-reset forms. + // if ((StrStr (Title, L"Exit") != NULL) || (StrStr (Title, L"Save") != NULL) || (StrStr (Title, L"退出") != NULL)) { return 4; } + // + // Device-class hardware forms map to the Devices bucket -- the only chrome + // category that fits controllers, network, storage, memory, graphics, and + // similar device setup pages. Kept last so the more specific buckets above win. + // + if ((StrStr (Title, L"Device") != NULL) || (StrStr (Title, L"Driver") != NULL) || + (StrStr (Title, L"Controller") != NULL) || (StrStr (Title, L"Adapter") != NULL) || + (StrStr (Title, L"Network") != NULL) || (StrStr (Title, L"LAN") != NULL) || + (StrStr (Title, L"NIC") != NULL) || (StrStr (Title, L"Ethernet") != NULL) || + (StrStr (Title, L"PCI") != NULL) || (StrStr (Title, L"USB") != NULL) || + (StrStr (Title, L"Storage") != NULL) || (StrStr (Title, L"SATA") != NULL) || + (StrStr (Title, L"NVMe") != NULL) || (StrStr (Title, L"Disk") != NULL) || + (StrStr (Title, L"Memory") != NULL) || (StrStr (Title, L"Graphics") != NULL) || + (StrStr (Title, L"Display") != NULL) || (StrStr (Title, L"Audio") != NULL) || + (StrStr (Title, L"Health") != NULL) || (StrStr (Title, L"File Explorer") != NULL) || + (StrStr (Title, L"设备") != NULL) || (StrStr (Title, L"网络") != NULL) || + (StrStr (Title, L"存储") != NULL) || (StrStr (Title, L"内存") != NULL)) + { + return 1; + } + return 0; } @@ -1426,6 +1585,8 @@ ModernDisplayDrawPageChrome ( MODERN_UI_PAGE_MODEL PageModel; MODERN_UI_TAB_MODEL Tabs[5]; UINTN HeaderHeight; + UINTN CategoryIndex; + BOOLEAN IsFrontPage; ASSERT (FormData != NULL); if ((FormData == NULL) || EFI_ERROR (ModernDisplayEnsureRenderer ())) { @@ -1487,18 +1648,32 @@ ModernDisplayDrawPageChrome ( Tabs[3].Text = ModernUiGetString (ModernUiStringPageSecurity); Tabs[4].Text = ModernUiGetString (ModernUiStringPageExit); + CategoryIndex = ModernDisplaySelectChromeTab (PrintableTitle); + // + // The native front page is a real menu, so it keeps the category tab strip. + // Every other form reached via SendForm gets an honest breadcrumb title bar + // instead: the five tabs there were decorative (they performed no navigation) + // and read as clickable, while the real form title was only a faint sub-line. + // + IsFrontPage = (BOOLEAN)(gClassOfVfr == FORMSET_CLASS_FRONT_PAGE); + CopyMem (&PageModel.Layout, &EngineLayout, sizeof (PageModel.Layout)); PageModel.Rect = EngineLayout.Header; PageModel.Tabs = Tabs; - PageModel.TabCount = ARRAY_SIZE (Tabs); - PageModel.SelectedTab = ModernDisplaySelectChromeTab (PrintableTitle); + PageModel.TabCount = IsFrontPage ? ARRAY_SIZE (Tabs) : 0; + PageModel.SelectedTab = CategoryIndex; PageModel.ProductName = ModernUiGetString (ModernUiStringHeaderTitle); PageModel.ModeName = ModernUiGetString (ModernUiStringHeaderMode); PageModel.StatusText = ModernDisplayPageStatusText (FormData); PageModel.DrawRightRail = TRUE; ModernUiEngineDrawPage (&mModernRenderContext, &PageModel, Theme); ModernDisplayDrawRightRailDivider (&Layout, Theme, CellWidth, CellHeight); - ModernDisplayDrawFormTitleContext (&Layout, Theme, CellWidth, CellHeight, PrintableTitle); + if (IsFrontPage) { + ModernDisplayDrawFormTitleContext (&Layout, Theme, CellWidth, CellHeight, PrintableTitle); + } else { + ModernDisplayDrawFormBreadcrumb (&Layout, Theme, CellWidth, CellHeight, CategoryIndex, PrintableTitle); + } + ModernDisplayDrawRightHelpRailContext (&Layout, Theme, CellWidth, CellHeight); if (PrintableTitle != NULL) { diff --git a/Library/ModernUiEngineLib/ModernUiEngineLib.c b/Library/ModernUiEngineLib/ModernUiEngineLib.c index f953079..00d816a 100644 --- a/Library/ModernUiEngineLib/ModernUiEngineLib.c +++ b/Library/ModernUiEngineLib/ModernUiEngineLib.c @@ -9,10 +9,13 @@ **/ #include +#include +#include #include #include #include #include +#include #include #define MODERN_UI_ENGINE_RIGHT_RAIL_MIN_WIDTH 1000 @@ -82,6 +85,165 @@ GetPlatformName ( #endif } +/** + Fill Buffer with the real system identity from SMBIOS Type 1, or empty it. + + Composes " " (or whichever single field is present), + filtering well-known OEM placeholders. Read-only; uses the shared table-access + layer so a populated platform (including a real board's written SMBIOS) shows + its true identity. Buffer is left empty when Type 1 is absent / placeholders. + + @param[out] Buffer Destination. Must not be NULL. + @param[in] Count CHAR16 capacity of Buffer. +**/ +STATIC +VOID +RailGetSystemName ( + OUT CHAR16 *Buffer, + IN UINTN Count + ) +{ + EFI_SMBIOS_TABLE_HEADER *Record; + SMBIOS_TABLE_TYPE1 *Type1; + CHAR8 *Manufacturer; + CHAR8 *Product; + + if ((Buffer == NULL) || (Count == 0)) { + return; + } + + Buffer[0] = L'\0'; + Record = ModernUiSmbiosFindStructure (SMBIOS_TYPE_SYSTEM_INFORMATION, 0); + if (Record == NULL) { + return; + } + + Type1 = (SMBIOS_TABLE_TYPE1 *)Record; + Manufacturer = ModernUiSmbiosGetString (Record, Type1->Manufacturer); + Product = ModernUiSmbiosGetString (Record, Type1->ProductName); + if (ModernUiSmbiosIsPlaceholder (Manufacturer)) { + Manufacturer = NULL; + } + + if (ModernUiSmbiosIsPlaceholder (Product)) { + Product = NULL; + } + + if ((Manufacturer != NULL) && (Product != NULL)) { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%a %a", Manufacturer, Product); + } else if (Product != NULL) { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%a", Product); + } else if (Manufacturer != NULL) { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%a", Manufacturer); + } +} + +/** + Fill Buffer with the processor model from SMBIOS Type 4, or empty it. + + @param[out] Buffer Destination. Must not be NULL. + @param[in] Count CHAR16 capacity of Buffer. +**/ +STATIC +VOID +RailGetCpuModel ( + OUT CHAR16 *Buffer, + IN UINTN Count + ) +{ + EFI_SMBIOS_TABLE_HEADER *Record; + SMBIOS_TABLE_TYPE4 *Type4; + CHAR8 *Version; + + if ((Buffer == NULL) || (Count == 0)) { + return; + } + + Buffer[0] = L'\0'; + Record = ModernUiSmbiosFindStructure (SMBIOS_TYPE_PROCESSOR_INFORMATION, 0); + if (Record == NULL) { + return; + } + + Type4 = (SMBIOS_TABLE_TYPE4 *)Record; + Version = ModernUiSmbiosGetString (Record, Type4->ProcessorVersion); + if (!ModernUiSmbiosIsPlaceholder (Version)) { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%a", Version); + } +} + +/** + Fill Buffer with a memory type/speed summary from SMBIOS Type 17, or empty it. + + Takes the type and configured speed from the first populated module, e.g. + "DDR4-3200" or "DDR4". Empty when Type 17 is absent or no module is populated. + + @param[out] Buffer Destination. Must not be NULL. + @param[in] Count CHAR16 capacity of Buffer. +**/ +STATIC +VOID +RailGetMemorySummary ( + OUT CHAR16 *Buffer, + IN UINTN Count + ) +{ + EFI_SMBIOS_TABLE_HEADER *Record; + SMBIOS_TABLE_TYPE17 *Type17; + CONST CHAR16 *TypeName; + UINT16 Speed; + UINTN Index; + + if ((Buffer == NULL) || (Count == 0)) { + return; + } + + Buffer[0] = L'\0'; + for (Index = 0; (Record = ModernUiSmbiosFindStructure (SMBIOS_TYPE_MEMORY_DEVICE, Index)) != NULL; Index++) { + Type17 = (SMBIOS_TABLE_TYPE17 *)Record; + // + // Size 0 = empty slot, 0xFFFF = unknown. Use the first populated module. + // + if ((Type17->Size == 0) || (Type17->Size == 0xFFFF)) { + continue; + } + + switch (Type17->MemoryType) { + case MemoryTypeDdr2: + case MemoryTypeDdr2FbDimm: + TypeName = L"DDR2"; + break; + case MemoryTypeDdr3: + TypeName = L"DDR3"; + break; + case MemoryTypeDdr4: + TypeName = L"DDR4"; + break; + case MemoryTypeDdr5: + TypeName = L"DDR5"; + break; + case MemoryTypeLpddr4: + TypeName = L"LPDDR4"; + break; + case MemoryTypeLpddr5: + TypeName = L"LPDDR5"; + break; + default: + TypeName = L"RAM"; + break; + } + + Speed = (Type17->ConfiguredMemoryClockSpeed != 0) ? Type17->ConfiguredMemoryClockSpeed : Type17->Speed; + if (Speed > 0) { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%s-%u", TypeName, Speed); + } else { + UnicodeSPrint (Buffer, Count * sizeof (CHAR16), L"%s", TypeName); + } + + return; + } +} + /** Return the top Y that vertically centres a single text line within a box. @@ -298,93 +460,78 @@ DrawRightRail ( IN CONST MODERN_UI_THEME *Theme ) { - UINTN X; - UINTN Y; - UINTN SeparatorWidth; - EFI_STATUS Status; + UINTN X; + UINTN Y; + UINTN SeparatorWidth; + UINTN ValueWidth; + CHAR16 SystemName[48]; + CHAR16 CpuModel[40]; + CHAR16 MemSummary[24]; + CONST CHAR16 *SystemText; if ((Context == NULL) || (Theme == NULL) || (Rect.Width == 0) || (Rect.Height == 0)) { return EFI_INVALID_PARAMETER; } - Status = ModernUiFillRect (Context, Rect, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + ModernUiFillRect (Context, Rect, Theme->BackgroundBlack); + ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X, Rect.Y, 1, Rect.Height }, Theme->Border); - Status = ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X, Rect.Y, 1, Rect.Height }, Theme->Border); - if (EFI_ERROR (Status)) { - return Status; - } - - X = Rect.X + 16; - Y = Rect.Y + 18; + X = Rect.X + 16; + Y = Rect.Y + 18; SeparatorWidth = (Rect.Width > 24) ? (Rect.Width - 24) : Rect.Width; + ValueWidth = (Rect.Width > 28) ? (Rect.Width - 28) : Rect.Width; - Status = ModernUiDrawText (Context, X, Y, L"CPU", Theme->AccentYellow, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiDrawText (Context, X, Y + 28, L"Architecture", Theme->MutedText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiDrawText (Context, X, Y + 48, GetArchitectureName (), Theme->TelemetryText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiDrawText (Context, X, Y + 82, L"Platform", Theme->MutedText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiDrawText (Context, X, Y + 102, GetPlatformName (), Theme->TelemetryText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X + 12, Y + 136, SeparatorWidth, 1 }, Theme->Border); - if (EFI_ERROR (Status)) { - return Status; - } - - Status = ModernUiDrawText (Context, X, Y + 158, L"Memory", Theme->AccentYellow, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + // + // Real platform/CPU/memory identity from SMBIOS. Empty fields fall back to the + // architecture-derived defaults, so QEMU shows what its SMBIOS provides and a + // physical board shows its written identity. + // + RailGetSystemName (SystemName, ARRAY_SIZE (SystemName)); + RailGetCpuModel (CpuModel, ARRAY_SIZE (CpuModel)); + RailGetMemorySummary (MemSummary, ARRAY_SIZE (MemSummary)); + SystemText = (SystemName[0] != L'\0') ? SystemName : GetPlatformName (); - Status = ModernUiDrawText (Context, X, Y + 188, L"Provided by", Theme->MutedText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + // + // System. + // + ModernUiDrawText (Context, X, Y, L"SYSTEM", Theme->AccentYellow, Theme->BackgroundBlack); + ModernUiDrawTextFit (Context, X, Y + 24, ValueWidth, SystemText, Theme->TelemetryText, Theme->BackgroundBlack); - Status = ModernUiDrawText (Context, X, Y + 208, L"UEFI memory map", Theme->TelemetryText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X + 12, Y + 56, SeparatorWidth, 1 }, Theme->Border); - Status = ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X + 12, Y + 242, SeparatorWidth, 1 }, Theme->Border); - if (EFI_ERROR (Status)) { - return Status; + // + // Processor: architecture (always real) plus the SMBIOS model when present. + // + ModernUiDrawText (Context, X, Y + 78, L"PROCESSOR", Theme->AccentYellow, Theme->BackgroundBlack); + ModernUiDrawText (Context, X, Y + 102, GetArchitectureName (), Theme->TelemetryText, Theme->BackgroundBlack); + if (CpuModel[0] != L'\0') { + ModernUiDrawTextFit (Context, X, Y + 124, ValueWidth, CpuModel, Theme->MutedText, Theme->BackgroundBlack); } - Status = ModernUiDrawText (Context, X, Y + 264, L"Voltage", Theme->AccentYellow, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X + 12, Y + 156, SeparatorWidth, 1 }, Theme->Border); - Status = ModernUiDrawText (Context, X, Y + 294, L"Sensor provider", Theme->MutedText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + // + // Memory: real type/speed from SMBIOS Type 17, else the UEFI memory-map note. + // + ModernUiDrawText (Context, X, Y + 178, L"MEMORY", Theme->AccentYellow, Theme->BackgroundBlack); + ModernUiDrawTextFit ( + Context, + X, + Y + 202, + ValueWidth, + (MemSummary[0] != L'\0') ? MemSummary : L"UEFI memory map", + Theme->TelemetryText, + Theme->BackgroundBlack + ); + + ModernUiFillRect (Context, (MODERN_UI_RECT){ Rect.X + 12, Y + 234, SeparatorWidth, 1 }, Theme->Border); - Status = ModernUiDrawText (Context, X, Y + 314, L"N/A", Theme->TelemetryText, Theme->BackgroundBlack); - if (EFI_ERROR (Status)) { - return Status; - } + // + // Sensors: honest placeholder. SMBIOS carries no live readings; a physical + // platform can populate this from a hardware-monitor / IPMI source later. + // + ModernUiDrawText (Context, X, Y + 256, L"SENSORS", Theme->AccentYellow, Theme->BackgroundBlack); + ModernUiDrawText (Context, X, Y + 280, L"N/A", Theme->MutedText, Theme->BackgroundBlack); return EFI_SUCCESS; } diff --git a/Library/ModernUiEngineLib/ModernUiEngineLib.inf b/Library/ModernUiEngineLib/ModernUiEngineLib.inf index 23ea951..c60d23d 100644 --- a/Library/ModernUiEngineLib/ModernUiEngineLib.inf +++ b/Library/ModernUiEngineLib/ModernUiEngineLib.inf @@ -26,6 +26,7 @@ [LibraryClasses] BaseLib BaseMemoryLib + ModernUiPlatformTablesLib ModernUiRendererLib ModernUiThemeLib PrintLib diff --git a/Library/ModernUiRendererLib/ModernUiGlyphs.c b/Library/ModernUiRendererLib/ModernUiGlyphs.c index 9b4bc99..5a5a379 100644 --- a/Library/ModernUiRendererLib/ModernUiGlyphs.c +++ b/Library/ModernUiRendererLib/ModernUiGlyphs.c @@ -200,6 +200,64 @@ STATIC CONST MODERN_UI_BUILTIN_GLYPH mModernUiBuiltinGlyphs[] = { { 0xFF0C, 18, 18, 18, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 230, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 246, 255, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 209, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 241, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 174, 206, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 199, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // , { 0xFF1A, 18, 18, 18, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 230, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 255, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 119, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 230, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 123, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // : { 0xFF1B, 18, 18, 18, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 230, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 255, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 119, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 91, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 240, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 245, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 230, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ; + { 0x0410, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 255, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 250, 212, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 191, 127, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 119, 54, 255, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 255, 47, 2, 235, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 231, 1, 0, 165, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 156, 0, 0, 91, 255, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 255, 128, 59, 59, 79, 255, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 255, 255, 255, 255, 255, 255, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 176, 0, 0, 0, 0, 114, 255, 32, 0, 0, 0, 0, 0, 0, 0, 0, 32, 255, 99, 0, 0, 0, 0, 38, 255, 114, 0, 0, 0, 0, 0, 0, 0, 0, 115, 254, 24, 0, 0, 0, 0, 0, 218, 198, 0, 0, 0, 0, 0, 0, 0, 0, 198, 201, 0, 0, 0, 0, 0, 0, 142, 254, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // А + { 0x0411, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 83, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 109, 55, 54, 33, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 245, 155, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 3, 26, 101, 246, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 129, 253, 14, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 98, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 169, 244, 2, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 114, 63, 67, 91, 173, 255, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 254, 232, 193, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Б + { 0x0412, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 251, 227, 171, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 114, 63, 72, 107, 217, 244, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 28, 254, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 231, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 33, 254, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 109, 55, 66, 107, 221, 212, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 250, 121, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 3, 26, 95, 236, 196, 2, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 90, 255, 63, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 56, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 136, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 114, 63, 67, 91, 167, 254, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 254, 231, 192, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // В + { 0x0414, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 255, 255, 255, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 255, 99, 83, 83, 145, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 244, 1, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 205, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 165, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 243, 124, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 255, 84, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 40, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 241, 1, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 178, 0, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 0, 33, 254, 86, 0, 0, 0, 0, 91, 255, 55, 0, 0, 0, 0, 0, 0, 0, 43, 186, 247, 88, 83, 83, 83, 83, 145, 255, 121, 52, 0, 0, 0, 0, 0, 0, 131, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159, 0, 0, 0, 0, 0, 0, 122, 255, 7, 0, 0, 0, 0, 0, 0, 0, 235, 148, 0, 0, 0, 0, 0, 0, 111, 255, 7, 0, 0, 0, 0, 0, 0, 0, 235, 136, 0, 0, 0, 0, 0, 0, 100, 255, 7, 0, 0, 0, 0, 0, 0, 0, 235, 124, 0, 0, 0, 0, 0, 0, 52, 147, 4, 0, 0, 0, 0, 0, 0, 0, 136, 66, 0, 0, 0, 0, 0 } }, // Д + { 0x0415, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 83, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Е + { 0x0416, 18, 18, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 233, 107, 0, 0, 0, 31, 255, 95, 0, 0, 0, 56, 212, 236, 0, 0, 0, 77, 186, 255, 72, 0, 0, 31, 255, 95, 0, 0, 16, 235, 213, 113, 0, 0, 0, 0, 1, 194, 209, 0, 0, 31, 255, 95, 0, 0, 133, 242, 20, 0, 0, 0, 0, 0, 0, 68, 255, 61, 0, 31, 255, 95, 0, 8, 236, 139, 0, 0, 0, 0, 0, 0, 0, 0, 213, 168, 0, 31, 255, 95, 0, 98, 252, 31, 0, 0, 0, 0, 0, 0, 0, 0, 105, 250, 81, 94, 255, 140, 71, 210, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 255, 255, 255, 255, 255, 255, 255, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 205, 1, 31, 255, 95, 0, 139, 238, 18, 0, 0, 0, 0, 0, 0, 0, 80, 255, 68, 0, 31, 255, 95, 0, 18, 239, 146, 0, 0, 0, 0, 0, 0, 6, 220, 186, 0, 0, 31, 255, 95, 0, 0, 119, 251, 41, 0, 0, 0, 0, 0, 117, 254, 50, 0, 0, 31, 255, 95, 0, 0, 9, 228, 182, 0, 0, 0, 0, 22, 241, 165, 0, 0, 0, 31, 255, 95, 0, 0, 0, 99, 255, 72, 0, 0, 0, 154, 250, 34, 0, 0, 0, 31, 255, 95, 0, 0, 0, 3, 213, 214, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Ж + { 0x0417, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 173, 222, 242, 205, 101, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 254, 199, 132, 114, 189, 255, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 93, 0, 0, 0, 0, 186, 240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 253, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 59, 84, 168, 237, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 255, 255, 255, 174, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 60, 188, 239, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 241, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 69, 0, 0, 0, 0, 62, 254, 123, 0, 0, 0, 0, 0, 0, 0, 0, 9, 196, 255, 180, 128, 106, 154, 247, 213, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 102, 177, 222, 244, 211, 131, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // З + { 0x0418, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 0, 49, 254, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 0, 191, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 79, 249, 193, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 5, 218, 152, 175, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 111, 249, 31, 187, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 17, 237, 142, 0, 200, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 143, 237, 17, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 55, 36, 250, 111, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 43, 168, 219, 5, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 72, 253, 80, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 183, 193, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 254, 52, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 163, 0, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // И + { 0x0419, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 0, 49, 254, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 0, 191, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 0, 79, 249, 193, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 5, 218, 152, 175, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 0, 111, 249, 31, 187, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 17, 237, 142, 0, 200, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 63, 0, 143, 237, 17, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 55, 36, 250, 111, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 43, 168, 219, 5, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 72, 253, 80, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 183, 193, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 254, 52, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 163, 0, 0, 0, 0, 0, 207, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Й + { 0x041A, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 111, 238, 147, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 74, 255, 177, 60, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 5, 220, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 104, 252, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 8, 228, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 120, 71, 141, 247, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 212, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 67, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 159, 243, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 18, 233, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 88, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 181, 234, 19, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 30, 243, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // К + { 0x041B, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 255, 255, 255, 255, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 255, 119, 83, 83, 140, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 16, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 226, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 181, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 137, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 255, 92, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 48, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 250, 7, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 203, 0, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 25, 250, 134, 0, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 104, 200, 252, 32, 0, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 231, 233, 102, 0, 0, 0, 0, 0, 83, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Л + { 0x041C, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 193, 0, 0, 0, 0, 0, 8, 242, 255, 19, 0, 0, 0, 0, 0, 0, 75, 253, 253, 25, 0, 0, 0, 0, 80, 253, 255, 19, 0, 0, 0, 0, 0, 0, 75, 243, 210, 108, 0, 0, 0, 0, 165, 198, 255, 19, 0, 0, 0, 0, 0, 0, 75, 254, 130, 193, 0, 0, 0, 7, 242, 129, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 59, 253, 25, 0, 0, 79, 232, 84, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 26, 218, 107, 0, 0, 164, 149, 94, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 131, 192, 0, 7, 241, 62, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 44, 253, 23, 76, 230, 2, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 0, 213, 101, 154, 145, 0, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 0, 126, 184, 231, 59, 0, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 0, 39, 255, 227, 1, 0, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 0, 0, 199, 138, 0, 0, 99, 255, 19, 0, 0, 0, 0, 0, 0, 75, 255, 31, 0, 0, 0, 0, 0, 0, 99, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // М + { 0x041D, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 135, 91, 91, 91, 91, 91, 240, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 231, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Н + { 0x041E, 18, 18, 14, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 159, 213, 240, 191, 117, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 238, 230, 147, 117, 174, 254, 190, 16, 0, 0, 0, 0, 0, 0, 0, 0, 11, 231, 210, 25, 0, 0, 0, 85, 252, 140, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, 64, 0, 0, 0, 0, 0, 169, 248, 27, 0, 0, 0, 0, 0, 0, 0, 187, 219, 0, 0, 0, 0, 0, 0, 68, 255, 86, 0, 0, 0, 0, 0, 0, 0, 224, 181, 0, 0, 0, 0, 0, 0, 31, 255, 123, 0, 0, 0, 0, 0, 0, 0, 250, 159, 0, 0, 0, 0, 0, 0, 8, 255, 150, 0, 0, 0, 0, 0, 0, 0, 222, 183, 0, 0, 0, 0, 0, 0, 32, 255, 121, 0, 0, 0, 0, 0, 0, 0, 185, 222, 0, 0, 0, 0, 0, 0, 71, 255, 84, 0, 0, 0, 0, 0, 0, 0, 116, 255, 68, 0, 0, 0, 0, 0, 173, 246, 24, 0, 0, 0, 0, 0, 0, 0, 9, 228, 212, 25, 0, 0, 0, 88, 253, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 236, 229, 144, 113, 171, 254, 185, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 157, 212, 240, 191, 115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // О + { 0x041F, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 89, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 7, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // П + { 0x0420, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 248, 222, 167, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 120, 71, 82, 115, 217, 246, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 20, 236, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 182, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 187, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 29, 243, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 117, 67, 78, 118, 226, 237, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 248, 219, 156, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Р + { 0x0421, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 144, 202, 241, 195, 120, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 226, 240, 158, 114, 157, 246, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 218, 220, 37, 0, 0, 0, 44, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 255, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 255, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 225, 216, 31, 0, 0, 0, 40, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 233, 235, 150, 110, 157, 242, 196, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 153, 209, 242, 196, 125, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // С + { 0x0422, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 255, 255, 255, 255, 255, 255, 255, 255, 163, 0, 0, 0, 0, 0, 0, 0, 0, 40, 83, 83, 83, 204, 234, 83, 83, 83, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Т + { 0x0423, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 236, 7, 0, 0, 0, 0, 19, 249, 140, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255, 92, 0, 0, 0, 0, 110, 255, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 197, 0, 0, 0, 0, 207, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 255, 46, 0, 0, 48, 255, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 237, 151, 0, 0, 145, 242, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 243, 13, 6, 236, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 252, 99, 76, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 196, 164, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 255, 247, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 247, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 232, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 129, 206, 246, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 252, 210, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // У + { 0x0424, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 203, 179, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 150, 236, 255, 255, 255, 255, 231, 132, 14, 0, 0, 0, 0, 0, 0, 0, 27, 235, 218, 86, 27, 192, 165, 31, 99, 230, 218, 12, 0, 0, 0, 0, 0, 0, 177, 234, 22, 0, 0, 191, 163, 0, 0, 41, 247, 146, 0, 0, 0, 0, 0, 0, 241, 143, 0, 0, 0, 191, 163, 0, 0, 0, 175, 212, 0, 0, 0, 0, 0, 20, 255, 110, 0, 0, 0, 191, 163, 0, 0, 0, 143, 247, 0, 0, 0, 0, 0, 0, 240, 144, 0, 0, 0, 191, 163, 0, 0, 0, 178, 209, 0, 0, 0, 0, 0, 0, 174, 236, 24, 0, 0, 191, 163, 0, 0, 46, 249, 142, 0, 0, 0, 0, 0, 0, 25, 234, 222, 91, 30, 193, 166, 36, 106, 235, 216, 11, 0, 0, 0, 0, 0, 0, 0, 23, 153, 242, 255, 255, 255, 255, 237, 135, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 205, 182, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Ф + { 0x0426, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 67, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 129, 83, 83, 83, 83, 129, 255, 137, 57, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 80, 0, 0, 0, 0, 0 } }, // Ц + { 0x0427, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 203, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 203, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 203, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 205, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 232, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 255, 62, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 222, 238, 130, 84, 78, 101, 247, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 150, 219, 247, 250, 232, 253, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Ч + { 0x0428, 18, 18, 17, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 59, 0, 0, 0, 143, 243, 0, 0, 0, 0, 211, 183, 0, 0, 0, 0, 75, 255, 124, 83, 83, 83, 180, 247, 83, 83, 83, 83, 226, 183, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Ш + { 0x042B, 18, 18, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 120, 71, 63, 35, 3, 0, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 255, 255, 255, 255, 226, 102, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 12, 49, 169, 255, 82, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 3, 229, 168, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 0, 203, 191, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 67, 0, 0, 0, 31, 246, 144, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 117, 67, 79, 119, 226, 234, 29, 0, 31, 255, 111, 0, 0, 0, 0, 0, 75, 255, 255, 255, 247, 218, 153, 34, 0, 0, 31, 255, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Ы + { 0x042F, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 183, 230, 253, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 253, 202, 105, 77, 71, 115, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 223, 8, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 175, 0, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 216, 2, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 255, 163, 41, 6, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 234, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 255, 116, 67, 112, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 225, 196, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 254, 53, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 247, 162, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 245, 28, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 128, 0, 0, 0, 0, 59, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // Я + { 0x0430, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 91, 179, 230, 231, 159, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 244, 149, 93, 129, 251, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 27, 0, 0, 0, 162, 251, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 132, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 123, 208, 247, 234, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 239, 178, 67, 9, 87, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 183, 0, 0, 0, 87, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 156, 0, 0, 0, 133, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 243, 110, 89, 176, 228, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 187, 243, 206, 119, 37, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // а + { 0x0431, 18, 18, 11, { 0, 0, 0, 0, 0, 24, 85, 145, 198, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 127, 249, 255, 243, 184, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 245, 134, 37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 224, 0, 0, 30, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 171, 96, 231, 255, 252, 167, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 233, 176, 56, 16, 94, 246, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 180, 2, 0, 0, 0, 137, 255, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 127, 0, 0, 0, 0, 70, 255, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 150, 0, 0, 0, 0, 59, 255, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 197, 0, 0, 0, 0, 97, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 255, 56, 0, 0, 3, 200, 223, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 189, 239, 122, 89, 182, 253, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 136, 210, 241, 194, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // б + { 0x0432, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 245, 210, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 45, 28, 44, 149, 255, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 17, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 18, 130, 245, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 45, 28, 44, 126, 253, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 0, 185, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 0, 188, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 42, 23, 37, 118, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 248, 219, 128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // в + { 0x0433, 18, 18, 9, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 91, 67, 67, 67, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // г + { 0x0434, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 255, 255, 255, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 216, 67, 67, 109, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 180, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 154, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 129, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 255, 96, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 255, 54, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 236, 6, 0, 0, 55, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 223, 179, 63, 63, 63, 105, 255, 126, 42, 0, 0, 0, 0, 0, 0, 0, 0, 163, 255, 255, 255, 255, 255, 255, 255, 255, 171, 0, 0, 0, 0, 0, 0, 0, 0, 155, 219, 0, 0, 0, 0, 0, 0, 211, 162, 0, 0, 0, 0, 0, 0, 0, 0, 144, 219, 0, 0, 0, 0, 0, 0, 211, 151, 0, 0, 0, 0, 0, 0, 0, 0, 132, 219, 0, 0, 0, 0, 0, 0, 211, 139, 0, 0, 0, 0, 0, 0, 0, 0, 33, 58, 0, 0, 0, 0, 0, 0, 56, 35, 0, 0, 0, 0, 0, 0, 0 } }, // д + { 0x0435, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 157, 227, 230, 169, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 225, 208, 92, 85, 198, 224, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 225, 13, 0, 0, 15, 240, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 133, 0, 0, 0, 0, 188, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 255, 255, 255, 255, 255, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 252, 138, 27, 27, 27, 27, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 253, 50, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 214, 240, 117, 72, 111, 213, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 144, 216, 244, 207, 122, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // е + { 0x0436, 18, 18, 14, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 221, 111, 0, 0, 63, 255, 39, 0, 0, 121, 226, 80, 0, 0, 0, 0, 0, 39, 173, 255, 66, 0, 63, 255, 39, 0, 78, 254, 163, 25, 0, 0, 0, 0, 0, 0, 0, 185, 182, 0, 63, 255, 39, 0, 199, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 253, 28, 63, 255, 39, 47, 255, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 242, 255, 255, 255, 255, 255, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 251, 82, 114, 255, 97, 99, 255, 58, 0, 0, 0, 0, 0, 0, 0, 0, 4, 216, 159, 0, 63, 255, 39, 0, 190, 196, 0, 0, 0, 0, 0, 0, 0, 0, 102, 252, 37, 0, 63, 255, 39, 0, 65, 255, 77, 0, 0, 0, 0, 0, 0, 10, 230, 163, 0, 0, 63, 255, 39, 0, 0, 196, 213, 3, 0, 0, 0, 0, 0, 122, 253, 41, 0, 0, 63, 255, 39, 0, 0, 70, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ж + { 0x0437, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 181, 228, 244, 200, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 189, 145, 85, 91, 181, 253, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 129, 241, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 255, 255, 255, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 28, 43, 121, 250, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 1, 210, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 243, 151, 82, 94, 184, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 190, 232, 244, 203, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // з + { 0x0438, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 0, 0, 155, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 0, 59, 253, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 5, 211, 168, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 120, 225, 79, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 14, 32, 245, 92, 83, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 7, 179, 192, 0, 90, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 253, 52, 250, 41, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 241, 184, 135, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 224, 10, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 77, 0, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // и + { 0x0439, 18, 18, 12, { 0, 0, 0, 48, 253, 58, 0, 106, 236, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 213, 236, 201, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 0, 0, 155, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 0, 59, 253, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 5, 211, 168, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 15, 0, 120, 225, 79, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 14, 32, 245, 92, 83, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 7, 179, 192, 0, 90, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 253, 52, 250, 41, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 241, 184, 135, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 224, 10, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 77, 0, 0, 0, 91, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // й + { 0x043A, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 63, 204, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 9, 230, 204, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 109, 238, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 3, 222, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 91, 69, 231, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 104, 252, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 4, 216, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 81, 255, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 197, 222, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // к + { 0x043B, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 255, 255, 255, 255, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 255, 74, 67, 79, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 239, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 211, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 182, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 153, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 124, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 254, 77, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 197, 241, 15, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 230, 84, 0, 0, 0, 15, 255, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // л + { 0x043C, 18, 18, 13, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 136, 0, 0, 0, 0, 132, 255, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 253, 232, 4, 0, 0, 2, 226, 253, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 213, 236, 79, 0, 0, 70, 235, 214, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 222, 153, 178, 0, 0, 166, 149, 224, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 232, 61, 252, 25, 15, 247, 57, 235, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 242, 0, 218, 109, 93, 216, 0, 242, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 243, 0, 120, 194, 176, 118, 0, 243, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 243, 0, 25, 249, 246, 25, 0, 243, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 243, 0, 0, 177, 180, 0, 0, 243, 119, 0, 0, 0, 0, 0, 0, 0, 0, 111, 243, 0, 0, 0, 0, 0, 0, 243, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // м + { 0x043D, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 255, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 115, 95, 95, 95, 165, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 111, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // н + { 0x043E, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 151, 221, 235, 179, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 221, 236, 120, 104, 204, 247, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 253, 46, 0, 0, 10, 215, 207, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 180, 0, 0, 0, 0, 107, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 11, 254, 136, 0, 0, 0, 0, 62, 255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 13, 255, 135, 0, 0, 0, 0, 60, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 176, 0, 0, 0, 0, 102, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 251, 39, 0, 0, 7, 210, 212, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 224, 231, 111, 94, 197, 248, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 154, 223, 236, 182, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // о + { 0x043F, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 255, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 91, 67, 67, 67, 182, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 155, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // п + { 0x0440, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 226, 22, 152, 226, 224, 152, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 253, 235, 167, 97, 144, 253, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 96, 0, 0, 0, 128, 255, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 36, 255, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 6, 255, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 16, 255, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 60, 255, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 50, 0, 0, 1, 176, 244, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 241, 129, 92, 176, 255, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 77, 190, 241, 206, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // р + { 0x0441, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 139, 214, 240, 189, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 213, 246, 135, 96, 172, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 255, 64, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 254, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 253, 49, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 229, 239, 121, 88, 156, 229, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 157, 222, 239, 190, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // с + { 0x0442, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 255, 255, 255, 255, 255, 255, 255, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 67, 147, 255, 91, 67, 67, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // т + { 0x0443, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 244, 10, 0, 0, 0, 15, 251, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 255, 86, 0, 0, 0, 88, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 174, 0, 0, 0, 166, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 248, 14, 0, 4, 239, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 253, 94, 0, 65, 255, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 181, 0, 141, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 249, 15, 211, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 239, 118, 255, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 245, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 84, 149, 254, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 243, 214, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // у + { 0x0444, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 196, 241, 181, 221, 204, 179, 241, 204, 77, 0, 0, 0, 0, 0, 0, 0, 37, 244, 211, 100, 139, 249, 246, 132, 99, 204, 251, 55, 0, 0, 0, 0, 0, 0, 159, 248, 25, 0, 0, 195, 171, 0, 0, 18, 245, 165, 0, 0, 0, 0, 0, 0, 231, 175, 0, 0, 0, 195, 171, 0, 0, 0, 181, 221, 0, 0, 0, 0, 0, 10, 255, 137, 0, 0, 0, 195, 171, 0, 0, 0, 153, 248, 0, 0, 0, 0, 0, 14, 255, 135, 0, 0, 0, 195, 171, 0, 0, 0, 160, 238, 0, 0, 0, 0, 0, 0, 240, 167, 0, 0, 0, 195, 171, 0, 0, 0, 195, 205, 0, 0, 0, 0, 0, 0, 180, 242, 16, 0, 0, 195, 171, 0, 0, 37, 253, 133, 0, 0, 0, 0, 0, 0, 61, 252, 202, 95, 130, 249, 242, 122, 99, 219, 237, 22, 0, 0, 0, 0, 0, 0, 0, 77, 205, 242, 181, 220, 209, 193, 242, 190, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ф + { 0x0445, 18, 18, 9, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 254, 114, 0, 0, 7, 227, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 239, 19, 0, 111, 250, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 243, 144, 8, 231, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 249, 144, 236, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 224, 255, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 249, 251, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 187, 131, 245, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 255, 55, 12, 231, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 217, 173, 0, 0, 96, 255, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 252, 40, 0, 0, 1, 201, 221, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // х + { 0x0446, 18, 18, 12, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 191, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 87, 63, 63, 63, 207, 216, 63, 8, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 255, 255, 255, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 255, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 67, 0, 0, 0, 0, 0, 0, 0 } }, // ц + { 0x0447, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 167, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 167, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 168, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 193, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 254, 103, 17, 12, 123, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 183, 255, 255, 255, 255, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 62, 62, 122, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ч + { 0x0448, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 78, 63, 63, 186, 225, 63, 63, 63, 231, 167, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ш + { 0x0449, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 19, 0, 0, 163, 215, 0, 0, 0, 223, 167, 0, 0, 0, 0, 0, 0, 111, 255, 78, 63, 63, 186, 225, 63, 63, 63, 231, 189, 63, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 56, 0, 0, 0 } }, // щ + { 0x044B, 18, 18, 14, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 77, 46, 18, 0, 0, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 190, 31, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 8, 60, 228, 192, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 125, 250, 6, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 140, 244, 2, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 84, 67, 118, 246, 162, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 250, 223, 140, 12, 0, 79, 255, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ы + { 0x044C, 18, 18, 10, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 77, 51, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 235, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 1, 27, 157, 254, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 17, 255, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 32, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 84, 61, 86, 201, 243, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 237, 188, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ь + { 0x044E, 18, 18, 15, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 17, 151, 224, 235, 176, 34, 0, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 8, 211, 232, 115, 108, 220, 240, 31, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 117, 253, 43, 0, 0, 26, 246, 164, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 190, 185, 0, 0, 0, 0, 167, 235, 0, 0, 0, 0, 0, 0, 111, 255, 255, 255, 255, 147, 0, 0, 0, 0, 131, 255, 17, 0, 0, 0, 0, 0, 111, 255, 119, 99, 231, 155, 0, 0, 0, 0, 139, 254, 9, 0, 0, 0, 0, 0, 111, 255, 31, 0, 173, 198, 0, 0, 0, 0, 180, 226, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 100, 255, 54, 0, 0, 34, 251, 147, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 3, 202, 234, 111, 102, 222, 235, 24, 0, 0, 0, 0, 0, 0, 111, 255, 31, 0, 0, 12, 148, 224, 236, 175, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ю + { 0x044F, 18, 18, 11, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 208, 244, 255, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 176, 73, 52, 125, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 242, 4, 0, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 242, 4, 0, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 254, 168, 51, 28, 109, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 223, 255, 255, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 240, 149, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 228, 14, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 80, 0, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 241, 172, 0, 0, 0, 91, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // я + { 0x0451, 18, 18, 10, { 0, 0, 0, 106, 177, 2, 2, 176, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 214, 6, 5, 213, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 157, 227, 230, 169, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 225, 208, 92, 85, 198, 224, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 225, 13, 0, 0, 15, 240, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 133, 0, 0, 0, 0, 188, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 255, 255, 255, 255, 255, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 252, 138, 27, 27, 27, 27, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 253, 50, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 214, 240, 117, 72, 111, 213, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 144, 216, 244, 207, 122, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // ё + { 0x2014, 18, 18, 16, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 4, 0, 0, 0, 55, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // — + { 0x4FC4, 18, 18, 18, { 0, 0, 0, 30, 130, 5, 0, 0, 0, 32, 6, 120, 59, 0, 4, 0, 0, 0, 0, 0, 0, 128, 209, 0, 13, 83, 175, 252, 144, 209, 107, 125, 147, 0, 0, 0, 0, 0, 2, 224, 169, 190, 250, 255, 206, 73, 3, 202, 112, 29, 242, 45, 0, 0, 0, 0, 70, 251, 53, 111, 49, 166, 143, 0, 0, 196, 116, 0, 142, 167, 0, 0, 0, 0, 176, 206, 0, 0, 0, 163, 143, 0, 0, 189, 121, 0, 33, 137, 0, 0, 0, 59, 255, 203, 14, 31, 31, 175, 157, 31, 31, 192, 142, 31, 31, 31, 0, 0, 6, 207, 246, 203, 119, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 3, 0, 129, 238, 132, 203, 0, 0, 0, 163, 143, 0, 0, 157, 156, 0, 4, 0, 0, 0, 84, 95, 107, 203, 0, 0, 0, 163, 143, 0, 0, 136, 174, 0, 184, 125, 0, 0, 1, 0, 107, 203, 0, 0, 0, 163, 163, 97, 151, 114, 197, 50, 253, 39, 0, 0, 0, 0, 107, 203, 9, 69, 138, 231, 255, 236, 154, 86, 227, 171, 175, 0, 0, 0, 0, 0, 107, 203, 123, 255, 217, 223, 162, 3, 0, 49, 254, 244, 35, 0, 0, 0, 0, 0, 107, 203, 26, 38, 0, 163, 143, 0, 0, 31, 255, 126, 0, 15, 0, 0, 0, 0, 107, 203, 0, 0, 0, 163, 143, 0, 9, 199, 255, 110, 0, 151, 71, 0, 0, 0, 107, 203, 0, 0, 0, 163, 143, 19, 191, 205, 157, 193, 0, 174, 73, 0, 0, 0, 107, 203, 0, 42, 45, 195, 137, 184, 196, 15, 38, 250, 114, 228, 31, 0, 0, 0, 107, 203, 0, 170, 249, 219, 58, 27, 11, 0, 0, 102, 238, 165, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // 俄 }; /** diff --git a/Library/ModernUiStringLib/ModernUiStringLib.c b/Library/ModernUiStringLib/ModernUiStringLib.c index d0701c7..40b4fdc 100644 --- a/Library/ModernUiStringLib/ModernUiStringLib.c +++ b/Library/ModernUiStringLib/ModernUiStringLib.c @@ -153,7 +153,10 @@ STATIC CONST CHAR16 *mEnglishStrings[ModernUiStringMax] = { L"Preferences saved: %r", L"Preference defaults loaded; save to persist.", L"System Information", - L"Platform, firmware and memory specifications" + L"Platform, firmware and memory specifications", + L"Quick Settings", + L"High-churn settings exposed by this platform", + L"Russian" }; STATIC CONST CHAR16 *mSimplifiedChineseStrings[ModernUiStringMax] = { @@ -287,7 +290,147 @@ STATIC CONST CHAR16 *mSimplifiedChineseStrings[ModernUiStringMax] = { L"偏好保存结果:%r", L"已载入默认偏好;保存后持久化。", L"系统规格", - L"平台、固件与内存规格" + L"平台、固件与内存规格", + L"平台设置", + L"本平台可见的设置项", + L"俄语" +}; + +STATIC CONST CHAR16 *mRussianStrings[ModernUiStringMax] = { + L"СОВРЕМЕННАЯ УТИЛИТА UEFI BIOS", + L"РАСШИРЕННЫЙ РЕЖИМ", + L"Категории настройки", + L"Выберите категорию настройки", + L"Загрузка", + L"Сводка Boot#### (только чтение)", + L"Устройства", + L"Дескрипторы, видимые прошивке", + L"Безопасность", + L"Состояние Secure Boot", + L"Прошивка", + L"Состояние обновления и восстановления", + L"Состояние", + L"Провайдеры, таблицы и инициализация", + L"Управление", + L"Удалённое и серверное управление", + L"Питание / Тепло", + L"Провайдеры питания и охлаждения", + L"Производительность", + L"Настройка ЦП и памяти", + L"Активы", + L"Инвентаризация платформы (чтение)", + L"Параметры", + L"Параметры интерфейса ModernSetupApp", + L"HII", + L"Мост VFR DriverSample", + L"Выход", + L"Выйти из настройки или сбросить", + L"Влево/Вправо: вкладка Вниз/Ввод: страница Esc: загрузка", + L"Вверх/Вниз: выбор Влево/Esc: вкладки Ввод: действие Tab: фокус", + L"Поставщик прошивки", + L"Версия прошивки", + L"Форм-фактор", + L"Режим загрузки", + L"Дисплей", + L"Параметры загрузки", + L"Категория", + L"Путь устройства", + L"%u записей", + L"Статус прототипа", + L"Рендеринг GOP активен. Навигация с клавиатуры включена.", + L"Выберите запись Boot#### и нажмите Ввод для запуска. Штатный менеджер загрузки доступен при выходе.", + L"Параметры загрузки не найдены.", + L"(нет описания)", + L"Активно", + L"Неактивно", + L"Не удалось перечислить дескрипторы.", + L"%u дескрипторов видны DXE", + L"Secure Boot", + L"Включено", + L"Отключено", + L"Доступно", + L"Н/Д", + L"Присутствует", + L"Отсутствует", + L"Неизвестно", + L"Обновление прошивки", + L"Среда Capsule", + L"Протокол Capsule", + L"Отчёт Capsule", + L"Диагностика / Журналы", + L"Таблицы ACPI", + L"Таблицы SMBIOS", + L"Карта памяти", + L"Дескрипторы DXE", + L"Таблицы конфигурации", + L"Управление", + L"IPMI", + L"Redfish", + L"Интерфейс управления", + L"Питание / Тепло", + L"Таблицы ACPI", + L"Протокол ACPI SDT", + L"Тепловое состояние корпуса", + L"Блок питания", + L"Производительность / Настройка", + L"Инвентаризация процессора", + L"Инвентаризация памяти", + L"Протокол CPU I/O", + L"Запись политики виртуализации", + L"Запись политики RAS", + L"TCG2", + L"TrEE", + L"Управление ключами в v1 только для чтения.", + L"Действия загрузки, системы и выбор языка.", + L"Продолжить загрузку", + L"Открыть штатные средства загрузки", + L"Сброс системы...", + L"Язык: %s", + L"Язык", + L"Китайский", + L"Английский", + L"Язык изменён: %s", + L"Наборы форм HII DriverSample не найдены.", + L"Наборы форм DriverSample", + L"Формы", + L"Вопросы", + L"Не поддерживается в мосте HII v1", + L"Только чтение", + L"Ввод открывает форму или изменяет поддерживаемое значение.", + L"RouteConfig вернул: %r", + L"Параметр загрузки вернул: %r", + L"Штатный менеджер загрузки вернул: %r", + L"ModernSetupApp: сбой инициализации графики: %r\n", + L"Загрузка и устройства", + L"Состояние платформы", + L"Питание и производительность", + L"Прошивка", + L"Диагностика", + L"Управление", + L"Питание", + L"Производительность", + L"Категории настройки", + L"Открыть / Ввод", + L"Вверх/Вниз — выбор, Ввод — переключение параметров приложения.", + L"Тема", + L"Система", + L"Тёмная", + L"Красная", + L"Плотность панели", + L"Просторно", + L"Компактно", + L"Запоминать страницу", + L"Показывать подсказки", + L"Подтвердить сброс", + L"Сохранить параметры", + L"Загрузить по умолчанию", + L"Параметры сохранены: %r", + L"Загружены значения по умолчанию; сохраните для применения.", + L"Сведения о системе", + L"Платформа, прошивка и память", + L"Быстрые настройки", + L"Часто изменяемые настройки платформы", + L"Русский" }; /** @@ -308,6 +451,24 @@ UseSimplifiedChinese ( return (BOOLEAN)((Language[0] == 'z') && (Language[1] == 'h')); } +/** + Return TRUE when the active language should use Russian strings. + + @retval TRUE Active language starts with "ru". + @retval FALSE Another language's strings should be used. +**/ +STATIC +BOOLEAN +UseRussian ( + VOID + ) +{ + CONST CHAR8 *Language; + + Language = ModernUiGetLanguage (); + return (BOOLEAN)((Language[0] == 'r') && (Language[1] == 'u')); +} + /** Normalize a caller-provided language tag into a supported ModernSetup tag. @@ -340,6 +501,11 @@ NormalizeLanguage ( return EFI_SUCCESS; } + if ((Language[0] == 'r') && (Language[1] == 'u')) { + *Normalized = "ru-RU"; + return EFI_SUCCESS; + } + return EFI_INVALID_PARAMETER; } @@ -441,6 +607,10 @@ ModernUiGetString ( return L""; } + if (UseRussian () && (mRussianStrings[Id] != NULL)) { + return mRussianStrings[Id]; + } + if (UseSimplifiedChinese () && (mSimplifiedChineseStrings[Id] != NULL)) { return mSimplifiedChineseStrings[Id]; } diff --git a/Scripts/build-armvirt.sh b/Scripts/build-armvirt.sh index c92f699..5dc9609 100755 --- a/Scripts/build-armvirt.sh +++ b/Scripts/build-armvirt.sh @@ -99,13 +99,13 @@ renderer_inf = ( else "ModernSetupPkg/Library/ModernUiRendererLib/ModernUiRendererLib.inf" ) library_block = ( + " ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf\n" " ModernUiEngineLib|ModernSetupPkg/Library/ModernUiEngineLib/ModernUiEngineLib.inf\n" f" ModernUiRendererLib|{renderer_inf}\n" " ModernUiThemeLib|ModernSetupPkg/Library/ModernUiThemeLib/ModernUiThemeLib.inf\n" " ModernUiStringLib|ModernSetupPkg/Library/ModernUiStringLib/ModernUiStringLib.inf\n" ) -app_library_block = """ ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf - ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf +app_library_block = """ ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf ModernUiBootDataLib|ModernSetupPkg/Library/ModernUiBootDataLib/ModernUiBootDataLib.inf ModernUiDeviceDataLib|ModernSetupPkg/Library/ModernUiDeviceDataLib/ModernUiDeviceDataLib.inf ModernUiSecurityDataLib|ModernSetupPkg/Library/ModernUiSecurityDataLib/ModernUiSecurityDataLib.inf diff --git a/Scripts/build-loongarchvirt.sh b/Scripts/build-loongarchvirt.sh index ffda37d..5f5919d 100755 --- a/Scripts/build-loongarchvirt.sh +++ b/Scripts/build-loongarchvirt.sh @@ -146,13 +146,13 @@ renderer_inf = ( else "ModernSetupPkg/Library/ModernUiRendererLib/ModernUiRendererLib.inf" ) library_block = ( + " ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf\n" " ModernUiEngineLib|ModernSetupPkg/Library/ModernUiEngineLib/ModernUiEngineLib.inf\n" f" ModernUiRendererLib|{renderer_inf}\n" " ModernUiThemeLib|ModernSetupPkg/Library/ModernUiThemeLib/ModernUiThemeLib.inf\n" " ModernUiStringLib|ModernSetupPkg/Library/ModernUiStringLib/ModernUiStringLib.inf\n" ) -app_library_block = """ ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf - ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf +app_library_block = """ ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf ModernUiBootDataLib|ModernSetupPkg/Library/ModernUiBootDataLib/ModernUiBootDataLib.inf ModernUiDeviceDataLib|ModernSetupPkg/Library/ModernUiDeviceDataLib/ModernUiDeviceDataLib.inf ModernUiSecurityDataLib|ModernSetupPkg/Library/ModernUiSecurityDataLib/ModernUiSecurityDataLib.inf diff --git a/Scripts/build-ovmf-x64.sh b/Scripts/build-ovmf-x64.sh index 1f91e91..23dc184 100755 --- a/Scripts/build-ovmf-x64.sh +++ b/Scripts/build-ovmf-x64.sh @@ -158,13 +158,13 @@ renderer_inf = ( else "ModernSetupPkg/Library/ModernUiRendererLib/ModernUiRendererLib.inf" ) library_block = ( + " ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf\n" " ModernUiEngineLib|ModernSetupPkg/Library/ModernUiEngineLib/ModernUiEngineLib.inf\n" f" ModernUiRendererLib|{renderer_inf}\n" " ModernUiThemeLib|ModernSetupPkg/Library/ModernUiThemeLib/ModernUiThemeLib.inf\n" " ModernUiStringLib|ModernSetupPkg/Library/ModernUiStringLib/ModernUiStringLib.inf\n" ) -app_library_block = """ ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf - ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf +app_library_block = """ ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf ModernUiBootDataLib|ModernSetupPkg/Library/ModernUiBootDataLib/ModernUiBootDataLib.inf ModernUiDeviceDataLib|ModernSetupPkg/Library/ModernUiDeviceDataLib/ModernUiDeviceDataLib.inf ModernUiSecurityDataLib|ModernSetupPkg/Library/ModernUiSecurityDataLib/ModernUiSecurityDataLib.inf diff --git a/Scripts/build-riscvvirt.sh b/Scripts/build-riscvvirt.sh index 41fc853..9e4e1a3 100755 --- a/Scripts/build-riscvvirt.sh +++ b/Scripts/build-riscvvirt.sh @@ -104,13 +104,13 @@ renderer_inf = ( else "ModernSetupPkg/Library/ModernUiRendererLib/ModernUiRendererLib.inf" ) library_block = ( + " ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf\n" " ModernUiEngineLib|ModernSetupPkg/Library/ModernUiEngineLib/ModernUiEngineLib.inf\n" f" ModernUiRendererLib|{renderer_inf}\n" " ModernUiThemeLib|ModernSetupPkg/Library/ModernUiThemeLib/ModernUiThemeLib.inf\n" " ModernUiStringLib|ModernSetupPkg/Library/ModernUiStringLib/ModernUiStringLib.inf\n" ) -app_library_block = """ ModernUiPlatformTablesLib|ModernSetupPkg/Library/ModernUiPlatformTablesLib/ModernUiPlatformTablesLib.inf - ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf +app_library_block = """ ModernUiPlatformDataLib|ModernSetupPkg/Library/ModernUiPlatformDataLib/ModernUiPlatformDataLib.inf ModernUiBootDataLib|ModernSetupPkg/Library/ModernUiBootDataLib/ModernUiBootDataLib.inf ModernUiDeviceDataLib|ModernSetupPkg/Library/ModernUiDeviceDataLib/ModernUiDeviceDataLib.inf ModernUiSecurityDataLib|ModernSetupPkg/Library/ModernUiSecurityDataLib/ModernUiSecurityDataLib.inf diff --git a/Tests/Smoke/smoke_validate.py b/Tests/Smoke/smoke_validate.py index a6744a3..0a712b3 100755 --- a/Tests/Smoke/smoke_validate.py +++ b/Tests/Smoke/smoke_validate.py @@ -100,6 +100,7 @@ "DrawManagement", "DrawPower", "DrawPerformance", + "DrawQuickSettings", "DrawServerInventorySummary", "DrawPreferences", "DrawExit",