From 9bae4dc29106e53dc36c0cbb11b9f670eda4fa79 Mon Sep 17 00:00:00 2001 From: Struan Clark Date: Mon, 14 Aug 2023 21:13:54 -0600 Subject: [PATCH] feat: Eurocorp menu theme --- .../xtreme_app_scene_interface_mainmenu.c | 10 +- applications/services/gui/canvas.c | 13 ++ applications/services/gui/canvas.h | 3 + applications/services/gui/modules/menu.c | 37 ++++ lib/u8g2/u8g2.h | 1 + lib/u8g2/u8g2_fonts.c | 170 +++++++++++++----- lib/xtreme/xtreme.h | 1 + 7 files changed, 181 insertions(+), 54 deletions(-) diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c index e6c87b497..acded418c 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_mainmenu.c @@ -14,14 +14,8 @@ void xtreme_app_scene_interface_mainmenu_var_item_list_callback(void* context, u view_dispatcher_send_custom_event(app->view_dispatcher, index); } -const char* const menu_style_names[MenuStyleCount] = { - "List", - "Wii", - "DSi", - "PS4", - "Vertical", - "C64", -}; +const char* const menu_style_names[MenuStyleCount] = + {"List", "Wii", "DSi", "PS4", "Vertical", "C64", "Eurocorp"}; static void xtreme_app_scene_interface_mainmenu_menu_style_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index 4310c6c75..7592a263d 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -15,6 +15,10 @@ const CanvasFontParameters canvas_font_params[FontTotalNumber] = { [FontKeyboard] = {.leading_default = 11, .leading_min = 9, .height = 7, .descender = 2}, [FontBigNumbers] = {.leading_default = 18, .leading_min = 16, .height = 15, .descender = 0}, [FontBatteryPercent] = {.leading_default = 11, .leading_min = 9, .height = 6, .descender = 0}, + [FontScummRomanOutline] = + {.leading_default = 12, .leading_min = 11, .height = 12, .descender = 2}, + [FontScummRoman] = {.leading_default = 12, .leading_min = 11, .height = 10, .descender = 2}, + [FontEurocorp] = {.leading_default = 12, .leading_min = 11, .height = 18, .descender = 2}, }; Canvas* canvas_init() { @@ -161,6 +165,15 @@ void canvas_set_font(Canvas* canvas, Font font) { case FontBatteryPercent: u8g2_SetFont(&canvas->fb, u8g2_font_5x7_tf); //u8g2_font_micro_tr); break; + case FontScummRomanOutline: + u8g2_SetFont(&canvas->fb, u8g2_font_lucasarts_scumm_subtitle_o_tr); + break; + case FontScummRoman: + u8g2_SetFont(&canvas->fb, u8g2_font_lucasarts_scumm_subtitle_r_tr); + break; + case FontEurocorp: + u8g2_SetFont(&canvas->fb, u8g2_font_eurocorp_tr); + break; default: furi_crash(NULL); break; diff --git a/applications/services/gui/canvas.h b/applications/services/gui/canvas.h index 7a2ae1873..f6f5ebe1e 100644 --- a/applications/services/gui/canvas.h +++ b/applications/services/gui/canvas.h @@ -27,6 +27,9 @@ typedef enum { FontKeyboard, FontBigNumbers, FontBatteryPercent, + FontScummRomanOutline, + FontScummRoman, + FontEurocorp, // Keep last for fonts number calculation FontTotalNumber, diff --git a/applications/services/gui/modules/menu.c b/applications/services/gui/modules/menu.c index a0eaac926..775f4566d 100644 --- a/applications/services/gui/modules/menu.c +++ b/applications/services/gui/modules/menu.c @@ -52,6 +52,15 @@ static void menu_short_name(MenuItem* item, FuriString* name) { } } +static void menu_string_to_upper_case(FuriString* str) { + for(size_t i = 0; i < furi_string_size(str); i++) { + char c = furi_string_get_char(str, i); + if(c >= 'a' && c <= 'z') { + furi_string_set_char(str, i, c - 'a' + 'A'); + } + } +} + static void menu_centered_icon( Canvas* canvas, MenuItem* item, @@ -321,6 +330,32 @@ static void menu_draw_callback(Canvas* canvas, void* _model) { break; } + case MenuStyleEurocorp: { + for(uint8_t i = 0; i < 3; i++) { + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontEurocorp); + shift_position = (position + items_count + i - 1) % items_count; + item = MenuItemArray_get(model->items, shift_position); + menu_short_name(item, name); + menu_string_to_upper_case(name); + size_t scroll_counter = menu_scroll_counter(model, i == 1); + if(i == 1) { + canvas_draw_box(canvas, 0, 22, 128, 22); + canvas_set_color(canvas, ColorWhite); + // Clip corner + for(uint8_t i = 0; i < 6; i++) { + for(uint8_t j = 0; j < 6; j++) { + if(j - i >= 0) { + canvas_draw_dot(canvas, 128 - i, 22 + j - i); + } + } + } + } + elements_scrollable_text_line( + canvas, 2, 19 + 22 * i, 128 - 3, name, scroll_counter, false); + } + break; + } default: break; } @@ -545,6 +580,7 @@ static void menu_process_up(Menu* menu) { switch(XTREME_SETTINGS()->menu_style) { case MenuStyleList: + case MenuStyleEurocorp: if(position > 0) { position--; if(vertical_offset && vertical_offset == position) { @@ -592,6 +628,7 @@ static void menu_process_down(Menu* menu) { switch(XTREME_SETTINGS()->menu_style) { case MenuStyleList: + case MenuStyleEurocorp: if(position < count - 1) { position++; if(vertical_offset < count - 8 && vertical_offset == position - 7) { diff --git a/lib/u8g2/u8g2.h b/lib/u8g2/u8g2.h index 0068ea61d..0d830390a 100644 --- a/lib/u8g2/u8g2.h +++ b/lib/u8g2/u8g2.h @@ -5813,6 +5813,7 @@ extern const uint8_t u8g2_font_px437wyse700b_tn[] U8G2_FONT_SECTION("u8g2_font_p extern const uint8_t u8g2_font_px437wyse700b_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mf"); extern const uint8_t u8g2_font_px437wyse700b_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mr"); extern const uint8_t u8g2_font_px437wyse700b_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mn"); +extern const uint8_t u8g2_font_eurocorp_tr[] U8G2_FONT_SECTION("u8g2_font_eurocorp_tr"); /* end font list */ diff --git a/lib/u8g2/u8g2_fonts.c b/lib/u8g2/u8g2_fonts.c index 57ca70f80..2b59537fc 100644 --- a/lib/u8g2/u8g2_fonts.c +++ b/lib/u8g2/u8g2_fonts.c @@ -40249,7 +40249,7 @@ const uint8_t u8g2_font_open_iconic_www_8x_t[2724] U8G2_FONT_SECTION( "\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -40319,7 +40319,7 @@ const uint8_t u8g2_font_profont10_tf[2005] U8G2_FONT_SECTION("u8g2_font_profont1 "\310\0\377\13DZW\243h\246\15\222\2\0\0\0\4\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -40354,7 +40354,7 @@ const uint8_t u8g2_font_profont10_tr[886] U8G2_FONT_SECTION("u8g2_font_profont10 "U\4~\7\24j\227T\2\177\5\0b\3\0\0\0\4\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -40367,7 +40367,7 @@ const uint8_t u8g2_font_profont10_tn[184] U8G2_FONT_SECTION("u8g2_font_profont10 "\71\12\64\262SQ\246\15\222\2:\6!\263\211\1\0\0\0\4\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 2 */ @@ -40452,7 +40452,7 @@ const uint8_t u8g2_font_profont10_mf[2486] U8G2_FONT_SECTION("u8g2_font_profont1 "\17\325\364&b\221D$\21\211\214\42\22\0\0\0\0\4\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 2 */ @@ -40492,7 +40492,7 @@ const uint8_t u8g2_font_profont10_mr[1045] U8G2_FONT_SECTION("u8g2_font_profont1 "\315\364II;\13\0\177\6\315\364\371\6\0\0\0\4\377\377\0"; /* Fontname: ProFont10 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 2 */ @@ -40506,7 +40506,7 @@ const uint8_t u8g2_font_profont10_mn[207] U8G2_FONT_SECTION("u8g2_font_profont10 "\305\364\321\234\220\243\0\0\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -40584,7 +40584,7 @@ const uint8_t u8g2_font_profont11_tf[2267] U8G2_FONT_SECTION("u8g2_font_profont1 "\207$\263\15J\30\2\377\14M\232\247\234\271%C\230,\0\0\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -40622,7 +40622,7 @@ const uint8_t u8g2_font_profont11_tr[967] U8G2_FONT_SECTION("u8g2_font_profont11 "\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -40636,7 +40636,7 @@ const uint8_t u8g2_font_profont11_tn[202] U8G2_FONT_SECTION("u8g2_font_profont11 "C\0\0\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 2 */ @@ -40732,7 +40732,7 @@ const uint8_t u8g2_font_profont11_mf[2845] U8G2_FONT_SECTION("u8g2_font_profont1 "\20\245)\0\377\21\336\370\341$G\262$K\262$\213\206\64\232\0\0\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 2 */ @@ -40777,7 +40777,7 @@ const uint8_t u8g2_font_profont11_mr[1203] U8G2_FONT_SECTION("u8g2_font_profont1 "\225\212\316\21\177\7\336\370\371\67\0\0\0\0\4\377\377\0"; /* Fontname: ProFont11 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 2 */ @@ -40792,7 +40792,7 @@ const uint8_t u8g2_font_profont11_mn[236] U8G2_FONT_SECTION("u8g2_font_profont11 "\216\211:\1\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -40872,7 +40872,7 @@ const uint8_t u8g2_font_profont12_tf[2315] U8G2_FONT_SECTION("u8g2_font_profont1 "&\13\0\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -40910,7 +40910,7 @@ const uint8_t u8g2_font_profont12_tr[980] U8G2_FONT_SECTION("u8g2_font_profont12 "\2~\6\25\262\307\5\177\5\0\242\3\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -40924,7 +40924,7 @@ const uint8_t u8g2_font_profont12_tn[208] U8G2_FONT_SECTION("u8g2_font_profont12 ":\10\62\323\61\204C\0\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 2 */ @@ -41023,7 +41023,7 @@ const uint8_t u8g2_font_profont12_mf[2928] U8G2_FONT_SECTION("u8g2_font_profont1 "\226dI\26\15i\64\1\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 2 */ @@ -41068,7 +41068,7 @@ const uint8_t u8g2_font_profont12_mr[1212] U8G2_FONT_SECTION("u8g2_font_profont1 "L\33C\0~\11\336\370\251JE\347\15\177\7\336\370\371\67\0\0\0\0\4\377\377\0"; /* Fontname: ProFont12 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 2 */ @@ -41083,7 +41083,7 @@ const uint8_t u8g2_font_profont12_mn[235] U8G2_FONT_SECTION("u8g2_font_profont12 "\22u\2\0\0\0\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -41173,7 +41173,7 @@ const uint8_t u8g2_font_profont15_tf[2650] U8G2_FONT_SECTION("u8g2_font_profont1 "\260\244U\0\377\16fl\237(\207C\217\311\240V\206\4\0\0\0\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -41215,7 +41215,7 @@ const uint8_t u8g2_font_profont15_tr[1093] U8G2_FONT_SECTION("u8g2_font_profont1 "\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -41229,7 +41229,7 @@ const uint8_t u8g2_font_profont15_tn[219] U8G2_FONT_SECTION("u8g2_font_profont15 "\0\71\14N\362C\11j\214TS(\0:\6:\363A&\0\0\0\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 2 */ @@ -41345,7 +41345,7 @@ const uint8_t u8g2_font_profont15_mf[3472] U8G2_FONT_SECTION("u8g2_font_profont1 "\302$\214\6\271\64D\0\0\0\0\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 2 */ @@ -41398,7 +41398,7 @@ const uint8_t u8g2_font_profont15_mr[1460] U8G2_FONT_SECTION("u8g2_font_profont1 "J\42\235\237\0\177\7\377\371\363\377\3\0\0\0\4\377\377\0"; /* Fontname: ProFont15 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 2 */ @@ -41414,7 +41414,7 @@ const uint8_t u8g2_font_profont15_mn[278] U8G2_FONT_SECTION("u8g2_font_profont15 "\245!g\2:\12\357\371\63\251:\253\235\15\0\0\0\4\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -41522,7 +41522,7 @@ const uint8_t u8g2_font_profont17_tf[3206] U8G2_FONT_SECTION("u8g2_font_profont1 "\0\4\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -41570,7 +41570,7 @@ const uint8_t u8g2_font_profont17_tr[1308] U8G2_FONT_SECTION("u8g2_font_profont1 "\251\351\64\222\1~\12\70Xsf\23\311l\2\177\5\0\10\63\0\0\0\4\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -41586,7 +41586,7 @@ const uint8_t u8g2_font_profont17_tn[273] U8G2_FONT_SECTION("u8g2_font_profont17 ":\11\203\214\31\7\361A\0\0\0\0\4\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 2 */ @@ -41730,7 +41730,7 @@ const uint8_t u8g2_font_profont17_mf[4356] U8G2_FONT_SECTION("u8g2_font_profont1 "\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 2 */ @@ -41794,7 +41794,7 @@ const uint8_t u8g2_font_profont17_mr[1807] U8G2_FONT_SECTION("u8g2_font_profont1 "\10\31'\77\376\33\0\0\0\0\4\377\377\0"; /* Fontname: ProFont17 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 2 */ @@ -41812,7 +41812,7 @@ const uint8_t u8g2_font_profont17_mn[346] U8G2_FONT_SECTION("u8g2_font_profont17 "\235\210M=\2:\15\11'\77&c\353!\307\326\243\0\0\0\0\4\377\377\0"; /* Fontname: ProFont22 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 0 */ @@ -41950,7 +41950,7 @@ const uint8_t u8g2_font_profont22_tf[4184] U8G2_FONT_SECTION("u8g2_font_profont2 "\42\17'\306\317\252$\16D\16\2\345FnL\0\0\0\0\4\377\377\0"; /* Fontname: ProFont22 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 0 */ @@ -42011,7 +42011,7 @@ const uint8_t u8g2_font_profont22_tr[1704] U8G2_FONT_SECTION("u8g2_font_profont2 "\0\0\0\4\377\377\0"; /* Fontname: ProFont22 - Copyright: ProFont Distribution 2.2 Ñ Generated by Fontographer 4.1.5 + Copyright: ProFont Distribution 2.2 � Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 0 */ @@ -42029,7 +42029,7 @@ const uint8_t u8g2_font_profont22_tn[345] U8G2_FONT_SECTION("u8g2_font_profont22 "\310\31#\0:\15\244\236$\11\12\266\20\42X\10Q!\6" + "\205 \23\242H\10\23!pa\42D\221\20dB\14\12!*D\260\200\0\77\26\16\12\312\242\206\305" + "\203\241\304\310\203\302\331\271\361`\305\316\16\0@#\16\12\312\242\206\305\203\20\301L\204X\21bE\210" + "\25!V\204X\21bE\210*\202\14)\21\224I\7A\27\16\12\306&X,Q\222\6\315!C\245" + "H\15\23\26\17\232\33\61B+\16\12\306\260\206\11\223\20\242\206\204\20\65$\204\250!!D\240\10!" + "B\205\10\25\42T\210#!\216\204\210$\42T\210h\221\0C\30\16\12\306\242\206\305\203a\350\216\322" + "/Z\240 \21\242\10\211\20d\0D\25\16\12\306\20\350\210\30\24C\332\335\337=\60\367 \4\23\0" + "E\34\16\12\306\302\342\301\203\240\264 \225\25\11RD\251h\201\202D\210\42$B\220\1F+\16\12" + "\306\62\2\5\211\26)\204\206\20\32Bh\10\21\205B\210(\24BD\241\20B\10\205\20\32Bh\10" + "\301BC\10%\12\0G\42\16\12\306\261\244\305\203\20\301L\204+\21TDP\21AE\4B\21\352" + "d\211p\17D\64a\263\0H%\17\12\312@ND\71\21\345D\224\23QND\71\21\236\264pQ" + "ND\71\21\345D\224\23QND\71\21\1I\13\4\12\236`b\376_\304\0J\25\16\12\306\204," + "\225\332\271-i\360\334\25\315\36\210`\2\0K\42\16\12\302@:()\22\244H\220\42A\212D\13" + "&k\24\21!D\244\14\231\42\204J\220JF\0L%\16\12\306@TDP\21AE\4\25\21T" + "DP\21AE\4\25\21TDP\21AE\4}\360`\5\23\0M\65\22\12\326 \206\222!U\220" + "\60qB\14\231\22b\310\224\20C\246\204\30\62%\304\220)!\206L\11\61dJ\210!SB\14\231" + "\22b\310\224\20C\35\31\64\24N'\16\12\306 \346\310\20\24$\232\205\60\26\302X\30b!\214\205" + "\60\26\302X\10c!\214\205\60\26\302X\10s\7\5O#\16\12\306\242\206\305\203\20\301L\204+\21" + "\256D\270\22\341J\204+\21\256d\211p\17\36\204`\243\4\0P\26\16\12\306\20\350\210\230\20&\206" + "\204Xw\317\36|A\224\246\0Q\25\16\12\306r(\204\211\60)\202\234\273w\17\36\204h;\7R" + "\33\16\12\306\20\350\210\230\20&\206\204X\206\356\356\36\30\134\26\13\12\272" + "@\216 \71\202\344\10\222#H\216\134\71\12\311\21$]\15\206\352\245\360` \21\372\237=\30^\13" + "\256(\313E\322\34*%\16_\12\216\250\311\360\301\12&\0`\15\356(\313P\302H\13\267\23\213\16" + "a\24\253\11\272\25r\340\270b\245\16\235I\222\342\301\331\22\5b\30\253\11\272\220$\211\212A#\6" + "\215\30ab\204VV\234\20\241\342\0c\20\253\11\272\202\344A*\203\363\360\201\211$\0d\21\253\11" + "\272\20\306\204\20\25\252\354\253\7)\222\0e\25\253\11\272\222\342A\302)\310\240\31Af\340\300\7&" + "\222\0f\25\253\11\272\222\342A\302)\310\214 \63\202\314\300)\5\16\4g\21\253\11\272\221\302\225\15" + "\7\35\62f\312\205\222\4h\16\253\11\272\60\312\256\36