diff options
Diffstat (limited to 'libvo')
41 files changed, 4 insertions, 17445 deletions
diff --git a/libvo/cocoa_common.m b/libvo/cocoa_common.m index 9a822cc4ea..6e2b439a77 100644 --- a/libvo/cocoa_common.m +++ b/libvo/cocoa_common.m @@ -376,13 +376,11 @@ int vo_cocoa_check_events(struct vo *vo) // Without SDL's bootstrap code (include SDL.h in mplayer.c), // on Leopard, we have trouble to get the play window automatically focused // when the app is actived. The Following code fix this problem. -#ifndef CONFIG_SDL if ([event type] == NSAppKitDefined && [event subtype] == NSApplicationActivatedEventType) { [s->window makeMainWindow]; [s->window makeKeyAndOrderFront:nil]; } -#endif return 0; } diff --git a/libvo/gl_common.c b/libvo/gl_common.c index 621bfa39a8..1c156277dc 100644 --- a/libvo/gl_common.c +++ b/libvo/gl_common.c @@ -2306,59 +2306,6 @@ static void swapGlBuffers_x11(MPGLContext *ctx) } #endif -#ifdef CONFIG_GL_SDL -#include "sdl_common.h" - -static int create_window_sdl(struct MPGLContext *ctx, uint32_t d_width, - uint32_t d_height, uint32_t flags) -{ - SDL_WM_SetCaption(vo_get_window_title(ctx->vo), NULL); - ctx->vo->dwidth = d_width; - ctx->vo->dheight = d_height; - return 0; -} - -static void swapGlBuffers_sdl(MPGLContext *ctx) -{ - SDL_GL_SwapBuffers(); -} - -static void *sdlgpa(const GLubyte *name) -{ - return SDL_GL_GetProcAddress(name); -} - -static int setGlWindow_sdl(MPGLContext *ctx) -{ - if (sdl_set_mode(0, SDL_OPENGL | SDL_RESIZABLE) < 0) - return SET_WINDOW_FAILED; - SDL_GL_LoadLibrary(NULL); - getFunctions(ctx->gl, sdlgpa, NULL, false); - return SET_WINDOW_OK; -} - -static void releaseGlContext_sdl(MPGLContext *ctx) -{ -} - -static int sdl_check_events(struct vo *vo) -{ - int res = 0; - SDL_Event event; - while (SDL_PollEvent(&event)) - res |= sdl_default_handle_event(&event); - // poll "events" from within MPlayer code - res |= sdl_default_handle_event(NULL); - if (res & VO_EVENT_RESIZE) - sdl_set_mode(0, SDL_OPENGL | SDL_RESIZABLE); - return res; -} - -static void new_sdl_update_xinerama_info(struct vo *vo) { sdl_update_xinerama_info(); } -static void new_vo_sdl_fullscreen(struct vo *vo) { vo_sdl_fullscreen(); } -static void new_vo_sdl_uninit(struct vo *vo) { vo_sdl_uninit(); } - -#endif struct backend { const char *name; @@ -2370,13 +2317,11 @@ static struct backend backends[] = { {"cocoa", GLTYPE_COCOA}, {"win", GLTYPE_W32}, {"x11", GLTYPE_X11}, - {"sdl", GLTYPE_SDL}, // mplayer-svn aliases (note that mplayer-svn couples these with the numeric // values of the internal GLTYPE_* constants) {"-1", GLTYPE_AUTO}, { "0", GLTYPE_W32}, { "1", GLTYPE_X11}, - { "2", GLTYPE_SDL}, {0} }; @@ -2400,10 +2345,7 @@ MPGLContext *init_mpglcontext(enum MPGLType type, struct vo *vo) ctx = init_mpglcontext(GLTYPE_W32, vo); if (ctx) return ctx; - ctx = init_mpglcontext(GLTYPE_X11, vo); - if (ctx) - return ctx; - return init_mpglcontext(GLTYPE_SDL, vo); + return init_mpglcontext(GLTYPE_X11, vo); } ctx = talloc_zero(NULL, MPGLContext); ctx->gl = talloc_zero(ctx, GL); @@ -2462,22 +2404,6 @@ MPGLContext *init_mpglcontext(enum MPGLType type, struct vo *vo) return ctx; break; #endif -#ifdef CONFIG_GL_SDL - case GLTYPE_SDL: - ctx->create_window = create_window_sdl; - ctx->setGlWindow = setGlWindow_sdl; - ctx->releaseGlContext = releaseGlContext_sdl; - ctx->swapGlBuffers = swapGlBuffers_sdl; - ctx->update_xinerama_info = new_sdl_update_xinerama_info; - ctx->check_events = sdl_check_events; - ctx->fullscreen = new_vo_sdl_fullscreen; - ctx->vo_uninit = new_vo_sdl_uninit; - //the SDL code is hardcoded to use the deprecated vo API - global_vo = vo; - if (vo_sdl_init()) - return ctx; - break; -#endif } talloc_free(ctx); return NULL; diff --git a/libvo/gl_common.h b/libvo/gl_common.h index f0e5912dd9..546127c91f 100644 --- a/libvo/gl_common.h +++ b/libvo/gl_common.h @@ -162,7 +162,6 @@ enum MPGLType { GLTYPE_COCOA, GLTYPE_W32, GLTYPE_X11, - GLTYPE_SDL, }; enum { diff --git a/libvo/gtf.c b/libvo/gtf.c deleted file mode 100644 index 6dd64a57c8..0000000000 --- a/libvo/gtf.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - * GTF calculations formulas are taken from GTF_V1R1.xls - * created by ANDY.MORRISH@NSC.COM - * - * copyright (C) 2002 Rudolf Marek <r.marek@assembler.cz> - * - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -//Version 0.4 -#include "config.h" -#include <stdio.h> -#include <stdlib.h> -#include <math.h> -#include "gtf.h" - -#undef GTF_DEBUG - -#ifdef GTF_DEBUG -#define DEBUG_PRINTF(a,b) printf(a,b); -#else -#define DEBUG_PRINTF(a,b) -#endif - -static GTF_constants GTF_given_constants = { 3.0,550.0,1,8,1.8,8,40,20,128,600 }; - -static void GetRoundedConstants(GTF_constants *c) - { - c->Vsync_need = round(GTF_given_constants.Vsync_need); - c->min_Vsync_BP = GTF_given_constants.min_Vsync_BP; - c->min_front_porch = round(GTF_given_constants.min_front_porch); - c->char_cell_granularity = GTF_given_constants.char_cell_granularity; - c->margin_width = GTF_given_constants.margin_width; - c->sync_width = GTF_given_constants.sync_width; - c->c = ((GTF_given_constants.c - GTF_given_constants.j)*(GTF_given_constants.k / 256)) + GTF_given_constants.j; - c->j = GTF_given_constants.j; - c->k = GTF_given_constants.k; - c->m = (GTF_given_constants.k / 256) * GTF_given_constants.m; - } - -void GTF_calcTimings(double X,double Y,double freq, int type, - int want_margins, int want_interlace,struct VesaCRTCInfoBlock *result ) -{ - GTF_constants c; - double RR, margin_top, margin_bottom, margin_left, margin_right; - double estimated_H_period,sync_plus_BP,BP,interlace,V_total_lines_field; - double estimated_V_field_rate,actual_H_period,actual_V_field_freq; - double total_active_pixels, ideal_duty_cycle, blanking_time, H_total_pixels; - double H_freq, pixel_freq,actual_V_frame_freq; - double H_sync_start, H_sync_end, H_back_porch, H_front_porch, H_sync_width; - double V_back_porch, V_front_porch, V_sync_start, V_sync_end,V_sync_width; - double ideal_H_period; - GetRoundedConstants(&c); - - - pixel_freq = RR = freq; - - /* DETERMINE IF 1/2 LINE INTERLACE IS PRESENT */ - - interlace = 0; - - if (want_interlace) { - RR = RR * 2; - Y=Y/2; - interlace = 0.5; - } - - result->Flags = 0; - - if ((Y==300)||(Y==200)||(Y==240)) - { - Y*=2; - result->Flags = VESA_CRTC_DOUBLESCAN; /* TODO: check if mode support */ - } - - /* DETERMINE NUMBER OF LINES IN V MARGIN */ - /* DETERMINE NUMBER OF PIXELS IN H MARGIN [pixels] */ - - margin_left = margin_right = 0; - margin_top = margin_bottom = 0; - - if (want_margins) { - margin_top = margin_bottom = (c.margin_width / 100) * Y; - margin_left = round(( X* c.margin_width/100)/c.char_cell_granularity) \ - * c.char_cell_granularity; - margin_right = margin_left; - DEBUG_PRINTF("margin_left_right : %f\n",margin_right) - DEBUG_PRINTF("margin_top_bottom : %f\n",margin_top) - } - - /* FIND TOTAL NUMBER OF ACTIVE PIXELS (IMAGE + MARGIN) [pixels] */ - - total_active_pixels = margin_left + margin_right + X; - DEBUG_PRINTF("total_active_pixels: %f\n",total_active_pixels) - - if (type == GTF_PF) - { - ideal_H_period = ((c.c-100)+(sqrt(((100-c.c)*(100-c.c) )+(0.4*c.m*(total_active_pixels + margin_left + margin_right) / freq))))/2/c.m*1000; - - DEBUG_PRINTF("ideal_H_period: %f\n",ideal_H_period) - - /* FIND IDEAL BLANKING DUTY CYCLE FROM FORMULA [%] */ - ideal_duty_cycle = c.c - (c.m * ideal_H_period /1000); - DEBUG_PRINTF("ideal_duty_cycle: %f\n",ideal_duty_cycle) - - /* FIND BLANKING TIME (TO NEAREST CHAR CELL) [pixels] */ - - blanking_time = round(total_active_pixels * ideal_duty_cycle \ - / (100-ideal_duty_cycle) / (2*c.char_cell_granularity)) \ - * (2*c.char_cell_granularity); - DEBUG_PRINTF("blanking_time : %f\n",blanking_time ) - - /* FIND TOTAL NUMBER OF PIXELS IN A LINE [pixels] */ - H_total_pixels = total_active_pixels + blanking_time ; - DEBUG_PRINTF("H_total_pixels: %f\n",H_total_pixels) - H_freq = freq / H_total_pixels * 1000; - DEBUG_PRINTF("H_freq: %f\n",H_freq) - actual_H_period = 1000 / H_freq; - DEBUG_PRINTF("actual_H_period: %f\n",actual_H_period) - sync_plus_BP = round(H_freq * c.min_Vsync_BP/1000); -// sync_plus_BP = round( freq / H_total_pixels * c.min_Vsync_BP); - - DEBUG_PRINTF("sync_plus_BP: %f\n",sync_plus_BP) - - } else if (type == GTF_VF) - { - - /* ESTIMATE HORIZ. PERIOD [us] */ - - estimated_H_period = (( 1/RR ) - c.min_Vsync_BP/1000000 ) / (Y + (2 * margin_top) + c.min_front_porch + interlace) * 1000000; - - DEBUG_PRINTF("estimated_H_period: %f\n",estimated_H_period) - - /* FIND NUMBER OF LINES IN (SYNC + BACK PORCH) [lines] */ - - sync_plus_BP = round( c.min_Vsync_BP / estimated_H_period ); - DEBUG_PRINTF("sync_plus_BP: %f\n",sync_plus_BP) - - } else if (type == GTF_HF) - { - sync_plus_BP = round(freq * c.min_Vsync_BP/1000); - DEBUG_PRINTF("sync_plus_BP: %f\n",sync_plus_BP) - } - - - - /* FIND TOTAL NUMBER OF LINES IN VERTICAL FIELD */ - - V_total_lines_field = sync_plus_BP+interlace+margin_bottom+margin_top+Y+c.min_front_porch; - DEBUG_PRINTF("V_total_lines_field : %f\n",V_total_lines_field ) - - if (type == GTF_VF) - { - /* ESTIMATE VERTICAL FIELD RATE [hz] */ - - estimated_V_field_rate = 1 / estimated_H_period / V_total_lines_field * 1000000; - DEBUG_PRINTF(" estimated_V_field_rate: %f\n", estimated_V_field_rate) - /* FIND ACTUAL HORIZONTAL PERIOD [us] */ - - actual_H_period = estimated_H_period / (RR / estimated_V_field_rate); - DEBUG_PRINTF("actual_H_period: %f\n",actual_H_period) - /* FIND ACTUAL VERTICAL FIELD FREQUENCY [Hz] */ - - actual_V_field_freq = 1 / actual_H_period / V_total_lines_field * 1000000; - DEBUG_PRINTF("actual_V_field_freq: %f\n",actual_V_field_freq) - - /* FIND IDEAL BLANKING DUTY CYCLE FROM FORMULA [%] */ - ideal_duty_cycle = c.c - (c.m * actual_H_period /1000); - DEBUG_PRINTF("ideal_duty_cycle: %f\n",ideal_duty_cycle) - //if (type == GTF_VF) - //{ - //moved - //} - } else if (type == GTF_HF) - { - /* FIND IDEAL BLANKING DUTY CYCLE FROM FORMULA [%] */ - ideal_duty_cycle = c.c - (c.m / freq); - DEBUG_PRINTF("ideal_duty_cycle: %f\n",ideal_duty_cycle) - } - - /* FIND BLANKING TIME (TO NEAREST CHAR CELL) [pixels] */ - - if (!(type == GTF_PF)) - { - blanking_time = round(total_active_pixels * ideal_duty_cycle \ - / (100-ideal_duty_cycle) / (2*c.char_cell_granularity)) \ - * (2*c.char_cell_granularity); - DEBUG_PRINTF("blanking_time : %f\n",blanking_time ) - } - else -// if (type == GTF_PF) - { - actual_V_field_freq = H_freq / V_total_lines_field * 1000; - } - - if (type == GTF_HF) - { - /* Hz */ - actual_V_field_freq = freq / V_total_lines_field * 1000; - DEBUG_PRINTF("actual_V_field_freq: %f\n",actual_V_field_freq) - } - - - actual_V_frame_freq = actual_V_field_freq; - - /* FIND ACTUAL VERTICAL FRAME FREQUENCY [Hz]*/ - - if (want_interlace) actual_V_frame_freq = actual_V_field_freq / 2; - DEBUG_PRINTF("actual_V_frame_freq: %f\n",actual_V_frame_freq) - -// V_freq = actual_V_frame_freq; -// DEBUG_PRINTF("V_freq %f\n",V_freq) - - - if (!(type == GTF_PF)) - { - /* FIND TOTAL NUMBER OF PIXELS IN A LINE [pixels] */ - H_total_pixels = total_active_pixels + blanking_time ; - DEBUG_PRINTF("H_total_pixels: %f\n",H_total_pixels) - if (type == GTF_VF) - { - /* FIND PIXEL FREQUENCY [Mhz] */ - pixel_freq = H_total_pixels / actual_H_period ; - DEBUG_PRINTF("pixel_freq: %f\n",pixel_freq) - } else if (type == GTF_HF) - { - /* FIND PIXEL FREQUENCY [Mhz] */ - pixel_freq = H_total_pixels * freq / 1000 ; - DEBUG_PRINTF("pixel_freq: %f\n",pixel_freq) - actual_H_period = 1000/freq; - } - - /* FIND ACTUAL HORIZONTAL FREQUENCY [KHz] */ - - H_freq = 1000 / actual_H_period; - DEBUG_PRINTF("H_freq %f\n",H_freq) - - - } - - /* FIND NUMBER OF LINES IN BACK PORCH [lines] */ - - BP = sync_plus_BP - c.Vsync_need; - DEBUG_PRINTF("BP: %f\n",BP) - -/*------------------------------------------------------------------------------------------------*/ - /* FIND H SYNC WIDTH (TO NEAREST CHAR CELL) */ - H_sync_width = round(c.sync_width/100*H_total_pixels/c.char_cell_granularity)*c.char_cell_granularity; - DEBUG_PRINTF("H_sync_width %f\n",H_sync_width) - - /* FIND FRONT H PORCH(TO NEAREST CHAR CELL) */ - H_front_porch = (blanking_time/2) - H_sync_width; - DEBUG_PRINTF("H_front_porch %f\n",H_front_porch) - /* FIND BACK H PORCH(TO NEAREST CHAR CELL) */ - H_back_porch = H_sync_width + H_front_porch; - DEBUG_PRINTF("H_back_porch%f\n",H_back_porch) - - H_sync_start = H_total_pixels - (H_sync_width + H_back_porch); - DEBUG_PRINTF("H_sync_start %f\n",H_sync_start) - H_sync_end = H_total_pixels - H_back_porch; - DEBUG_PRINTF("H_sync_end %f\n",H_sync_end) - - V_back_porch = interlace + BP; - DEBUG_PRINTF("V_back_porch%f\n",V_back_porch) - V_front_porch = interlace + c.min_front_porch; - DEBUG_PRINTF("V_front_porch%f\n",V_front_porch) - - V_sync_width = c.Vsync_need; - V_sync_start = V_total_lines_field - (V_sync_width + V_back_porch); - DEBUG_PRINTF("V_sync_start %f\n",V_sync_start) - V_sync_end = V_total_lines_field - V_back_porch; - DEBUG_PRINTF("V_sync_end %f\n",V_sync_end) - - result->hTotal = H_total_pixels; - result-> hSyncStart = H_sync_start; /* Horizontal sync start in pixels */ - result-> hSyncEnd = H_sync_end; /* Horizontal sync end in pixels */ - result-> vTotal= V_total_lines_field; /* Vertical total in lines */ - result-> vSyncStart = V_sync_start; /* Vertical sync start in lines */ - result-> vSyncEnd = V_sync_end; /* Vertical sync end in lines */ - result-> Flags = (result->Flags)|VESA_CRTC_HSYNC_NEG; /* Flags (Interlaced, Double Scan etc) */ - - if (want_interlace) - { - result->Flags = (result->Flags) | VESA_CRTC_INTERLACED; - } - - result-> PixelClock = pixel_freq*1000000; /* Pixel clock in units of Hz */ - result-> RefreshRate = actual_V_frame_freq*100;/* Refresh rate in units of 0.01 Hz*/ - - } diff --git a/libvo/gtf.h b/libvo/gtf.h deleted file mode 100644 index 837fc24e69..0000000000 --- a/libvo/gtf.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef MPLAYER_GTF_H -#define MPLAYER_GTF_H - -#include <vbe.h> - -#define GTF_VF 0 -#define GTF_HF 1 -#define GTF_PF 2 - - -typedef struct { - double Vsync_need; /* Number of lines for vert sync (default 3) */ - double min_Vsync_BP; /* Minimum vertical sync + back porch (us) (default 550)*/ - double min_front_porch; /* Minimum front porch in lines (default 1) */ - double char_cell_granularity; /* Character cell granularity in pixels (default 8) */ - double margin_width; /* Top/ bottom MARGIN size as % of height (%) (default 1.8) */ - double sync_width; /* Sync width percent of line period ( default 8) */ - double c; /* Blanking formula offset (default 40)*/ - double j; /* Blanking formula scaling factor weight (default 20)*/ - double k; /* Blanking formula scaling factor (default 128)*/ - double m; /* Blanking formula gradient (default 600)*/ - } GTF_constants; - -//#ifndef __VESA_VBELIB_INCLUDED__ -// struct VesaCRTCInfoBlock { -// unsigned short hTotal; /* Horizontal total in pixels */ -// unsigned short hSyncStart; /* Horizontal sync start in pixels */ -// unsigned short hSyncEnd; /* Horizontal sync end in pixels */ -// unsigned short vTotal; /* Vertical total in lines */ -// unsigned short vSyncStart; /* Vertical sync start in lines */ -// unsigned short vSyncEnd; /* Vertical sync end in lines */ -// unsigned char Flags; /* Flags (Interlaced, Double Scan etc) */ -// unsigned long PixelClock; /* Pixel clock in units of Hz */ -// unsigned short RefreshRate;/* Refresh rate in units of 0.01 Hz*/ -// unsigned char Reserved[40];/* remainder of CRTCInfoBlock*/ -//}__attribute__ ((packed)); - -//#define VESA_CRTC_DOUBLESCAN 0x01 -//#define VESA_CRTC_INTERLACED 0x02 -//#define VESA_CRTC_HSYNC_NEG 0x04 -//#define VESA_CRTC_VSYNC_NEG 0x08 - -//#endif - -void GTF_calcTimings(double X,double Y,double freq, int type, - int want_margins, int want_interlace,struct VesaCRTCInfoBlock *result); - -#endif /* MPLAYER_GTF_H */ diff --git a/libvo/matrixview_font.h b/libvo/matrixview_font.h deleted file mode 100644 index b12e8bbe8b..0000000000 --- a/libvo/matrixview_font.h +++ /dev/null @@ -1,606 +0,0 @@ -/* - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef MPLAYER_MATRIXVIEW_FONT_H -#define MPLAYER_MATRIXVIEW_FONT_H - -#include <stdint.h> - -#define FONT_TEXTURE_W 128 -#define FONT_TEXTURE_H 64 -static const uint8_t font_texture[FONT_TEXTURE_H][FONT_TEXTURE_W] = { - { - 2, 2, 2, 2, 5, 20, 52, 77, 13, 2, 2, 2, 2, 2, 2, 3, - 13, 42, 67, 71, 66, 34, 7, 2, 2, 2, 2, 4, 36, 69, 71, 71, - 71, 71, 70, 35, 4, 3, 2, 2, 2, 2, 2, 3, 2, 29, 70, 71, - 39, 3, 2, 3, 3, 44, 71, 71, 71, 72, 71, 71, 71, 65, 13, 2, - 3, 2, 3, 5, 30, 64, 72, 71, 45, 13, 3, 2, 2, 2, 29, 71, - 71, 71, 71, 71, 71, 71, 71, 47, 2, 2, 2, 2, 2, 5, 26, 58, - 63, 36, 7, 2, 2, 2, 2, 2, 2, 12, 58, 71, 71, 71, 71, 61, - 15, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 3, 2, 3, 5 - }, { - 2, 2, 2, 3, 30, 122, 127, 122, 20, 3, 2, 2, 2, 2, 3, 33, - 110, 125, 85, 54, 64, 111, 80, 8, 3, 3, 3, 20, 92, 63, 50, 50, - 83, 125, 127, 121, 29, 2, 2, 2, 2, 2, 3, 3, 14, 106, 118, 127, - 74, 2, 3, 3, 3, 42, 67, 67, 67, 67, 67, 102, 127, 120, 22, 3, - 2, 3, 8, 79, 125, 115, 73, 103, 127, 107, 28, 3, 2, 2, 21, 50, - 50, 49, 50, 50, 56, 118, 127, 85, 2, 2, 2, 2, 6, 65, 124, 127, - 123, 126, 89, 15, 2, 2, 2, 2, 3, 80, 127, 126, 65, 62, 124, 127, - 86, 5, 3, 2, 3, 3, 4, 12, 13, 7, 7, 12, 12, 4, 3, 6 - }, { - 2, 2, 2, 3, 12, 59, 125, 123, 20, 3, 2, 2, 2, 2, 7, 102, - 127, 99, 5, 3, 3, 24, 90, 32, 3, 3, 3, 3, 2, 3, 3, 3, - 5, 86, 127, 127, 51, 3, 2, 2, 2, 2, 3, 5, 78, 101, 70, 127, - 74, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 71, 127, 120, 23, 2, - 3, 3, 50, 126, 126, 35, 2, 14, 113, 127, 78, 5, 3, 3, 3, 3, - 2, 2, 3, 3, 21, 118, 127, 78, 2, 2, 2, 2, 36, 125, 127, 77, - 35, 106, 127, 76, 2, 2, 2, 2, 2, 93, 127, 109, 12, 35, 123, 127, - 100, 7, 3, 3, 3, 3, 16, 105, 110, 47, 54, 109, 98, 15, 3, 5 - }, { - 2, 2, 2, 2, 3, 31, 124, 123, 21, 2, 2, 2, 2, 2, 9, 112, - 127, 93, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 64, 127, 127, 51, 3, 2, 2, 2, 2, 3, 47, 116, 33, 62, 127, - 73, 3, 3, 2, 3, 7, 48, 77, 77, 77, 78, 107, 127, 119, 22, 3, - 2, 3, 90, 127, 114, 14, 3, 5, 94, 127, 95, 7, 3, 3, 3, 3, - 3, 3, 3, 4, 64, 127, 123, 29, 2, 2, 2, 2, 45, 127, 126, 56, - 15, 93, 127, 82, 2, 2, 2, 2, 3, 93, 127, 108, 15, 95, 127, 127, - 99, 8, 3, 3, 3, 2, 29, 127, 127, 41, 78, 127, 110, 14, 3, 6 - }, { - 2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 5, 83, - 127, 113, 11, 2, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 68, 127, 127, 51, 3, 3, 3, 2, 3, 20, 111, 62, 3, 62, 127, - 74, 2, 2, 3, 3, 50, 126, 127, 118, 66, 47, 47, 47, 43, 9, 2, - 2, 3, 98, 127, 125, 23, 3, 11, 110, 127, 87, 5, 3, 2, 2, 2, - 3, 3, 3, 26, 118, 127, 73, 4, 3, 2, 2, 2, 12, 100, 127, 122, - 109, 127, 115, 31, 2, 2, 2, 2, 2, 94, 127, 109, 55, 125, 127, 127, - 99, 7, 2, 3, 3, 3, 42, 127, 124, 32, 92, 127, 100, 7, 3, 5 - }, { - 2, 2, 2, 2, 2, 30, 124, 122, 20, 2, 2, 2, 2, 2, 2, 14, - 88, 126, 91, 18, 3, 3, 2, 2, 2, 2, 3, 3, 2, 9, 9, 10, - 25, 108, 127, 127, 48, 3, 2, 3, 4, 7, 86, 99, 15, 10, 66, 127, - 73, 2, 2, 2, 2, 65, 127, 127, 61, 4, 3, 3, 2, 2, 2, 2, - 2, 3, 92, 127, 127, 94, 48, 82, 126, 124, 57, 3, 3, 2, 2, 2, - 2, 4, 8, 91, 127, 106, 15, 3, 2, 2, 2, 2, 3, 53, 125, 127, - 127, 127, 74, 6, 2, 2, 2, 2, 2, 93, 127, 115, 115, 98, 121, 127, - 99, 7, 2, 2, 3, 3, 59, 127, 120, 26, 100, 127, 92, 3, 3, 5 - }, { - 2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 3, 3, - 10, 66, 121, 110, 42, 5, 3, 2, 2, 2, 3, 2, 3, 87, 102, 103, - 114, 119, 118, 91, 15, 3, 3, 3, 3, 54, 126, 114, 102, 102, 115, 127, - 74, 3, 2, 2, 2, 66, 127, 127, 50, 3, 3, 3, 2, 2, 2, 2, - 2, 3, 72, 127, 114, 84, 104, 105, 91, 46, 5, 3, 3, 2, 2, 2, - 2, 3, 51, 126, 126, 47, 3, 3, 2, 2, 2, 2, 29, 120, 127, 107, - 82, 122, 125, 49, 2, 2, 2, 2, 3, 93, 127, 127, 123, 36, 117, 127, - 99, 7, 2, 2, 3, 3, 75, 127, 115, 24, 108, 127, 80, 3, 3, 5 - }, { - 2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 2, 3, - 3, 4, 35, 107, 122, 66, 10, 3, 2, 2, 3, 3, 3, 34, 86, 120, - 112, 63, 29, 5, 3, 2, 3, 3, 4, 44, 59, 59, 59, 59, 93, 127, - 73, 3, 2, 2, 2, 65, 127, 127, 53, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 32, 122, 125, 40, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2, - 2, 7, 97, 127, 105, 10, 3, 3, 3, 2, 2, 2, 52, 127, 126, 45, - 5, 88, 127, 78, 2, 2, 2, 2, 3, 93, 127, 127, 83, 9, 117, 127, - 99, 7, 2, 2, 3, 3, 72, 111, 94, 20, 101, 111, 55, 2, 3, 5 - }, { - 6, 5, 6, 6, 6, 60, 249, 246, 40, 6, 5, 5, 5, 5, 13, 21, - 22, 22, 22, 47, 174, 254, 193, 49, 6, 5, 6, 16, 37, 36, 38, 83, - 183, 249, 209, 116, 23, 5, 6, 6, 6, 6, 7, 6, 5, 5, 123, 255, - 149, 5, 5, 5, 5, 129, 255, 255, 193, 42, 10, 8, 44, 61, 12, 5, - 6, 6, 7, 124, 243, 225, 82, 17, 6, 7, 7, 6, 6, 6, 5, 5, - 6, 20, 208, 255, 192, 6, 6, 5, 6, 5, 6, 5, 51, 237, 255, 199, - 149, 236, 249, 87, 6, 5, 5, 5, 5, 184, 255, 254, 72, 38, 238, 255, - 196, 14, 7, 6, 6, 5, 17, 24, 20, 8, 23, 24, 15, 5, 5, 5 - }, { - 7, 6, 6, 6, 5, 55, 226, 221, 38, 6, 5, 5, 5, 5, 96, 192, - 191, 192, 192, 191, 197, 234, 234, 151, 7, 6, 6, 74, 209, 209, 209, 210, - 210, 230, 235, 231, 85, 6, 6, 5, 21, 152, 174, 174, 174, 175, 204, 235, - 131, 5, 5, 5, 5, 53, 202, 233, 234, 210, 180, 176, 209, 151, 15, 5, - 6, 6, 6, 7, 63, 169, 215, 184, 148, 128, 14, 6, 6, 6, 6, 6, - 6, 18, 189, 235, 174, 6, 6, 6, 7, 6, 7, 6, 8, 82, 205, 242, - 244, 215, 115, 11, 6, 7, 6, 6, 6, 90, 219, 234, 205, 204, 235, 218, - 100, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 - }, { - 6, 6, 6, 7, 5, 13, 39, 36, 10, 6, 6, 5, 5, 5, 23, 40, - 40, 40, 39, 40, 40, 40, 39, 29, 6, 6, 6, 17, 38, 40, 40, 39, - 40, 41, 39, 41, 17, 6, 6, 6, 11, 50, 58, 49, 39, 38, 39, 38, - 25, 5, 5, 5, 5, 12, 37, 56, 58, 57, 58, 57, 51, 21, 6, 6, - |